为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

墨色风雨 2019-08-28 15:11:33
如何使用Windows API将键击发送到窗口而不必激活它?我已经创建了一个应用程序,它将命令发送到激活的窗口。我希望能够在我的进程运行时使用计算机,因为只要我将焦点切换到另一个窗口,通过发送键发送的击键将转到我刚切换到的窗口。    目前我使用Windows API中的FindWindow,IsIconic和ShowWindow。我必须检查窗口是否有FindWindow,并将我的对象设置为该调用返回的特定窗口,然后检查是否使用IsIconic最小化并调用ShowWindow,如果是,最后我必须调用Interaction.AppActivate将焦点设置到该窗口。所有这一切都在我发送击键之前完成。似乎应该有一种方法来发送击键而不必显示窗口并激活它。最重要的是当我的应用程序运行按键时,我无法在计算机上执行任何操作。
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

一旦你有了Windows HWND,就可以直接将SendMessage()WM_KEYDOWN和WM_KEYUP消息发送到它的消息队列。窗口不必是活动的。

但是,请理解这取决于目标应用程序如何处理键盘输入。有几种不同的方法来处理它。

WM_KEYUP / WM_KEYDOWN是最常见的,有些应用程序只处理一个或另一个(通常是WM_KEYDOWN)。

WM_CHAR也很常见

某些程序使用GetAsyncKeyState,GetKeyState或GetKeyboardState。这是非常不寻常的,但有效地防止了SendMessage()的按键注入。如果是这种情况,则回退到keybd_event(),它由键盘驱动程序直接处理。当然窗口必须是活动的


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 943 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信