キーボードとマウスの自動操作
Windows上のプログラムから、マウスやキーボードの自動操作(マウス/キーボード入力の自動生成)を試してみます。プログラムから、Windowsマシンを自動操作(遠隔操縦、オートパイロット)してみましょう。
Windowsの自動操作プログラム
Windowsで動くプログラムでは、keybd_event()でキーボードの入力イベントを、mouse_event()でマウスの入力イベントを生成することができます。これらの関数を呼び出せば、プログラムからマウス操作やキー操作を行ってWindowsの自動操作が可能になるわけですね。
たとえば、Windows上で以下のプログラムを実行すると
- マウスカーソルを画面の中央に移動
- マウス左クリック
- マウス左アップ
- Print Screenキー(仮想キーコード0x2C)押下
- Print Screenキー解放
といった操作を自動的に行います。
#include <windows.h>
int main() {
/* マウスカーソルを画面中央に */
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,
32768, 32768, 0, NULL);
/* マウス左ダウン */
mouse_event(MOUSEEVENTF_LEFTDOWN,
0, 0, 0, NULL);
/* マウス左アップ */
mouse_event(MOUSEEVENTF_LEFTUP,
0, 0, 0, NULL);
/* Print Screenキー押下・解放 */
keybd_event(0x2C, 0, 0, 0);
keybd_event(0x2C, 0, KEYEVENTF_KEYUP, 0);
return 0;
}
マウスカーソルの移動は、mouse_event()の最初の引数で行う操作がマウスカーソルの移動であることを表すフラグMOUSEEVENTF_MOVEを指定します。この時にMOUSEEVENTF_ABSOLUTEも指定すると、画面全体が(0, 0) - (65535, 65535)に対応する座標系で移動する位置を指定できるので、中央に持っていくには(32768, 32768)を指定すれば良いわけですね。
このプログラムを実行すると、画面の中央部にあるウインドウがアクティブになり、画面キャプチャがクリップボードにコピーされたはずです(ペイントなどで確認してみましょう)。
マウス・キーボードの入力を生成するものとしては、他にSendInput()というAPIもあります。