Windows システムプログラミング:現在アクティブではない開いているアプリケーションにキーストロークを送信できますか?

StackOverflow https://stackoverflow.com/questions/593796

質問

Windows システム プログラミングに少し慣れてきました...

プログラムがキーストロークを送信することは可能ですか(私は推測しています) SendMessage() (開いている) ターゲット アプリケーションに現在フォーカスがない場合、API 呼び出し) を別のアプリケーションに呼び出しますか?可能であれば、ターゲット アプリケーションがアクティブなアプリケーションになりますか、それともバックグラウンドのままでしょうか?

ご提供いただける情報がございましたら、よろしくお願いいたします。

役に立ちましたか?

解決

メモリから:はい、いいえ

あなたはWM_KEYDOWNを探しています:

PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);

他のヒント

後続の呼び出しは、のSetFocus行う場合を除き、

いいえ、それは、フォーカスを変更しません。これは、同じウィンドウの順序のままになります。

PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);

これは私にとって、唯一のWindows XPで動作します。

しかし、VistaとWindows 7に私はあまりにも問題を持っています。 UIPIとPropably。 私は、このプロセスに注入されたDLLから処理するためのメッセージを送信しようとしています。

それを修正するには?

それはVistaの/ 2008 / W7にUIPI(整合性レベル)のチェックの対象ですが、

キーストロークの向き送信するために、SendInputは、選択肢のネイティブメソッドです。あなたは、IL>あなたが持っているアプリにキーストロークを送信することはできません。

の入力を取り込み、リダイレクトするためのより一般的な解決策は、(は、SetWindowsHookExのヘルプを参照)、グローバルキーボードフックです。しかし、これはかなり毛深いものです - あなたはあなたのコードが効率的に入力ストリームに挿入されているので、あなたはそれがネイティブDLLを書く必要は、システム内のすべてのプロセスに影響を与える上でキーストロークを送信する方法で対処しなければならない...あなたが知っている必要がありますあなたが正確に何をやってます。

私たちは(私はそれを書いた)我々のシステムでグローバルなキーボードフックを使用しますが、我々は特別なケースだ - 単一の関数緊急呼処理システム。私は、汎用のWindowsコンピューティングのソリューションとしてグローバルフックをお勧めしません。

あなたはSendInput()またはフックを必要としません。

のPostMessageとの答えが間違ってます。

あなたはあなたのスレッドをリモートで接続する必要があります。 のWin32 APIグループで見るのところ、それはです非常に古典的な質問(Cコード、右MS法)

はい、キーストロークを送信できます。いいえ、他のウィンドウを最上部に表示することはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top