2017-04-22 18 views
0

マウスクリックをシミュレートするために、次のようにC++スニペットを作成しました。SendInputが連続して動作しない

INPUT mouseData[2]; 
ZeroMemory(mouseData, sizeof(mouseData)); 

mouseData[0].type = INPUT_MOUSE; 
mouseData[0].mi.dx = xx; 
mouseData[0].mi.dy = yy; 
mouseData[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 
mouseData[0].mi.mouseData = 0; 
mouseData[0].mi.time = 0; 

mouseData[1].type = INPUT_MOUSE; 
mouseData[1].mi.dx = 10; 
mouseData[1].mi.dy = 10; 
mouseData[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 
mouseData[1].mi.mouseData = 0; 
mouseData[1].mi.time = 0; 

SendInput(1, &mouseData[0], sizeof(INPUT)); 
Sleep(30); 
SendInput(1, &mouseData[1], sizeof(INPUT)); 

しかし、うまくいきません。 元のSendInputは機能しますが、後者のSendInputは機能しません。 なぜですか?

別:私は、画面の任意の位置に手動でマウスをクリックしてマウスクリックのための

  1. コールSendInput
  2. を以下のようSendInputを試してみました。
  3. コールSendInput

上記はうまくいきます。 しかし、2がなければ、動作しません。どうして?

+0

これはマウス通知を受け取るプログラムには非常に混乱します。それをすべて同時にやってはいけません。まず移動してから、次に動かしてください。 –

+0

これらのイベントは、アトミックに処理できるように配列に配置します。一度に1つずつ送信しないでください。すべてのイベントを含むSendInputへの1回の呼び出し。また、それぞれの異なる行動に対して1つのイベントが必要です。ドキュメントをお読みください。 –

+0

間違ったフラグを設定しています。左下と左上のフラグは1つの入力で送信できますか? – SMUsamaShah

答えて

2

MSDNは、有効フラグのits description

にこのメンバーのビットは、以下の値の任意の合理的な組み合わせであることができるスーパー有用ではありません。

個人的には、同じ入力コマンドでdownフラグとupフラグの両方を使用することは妥当であるとは言えません。すべてのアプリケーションとの互換性を最大限に高めるには、通常のユーザーのように、移動、ボタンダウン、最後にボタンアップのような操作を実行します。

多くのマウス操作を行う場合は、これらの3つの入力ステップを実行するヘルパー関数を作成することをお勧めします。

関連する問題