如果发送方不在焦点上并且不知道目标窗口,则模拟键盘事件[重复]

问题描述 投票:0回答:1

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

我尝试使用keybd_eventSendInputhttp://inputsimulator.codeplex.com/,但只有wsender窗口处于焦点。

有没有什么方法可以像VK_MEDIA_NEXT_TRACK那样模拟键盘的按下,而不会使发送方窗口处于焦点位置?

c# keyboard-events
1个回答
3
投票

这是一个lot,比您想象的要容易实现。这些键盘键很特殊,它们不会产生击键。改为生成WM_APPCOMMAND message。您可以从MSDN库文章中得知,“下一首”键的命令是APPCOMMAND_MEDIA_NEXTTRACK。

该消息被发送到恰好具有前景的任何窗口。几乎永远不会对其执行任何操作,而是将其传递给默认的窗口过程。就是这样,它变成了shell命令,以允许shell钩子看到它。如果不是自定义的,则资源管理器会选择它。

因此,您要做的就是将WM_APPCOMMAND发送到您自己的窗口。它可以隐藏,没问题。一个小的Winforms应用程序即可完成工作,您只需要SendMessage()的点名声明即可。 WM_APPCOMMAND是消息号0x319。完整示例is here

© www.soinside.com 2019 - 2024. All rights reserved.