質問するログイン新規登録

質問編集履歴

2

追記としてコードを追加した

2016/01/28 10:11

投稿

aridai1221
aridai1221

スコア45

title CHANGED
File without changes
body CHANGED
@@ -13,4 +13,86 @@
13
13
  しかし、最初の画面のスクリーンショットを撮るという処理ができません。
14
14
  フォーム外にマウスがあるときにマウスの座標を取得することができないからです。
15
15
 
16
- どのようにすれば実装することができるのでしょうか。
16
+ どのようにすれば実装することができるのでしょうか。
17
+
18
+ 追記
19
+ コード載せておきます
20
+
21
+ ```C#
22
+ // てきとーにusing文
23
+ using System;
24
+ using System.Drawing;
25
+ using System.Windows.Forms;
26
+
27
+ // Win32APIを使用するのに必要
28
+ using System.Runtime.InteropServices;
29
+
30
+ // てきとーに省略
31
+ // (てきとーなクラス内に記述)
32
+ private int R, G, B;
33
+ private Timer timer = null;
34
+
35
+ private void hoge()
36
+ {
37
+ // タイマー
38
+ timer = new Timer();
39
+ timer.Interval = 50;
40
+
41
+ // てきとーなタイミングでタイマースタート
42
+ timer.Start();
43
+
44
+ // 定期的に呼ばれる処理
45
+ timer.Tick += (object sender, EventArgs e) =>
46
+ {
47
+ // マウスの左ボタンがクリックされたら
48
+ if (isLButtonDown())
49
+ {
50
+ // マウスカーソルの絶対座標
51
+ int x = Control.MousePosition.X;
52
+ int y = Control.MousePosition.Y;
53
+
54
+ // RGB値を抜き出す処理
55
+ pickupPixelColor(x, y);
56
+
57
+ /*
58
+ 処理が完了したので
59
+ タイマーをStopするなり、
60
+ 他の処理を書くなり
61
+ てきとーにする
62
+ */
63
+ }
64
+ }
65
+ }
66
+
67
+ // Win32APIの使用 (catsforepawさんのコード)
68
+ [DllImport("user32.dll")]
69
+ private static extern short GetKeyState(int nVirtKey);
70
+
71
+ // マウス左ボタンが押されているかどうかをチェック
72
+ private bool isLButtonDown()
73
+ {
74
+ // 押された状態だと最上位ビットが1になるので、負数かどうかで判定可能
75
+ return GetKeyState(0x01) < 0;
76
+ }
77
+
78
+ // 指定した画面上の座標のRGB値を取得する
79
+ private void pickupPixelColor(int x, int y)
80
+ {
81
+ // 1x1のサイズのBitmapを生成する
82
+ Bitmap bitmap = new Bitmap(1, 1);
83
+
84
+ // 先ほどのBitmapを元にGraphicsを生成する
85
+ Graphics graphics = Graphics.FromImage(bitmap);
86
+
87
+ // Bitmapに指定座標のスクリーンショットをコピーする
88
+ graphics.CopyFromScreen(new Point(x, y), new Point(0, 0), new Size(1, 1));
89
+
90
+ // BitmapからColorのインスタンスを取得する
91
+ Color color = bitmap.GetPixel(0, 0);
92
+
93
+ // RGB値を保存する
94
+ R = color.R;
95
+ G = color.G;
96
+ B = color.B;
97
+ }
98
+ ```

1

タグの追加

2016/01/28 10:11

投稿

aridai1221
aridai1221

スコア45

title CHANGED
File without changes
body CHANGED
File without changes