回答編集履歴
1
サンプルコード追記
answer
CHANGED
@@ -3,4 +3,36 @@
|
|
3
3
|
input[1]とinput[2]に値を設定するところでSleepを挟んだりしていませんか? input配列に設定した内容は`SendInput`関数実行時に一括で処理されます。
|
4
4
|
`mi.time`はウェイト時間ではなく「タイムスタンプ」ですが、何を基準にしているのかは判りません(リファレンスにも書かれていません)。とりあえず0のままにしておくのが無難です。
|
5
5
|
|
6
|
-
そのため、ウェイトを入れたい場合は、SendInputを複数回に分けて実行し、その間でSleepさせるようにします。
|
6
|
+
そのため、ウェイトを入れたい場合は、SendInputを複数回に分けて実行し、その間でSleepさせるようにします。
|
7
|
+
|
8
|
+
---
|
9
|
+
追記
|
10
|
+
ドラッグアンドドロップのサンプルコードです。
|
11
|
+
マウスカーソルの移動はわざわざ`SendInput`を使わずに`Cursor.Position`で行った方が簡単です。
|
12
|
+
```C#
|
13
|
+
INPUT[] input = new INPUT[1];
|
14
|
+
input[0].type = INPUT_MOUSE;
|
15
|
+
|
16
|
+
// ドラッグ位置に移動
|
17
|
+
Cursor.Position = new Point(480, 220);
|
18
|
+
|
19
|
+
// マウス左ボタン押す
|
20
|
+
input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
|
21
|
+
SendInput(1, input, Marshal.SizeOf(input[0]));
|
22
|
+
|
23
|
+
// ちょっと間を置いて
|
24
|
+
Thread.Sleep(100);
|
25
|
+
// 少しずらして
|
26
|
+
Cursor.Position = new Point(500, 210);
|
27
|
+
// ちょっと間を置いて
|
28
|
+
Thread.Sleep(100);
|
29
|
+
// ドロップ位置に移動
|
30
|
+
Cursor.Position = new Point(800, 950);
|
31
|
+
|
32
|
+
// ウェイトを入れて
|
33
|
+
Thread.Sleep(1000);
|
34
|
+
|
35
|
+
// マウス左ボタン離す
|
36
|
+
input[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
|
37
|
+
SendInput(1, input, Marshal.SizeOf(input[0]));
|
38
|
+
```
|