C# 如果发送方未处于焦点且不知道目标窗口,则模拟键盘事件

C# 如果发送方未处于焦点且不知道目标窗口,则模拟键盘事件,c#,keyboard-events,C#,Keyboard Events,我正在尝试创建一个媒体播放器控制器,该控制器在后台运行时工作,不知道是否有接收器,就像按下键盘上的键,如next trackmedia键一样 我尝试过使用keybd\u event,SendInput或,但只有wsender窗口处于焦点位置 是否有任何方法可以模拟键盘按键,如VK\u MEDIA\u NEXT\u TRACK,而无需聚焦发送者窗口?这比您想象的要容易得多。这些键盘键是特殊的,它们不会产生击键。而是生成一个。“下一个曲目”键的命令是APPCOMMAND\u MEDIA\u NEXT

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

我尝试过使用
keybd\u event
SendInput
或,但只有wsender窗口处于焦点位置

是否有任何方法可以模拟键盘按键,如
VK\u MEDIA\u NEXT\u TRACK
,而无需聚焦发送者窗口?

这比您想象的要容易得多。这些键盘键是特殊的,它们不会产生击键。而是生成一个。“下一个曲目”键的命令是APPCOMMAND\u MEDIA\u NEXTTRACK,这可以从MSDN库文章中看出

该消息被发送到任何具有前景的窗口。它几乎从不使用它做任何事情,而是将它传递给默认的窗口过程。这就是它的生命力所在,它被转换成一个shell命令,以允许shell钩子看到它。如果这不是定制的,那么浏览器将选择它

因此,您所要做的就是向您自己的窗口发送WM_APPCOMMAND。它可以隐藏,没问题。一个小小的Winforms应用程序将完成这项工作,你只需要一个pinvoke声明就可以了。WM_APPCOMMAND是消息编号0x319。这是一个完整的示例。

这比您想象的要容易得多。这些键盘键是特殊的,它们不会产生击键。而是生成一个。“下一个曲目”键的命令是APPCOMMAND\u MEDIA\u NEXTTRACK,这可以从MSDN库文章中看出

该消息被发送到任何具有前景的窗口。它几乎从不使用它做任何事情,而是将它传递给默认的窗口过程。这就是它的生命力所在,它被转换成一个shell命令,以允许shell钩子看到它。如果这不是定制的,那么浏览器将选择它

因此,您所要做的就是向您自己的窗口发送WM_APPCOMMAND。它可以隐藏,没问题。一个小小的Winforms应用程序将完成这项工作,你只需要一个pinvoke声明就可以了。WM_APPCOMMAND是消息编号0x319。一个完整的例子