32

    アクティブ化されたウィンドウにコマンドを送信するアプリケーションを既に作成しました。フォーカスを別のウィンドウに切り替えるとすぐに、送信キーを介して送信されるキーストロークが、切り替えたばかりのウィンドウに移動するため、プロセスの実行中にコンピューターを使用できるようにしたいと考えています。

    現在、Windows API の FindWindow、IsIconic、および ShowWindow を使用しています。FindWindow でウィンドウが存在するかどうかを確認し、その呼び出しで返される特定のウィンドウにオブジェクトを設定する必要があります。次に、IsIconic で最小化されているかどうかを確認し、最小化されている場合は ShowWindow を呼び出し、最後に呼び出す必要があります。 Interaction.AppActivate を使用して、そのウィンドウにフォーカスを設定します。これはすべて、キー ストロークを送信する前に行われます。ウィンドウを表示してアクティブにすることなく、キーストロークを送信するだけの方法があるはずです。大きな問題は、アプリケーションがキー ストロークを実行している間、自分のコンピューターで何もできないことです。

4

4 に答える 4

34

Alright, this is kind of disappointing I'm sure, but you fundamentally cannot do this with 100% reliability.

Windows assumes that the active window is the one getting keyboard input. The proper way to fake keyboard input is with SendInput, and you'll notice that it sends messages to the active window only.

That being said, you can SendMessage WM_KEYUP, WM_CHAR, and WM_KEYDOWN messages and (depending on the WndProc receiving them) maybe get away with it. But remember, its going to break under some circumstances, period.

于 2009-08-05T00:44:43.750 に答える
8

Sounds like you are using keybd_event() or SendInput(), which both send keystrokes to the currently active window. To direct keystrokes to a specific window, regardless of whether that widnow is focused or not, you need to find its HWND handle first, and then post appropriately-formatted WM_KEYUP/DOWN and WM_CHAR messages directly to it.

于 2009-08-05T00:41:51.457 に答える