经过尝试SendInput、SendKeys、PostMessage、SendMessage、SendNotifyMessage、keybd_event等各种方法后,我发现尝试向另一个非前景进程发送键盘输入相当棘手且不可靠。
我尝试了一种SendInput的方法,在其中欺骗Z顺序(以保持当前窗口在顶部),并快速将第三方窗口置于前景,发送输入,然后重新将我的窗口置于前景。但这最终失败了,并且还不知道为什么,在没有前景的情况下还成功地在我的窗口上处理了按键(导致两个窗口之间无限循环发送和接收,直到我设法关闭该进程)。
我尝试了不同的SendMessage和PostMessage组合。一个用于按下,一个用于弹起,因为同时使用两个会出现问题,例如两个都用于PostMessage会导致接收窗口上的键重复。或者两个都用于SendMessage,这会导致文本输入出现问题,但其他功能正常运行。对于所有功能,SendMessage用于keydown,而PostMessage用于keyUp可以工作,但可靠性大大降低,并增加了按键事件的延迟。只有PostMessage用于keydown,而SendMessage用于keyup的组合才能做任何有用的事情,但keyup的注册率可能会下降5-10%。SentNotifyMessage也是一样的(在可靠性方面基本上与SendMessage相同)。
因此,我已经无计可施了,并且想知道如何直接将钩子注入目标窗口,并以这种方式发送按键,绕过消息队列等。以一种不会触发全局按键事件,仅影响目标窗口的方式进行。唯一的问题是,当涉及到注入/钩子等方面时,我对此并不太了解。所以我向您,社区求助。
该怎么办?
PostMessage(handle, WM_KEYDOWN, key, 0);
来发送按键按下消息和PostMessage(handle, WM_KEYUP, key, 0);
来发送按键松开消息时,为什么会出现这种情况:链接。 - Hydra