Windows システムプログラミング:現在アクティブではない開いているアプリケーションにキーストロークを送信できますか?
-
09-09-2019 - |
質問
Windows システム プログラミングに少し慣れてきました...
プログラムがキーストロークを送信することは可能ですか(私は推測しています) SendMessage()
(開いている) ターゲット アプリケーションに現在フォーカスがない場合、API 呼び出し) を別のアプリケーションに呼び出しますか?可能であれば、ターゲット アプリケーションがアクティブなアプリケーションになりますか、それともバックグラウンドのままでしょうか?
ご提供いただける情報がございましたら、よろしくお願いいたします。
解決
メモリから:はい、いいえ
あなたはWM_KEYDOWNを探しています:
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);
他のヒント
いいえ、それは、フォーカスを変更しません。これは、同じウィンドウの順序のままになります。
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);
これは私にとって、唯一のWindows XPで動作します。
しかし、VistaとWindows 7に私はあまりにも問題を持っています。 UIPIとPropably。 私は、このプロセスに注入されたDLLから処理するためのメッセージを送信しようとしています。
それを修正するには?
キーストロークの向き送信するために、SendInputは、選択肢のネイティブメソッドです。あなたは、IL>あなたが持っているアプリにキーストロークを送信することはできません。
の入力を取り込み、リダイレクトするためのより一般的な解決策は、(は、SetWindowsHookExのヘルプを参照)、グローバルキーボードフックです。しかし、これはかなり毛深いものです - あなたはあなたのコードが効率的に入力ストリームに挿入されているので、あなたはそれがネイティブDLLを書く必要は、システム内のすべてのプロセスに影響を与える上でキーストロークを送信する方法で対処しなければならない...あなたが知っている必要がありますあなたが正確に何をやってます。
私たちは(私はそれを書いた)我々のシステムでグローバルなキーボードフックを使用しますが、我々は特別なケースだ - 単一の関数緊急呼処理システム。私は、汎用のWindowsコンピューティングのソリューションとしてグローバルフックをお勧めしません。
あなたはSendInput()またはフックを必要としません。
のPostMessageとの答えが間違ってます。
あなたはあなたのスレッドをリモートで接続する必要があります。 のWin32 APIグループで見るのところ、それはです非常に古典的な質問(Cコード、右MS法)
はい、キーストロークを送信できます。いいえ、他のウィンドウを最上部に表示することはできません。
- 1 つの方法は、 入力の送信 API 関数 - これは 使用方法の例 VB6 (ulp!) で。
- たぶん使いやすい GUIオートメーション これは .NET Framework 3.0 から直接サポートされています - たとえば読み取ります これ.