2012年3月15日木曜日

遠隔キー操作&キーボードシミュレーション SendInput

1台のPCで他のPCにキー入力するという代物です。
マウスで他PC操作に切り替えるとか特定のキーで切り替えるとかではだめで、
欲しいのは、任意の指定キーを、他のPCには違うキーを入力するとういものです。

ないので作成することに、
メインPCでキーフックして、キーコードをTCP/IPでサブPCに
送り、サブPCでは受信したキーコードを設定に従い、特定キーコード
にして、SendInputでキーボードイベントを発生させるという物です。
(ちなみに、対象はDirect-Xアプリでも反応すること)

Direct-Xアプリでも反応するには、以下のコードにすればOKでした。
INPUT input[1];
::ZeroMemory(input, sizeof(input));
input[0].type = INPUT_KEYBOARD;

Sleep(pre);
input[0].ki.wVk = key_code;
input[0].ki.wScan = MapVirtualKey(key_code, 0);
input[0].ki.dwExtraInfo = ::GetMessageExtraInfo();
input[0].ki.dwFlags = KEYEVENTF_SCANCODE;
::SendInput(1, input, sizeof(INPUT));
Sleep(after);
input[0].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
::SendInput(1, input, sizeof(INPUT));

1)KEYEVENTF_SCANCODEにすれば、DirectInputを使ってるDirect-Xアプリでも
反応します。
2)キーDOWN、UPにSleepを入れます。
一般のアプリだと入れる必要はないですが、あるアプリ群ではこれだと
反応してくれませんので、遅延を入れます。
設定によって、pre,afterを最適値に設定します。(数msec~数10msec)

0 件のコメント:

コメントを投稿