キーボードとマウスの自動操作

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もあります。