我正在尝试创建一个在后台运行且不知道是否有任何接收器的媒体播放器控制器,就像按键盘上的一个键(如next track
媒体键)一样。
我试过使用keybd_event
,SendInput
或http://inputsimulator.codeplex.com/但它只有 wsender 窗口是焦点。
有没有什么方法可以模拟键盘按下,VK_MEDIA_NEXT_TRACK
而不是让发送者窗口成为焦点?
我正在尝试创建一个在后台运行且不知道是否有任何接收器的媒体播放器控制器,就像按键盘上的一个键(如next track
媒体键)一样。
我试过使用keybd_event
,SendInput
或http://inputsimulator.codeplex.com/但它只有 wsender 窗口是焦点。
有没有什么方法可以模拟键盘按下,VK_MEDIA_NEXT_TRACK
而不是让发送者窗口成为焦点?
这比您想象的要容易实现。这些键盘键是特殊的,它们不会产生击键。而是生成WM_APPCOMMAND 消息。从 MSDN 库文章中可以看出,“下一曲目”键的命令是 APPCOMMAND_MEDIA_NEXTTRACK。
该消息被发送到恰好具有前景的任何窗口。它几乎从不做任何事情,而是将其传递给默认窗口过程。这就是它的生命所在,它变成了一个 shell 命令,以允许一个 shell 钩子看到它。如果那不是自定义的,那么 Explorer 会选择它。
因此,您所要做的就是将 WM_APPCOMMAND 发送到您自己的窗口。可以隐藏,没问题。一个小的 Winforms 应用程序就可以完成工作,您只需要一个SendMessage()的 pinvoke 声明。WM_APPCOMMAND 是消息号 0x319。一个完整的例子在这里。