キーボードとマウスの自動操作
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もあります。