模拟键盘事件,如果发送者不在焦点上,而不知道目标窗口



我正在尝试创建一个媒体播放器控制器,在后台运行时工作,而不知道是否有任何接收器,就像按键盘上的键,如next track媒体键。

我试过使用keybd_event, SendInput或http://inputsimulator.codeplex.com/,但它只有在发送者窗口是焦点。

是否有任何方法可以模拟像VK_MEDIA_NEXT_TRACK这样的键盘按下,而不需要将发送方窗口放在焦点上?

这是一个很多比您想象的更容易实现。这些键盘键很特别,它们不产生击键。而是生成一个WM_APPCOMMAND消息。"Next track"键的命令是APPCOMMAND_MEDIA_NEXTTRACK,您可以从MSDN库文章中看出。

该消息被发送到碰巧具有前景的任何窗口。它几乎不会对它做任何事情,而是将它传递给默认的窗口过程。这就是它的意义所在,它被转换成shell命令,允许shell钩子看到它。如果这不是自定义的,那么资源管理器会选择它。

所以你所要做的就是发送一个WM_APPCOMMAND到你自己的窗口。它可以隐藏起来,没有问题。一个小的Winforms应用程序就可以完成这项工作,你只需要为SendMessage()做一个pinvoke声明。WM_APPCOMMAND是消息号0x319。完整的示例如下:

最新更新