長くなってしまったので、新しい回答を作成しています。私は調査を行い、何が起こっているのかを知っていると確信しています。しかし、結論を出す前に調べたすべての公式リソースについて言及します。
可能なパッケージ ソリューション
まず第一に、新しいWindows 入力シミュレーターは、箱から出してすぐにすべての問題を解決する可能性があります。以下で説明する Windows API が必要な場合は、まずPInvoke.netをチェックして、実行しようとしている呼び出しに関するドキュメントがあるかどうかを確認してください。
Windows API の方法
開始するのに最適な場所は、MSDNのユーザー インタラクションの記事です。そこには新しい Winu8 Touch API がたくさんありますが、おそらく古いキーボード入力の記事に興味があるでしょう。
アプリケーションのすべてのウィンドウには、関連するメッセージ (ボタンのクリック、ウィンドウが GUI を描画する必要があることを示すメッセージ、ウィンドウを適切に破棄するよう警告するイベントなど) に対応するWindows プロシージャ(別名) が必要です。 Window によって保持されるリソース. このプロシージャは、マウスクリックやキーボードのキーなどの入力デバイスからのメッセージの処理も担当します。WindowsProc
WM_QUIT
あなたの場合、ウィンドウにキーボードからのメッセージがないときにメッセージがあると思わせることにもっと興味があります。それがSendInput
API 呼び出しの目的です。INPUT
キーボード、マウス、その他の入力デバイスなど、一連のメッセージをキューに直接挿入できるため、ユーザーが物理的に操作する必要がありません。この簡単な API 呼び出しは、具体的MOUSEINPUT
には、、、KEYBDINPUT
またはHARDWAREINPUT
メッセージを受け入れます。
キーボードの場合、キーが押されたWM_KEYDOWN
とき ( ) とキーが離されたとき ( WM_KEYUP
) にメッセージが表示されるため、 のようなホットキーを決定するには、キーの後に受け取った文字CTRL+C
のメッセージを監視する必要があります。そのメッセージ。WM_KEYDOWN
C
WM_KEYDOWN
CTRL
WM_KEYUP
入力デバイス メッセージの管理
入力デバイスをシミュレートするには、および/またはメッセージをターゲット ウィンドウSendInput
に渡すために使用します。ただし、アプリケーションは複数のウィンドウを持つことができることを忘れないでください。さまざまな Windows を取得するための API 呼び出しがありますが、それを使用する前にそれを見つけるためのコードを作成する必要があります。WM_KEYDOWN
WM_KEYUP
SendInput
ウィンドウが入力デバイスについて何を信じているかを調べるには、 を使用しますGetAsyncKeyState
。入力デバイス関連の API をいじったことがあると、信頼できなくなる可能性があります。
ブロックしたスレッドからの呼び出しをBlockInput
除くすべてのメッセージを拒否するウィンドウの呼び出しがあります。SendInput
ほとんどの場合、できるだけ早く入力を再度有効にするのが正しいことです。ドキュメントによると、ブロッキング スレッドが停止するBlockInput
と無効になります。EnableWindow
ウィンドウが入力フォーカスを受け取るのを防ぐ呼び出しは、同様ですがそれほど厳しくはありません。
Windows 用の API には、フックを登録する機能が含まれています。これにより、メッセージの種類や特定のウィンドウを指定して、ユーザー指定の関数で確認することができます。