如何使用Windows API将键击发送到窗口而不必激活它?

如何使用Windows API将键击发送到窗口而不必激活它?

我已经创建了一个应用程序,它将命令发送到激活的窗口。我希望能够在我的进程运行时使用计算机,因为只要我将焦点切换到另一个窗口,通过发送键发送的击键将转到我刚切换到的窗口。

    目前我使用Windows API中的FindWindow,IsIconic和ShowWindow。我必须检查窗口是否有FindWindow,并将我的对象设置为该调用返回的特定窗口,然后检查是否使用IsIconic最小化并调用ShowWindow,如果是,最后我必须调用Interaction.AppActivate将焦点设置到该窗口。所有这一切都在我发送击键之前完成。似乎应该有一种方法来发送击键而不必显示窗口并激活它。最重要的是当我的应用程序运行按键时,我无法在计算机上执行任何操作。


墨色风雨
浏览 949回答 3
3回答

慕侠2389804

一旦你有了Windows HWND,就可以直接将SendMessage()WM_KEYDOWN和WM_KEYUP消息发送到它的消息队列。窗口不必是活动的。但是,请理解这取决于目标应用程序如何处理键盘输入。有几种不同的方法来处理它。WM_KEYUP / WM_KEYDOWN是最常见的,有些应用程序只处理一个或另一个(通常是WM_KEYDOWN)。WM_CHAR也很常见某些程序使用GetAsyncKeyState,GetKeyState或GetKeyboardState。这是非常不寻常的,但有效地防止了SendMessage()的按键注入。如果是这种情况,则回退到keybd_event(),它由键盘驱动程序直接处理。当然窗口必须是活动的
打开App,查看更多内容
随时随地看视频慕课网APP