私は自分の Windows システム プログラミングに少し慣れていません...
SendMessage()
(開いている)ターゲットアプリケーションに現在フォーカスがない場合、プログラムがキーストローク(API呼び出しで推測)を別のアプリケーションに送信することは可能ですか? 可能であれば、ターゲット アプリケーションをアクティブなアプリケーションにしますか、それともバックグラウンドのままにしますか?
提供できる情報をお寄せいただきありがとうございます。
私は自分の Windows システム プログラミングに少し慣れていません...
SendMessage()
(開いている)ターゲットアプリケーションに現在フォーカスがない場合、プログラムがキーストローク(API呼び出しで推測)を別のアプリケーションに送信することは可能ですか? 可能であれば、ターゲット アプリケーションをアクティブなアプリケーションにしますか、それともバックグラウンドのままにしますか?
提供できる情報をお寄せいただきありがとうございます。
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);
これは私にとっては機能しますが、Windows XP でのみ機能します。
しかし、Vista と Windows 7 では、私も問題を抱えています。おそらくUIPIで。このプロセスに挿入された DLL からプロセスにメッセージを送信しようとしています。
修正方法は?
いいえ、それ以降の呼び出しで setfocus が行われない限り、フォーカスは変更されません。同じウィンドウ順序のままです
記憶から:はい、いいえ。
あなたはWM_KEYDOWNを探しています:
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);
キーストロークの直接送信の場合、SendInputがネイティブの選択方法ですが、Vista / 2008 / W7でのUIPI(整合性レベル)チェックの対象となります。ILが自分のものであるアプリにキーストロークを送信することはできません。
入力をキャプチャしてリダイレクトするためのより一般的なソリューションは、グローバルキーボードフックです(SetWindowsHookExのヘルプを参照してください)。しかし、これはかなり厄介なことです-キーストロークを送信する方法に対処する必要があります。コードが入力ストリームに効果的に挿入されるため、システム内のすべてのプロセスに影響します。ネイティブDLLの記述が含まれます...知っておく必要がありますまさにあなたがしていること。
私たちのシステムではグローバルキーボードフックを使用していますが(私はそれを書きました)、私たちは特別なケースです-単一機能の緊急通話処理システムです。汎用Windowsコンピューティングのソリューションとしてグローバルフックをお勧めしません。
SendInput()やフックは必要ありません
PostMessageの答えは間違っています。
スレッドをリモートで接続する必要があります。Win32 api Groupで、非常に古典的な質問(Cコード、正しいMSメソッド)を参照してください。