2009-02-27 4 views
2

私は、Windowsのシステムプログラミングに少しさびたんだ...Windowsシステムプログラミング:現在アクティブなアプリケーションではない開いているアプリケーションにキーストロークを送信できますか?

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

ご提供いただける情報がありがとうございます。

答えて

0

ままになります:はい、いいえ

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

PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0); 
+0

正しいとは思わないでください。ターゲットウィンドウには、WM_KEYDOWNも1つ必要です。 – MarkJ

+0

あなたはこのSimonを削除する必要があります。間違っています。 – MarkJ

+0

PostMessage()がうまくいきました。試しました。 MarkJ、 "ターゲットウィンドウでもWM_KEYDOWNを期待している"ということを確認できませんか?これはPostMessageの第2パラメータに含まれています。 –

1

いいえ、それ以降の呼び出しでsetfocusが行われない限り、フォーカスは変更されません。これは、メモリから、同じウィンドウの順序

0

はい、あなたがキーストロークを送信することができ、ない、それは他のウィンドウをもたらすことはありません頂点に。

+0

リンクをありがとう。私はVB/VBAからSendKeys()に精通しています。問題は、アクティブなアプリにキーを送信するだけなので、自分のバージョンをロールする必要があるということです。 .NETのリンクは興味深いように見え、それをさらに調べます。 –

+0

最初のリンクはネイティブVB SendKeysを使用しません。これはAPI呼び出しSendInputを使用した置換であるため、その制限はありません。 – MarkJ

+0

悲しいです、それは使用しているSendInput()APIコールが「フォアグラウンドアプリケーションに送信される」キーストロークと同じ制限を持っているため、*制限があります。 - 上記のようにPostMessage()を調べるためにSendInput()のmsdn情報を調べると見つかりました... –

0

Vista/2008/W7のUIPI(整合性レベル)検査を受けていますが、SendInputはネイティブの選択方法です。あなたは、あなたのIL>を持っているアプリにキーストロークを送信することはできません。

入力をキャプチャしてリダイレクトするためのより一般的なソリューションは、グローバルキーボードフックです(SetWindowsHookExのヘルプを参照)。しかし、これはかなり毛深いものです - キーストロークを送信する方法に対処しなければならない、あなたのコードが入力ストリームに効果的に挿入され、ネイティブDLLを書くことが必要なため、システムのすべてのプロセスに影響を与えます。まさにあなたがやっていること。

システムではグローバルキーボードフックを使用しました(私は書いた)が、私たちは特別なケースである - 単一機能の緊急呼処理システム。私は、汎用Windowsコンピューティングのソリューションとしてグローバルフックにアドバイスしません。

+0

Vista UIPIについてのお返事に感謝してくれてありがとうございます。私が後で見つけたように、SendInput()はそれをフォアグラウンドアプリケーションに送ります。結局のところ、PostMessage()は私の単純なニーズのために働いています。注:UIPIはPostMessage()にも適用されます。 –

0

あなたはのPostMessageとの答えが間違っているSendInput()またはフック

を必要としません。

スレッドをリモートで接続する必要があります。これは私にとって、唯一のWindows XPで動作します、それは非常に古典的な質問(Cコード、右MS法)ですWin32 api Group

+1

壊れたリンク、および理解しにくいビット!彼はキーストロークを送る方法を尋ねています。時にはフォアグラウンド以外のウィンドウを前面に表示するためにスレッドを追加することもありますが、これは彼が求めていることではありません。 – MarkJ

+0

彼はAttachThreadInput()を参照している可能性がありますか?それはまったく違う。 –

1
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0); 

で見ます。

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

修正方法?

+0

これはWindows 8でこれ以上動作しないことが確認できます - 私はWM_KEY *またはWM_CHARが実際にメッセージを送信したかどうかを確認する必要がありますか、フォーカスを持っているだけのメモ帳でEDITコントロールです。 –

関連する問題