如果发件人不在焦点且不知道目标窗口,则模拟键盘事件

时间:2013-05-24 20:31:25

标签: c# keyboard-events

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

我尝试过使用keybd_eventSendInputhttp://inputsimulator.codeplex.com/,但只有wsender窗口才会成为焦点。

有没有办法模拟像VK_MEDIA_NEXT_TRACK这样的键盘按下而没有关注发件人窗口?

1 个答案:

答案 0 :(得分:2)

这比您想象的更容易实现 lot 。这些键盘键是特殊的,它们不会产生击键。而是生成WM_APPCOMMAND message。从MSDN库文章中可以看出,“下一曲目”键的命令是APPCOMMAND_MEDIA_NEXTTRACK。

该消息被发送到碰巧具有前景的任何窗口。它几乎从不对它做任何事情,而是将它传递给默认的窗口程序。这就是它生命的地方,它变成了一个shell命令,允许shell钩子看到它。如果没有自定义,那么资源管理器会把它拿起来。

所以你要做的就是将WM_APPCOMMAND发送到你自己的窗口。它可以隐藏,没问题。一个小的Winforms应用程序将完成工作,您只需要SendMessage()的pinvoke声明。 WM_APPCOMMAND是消息号0x319。