Winapi 如何通过发送虚拟密钥VK\u LAUNCH\u MEDIA\u SELECT来确定启动哪个播放器

Winapi 如何通过发送虚拟密钥VK\u LAUNCH\u MEDIA\u SELECT来确定启动哪个播放器,winapi,vbscript,media-player,sendkeys,keyboard-input,Winapi,Vbscript,Media Player,Sendkeys,Keyboard Input,在Win2K(或更高版本)下,通过发送虚拟密钥VK_LAUNCH_MEDIA_SELECT,可以启动播放器 如果安装了多个播放器软件,如何确定将启动哪个播放器软件 VBS代码示例: Wscript.CreateObject("Wscript.Shell").Sendkeys chr(&h88b5) VK\u LAUNCH\u MEDIA\u SELECT实际上由系统接收,并用lParam作为APPCOMMAND\u LAUNCH\u MEDIA\u SELECT转换为WM\u AP

在Win2K(或更高版本)下,通过发送虚拟密钥VK_LAUNCH_MEDIA_SELECT,可以启动播放器

如果安装了多个播放器软件,如何确定将启动哪个播放器软件

VBS代码示例:

Wscript.CreateObject("Wscript.Shell").Sendkeys chr(&h88b5)


VK\u LAUNCH\u MEDIA\u SELECT
实际上由系统接收,并用
lParam
作为
APPCOMMAND\u LAUNCH\u MEDIA\u SELECT
转换为
WM\u APPCOMMAND
。因此,理论上,任何实现此处理程序的程序都可以启动。(尽管很旧)列出了侦听
WM_APPCOMMAND
的默认应用程序:

  • Internet Explorer
  • Windows帮助
  • DVD播放机
  • CD播放机
  • 媒体播放器
  • 音量控制系统托盘小程序
显然,其中只有少数适用于
APPCOMMAND\u LAUNCH\u MEDIA\u SELECT


然而,我不知道翻译机制实际上是如何工作的。似乎不是每个应用程序都会收到翻译的
WM_APPCOMMAND
消息。在我的键盘上,我试着按下按钮发送
VK\u音量
。由于音量控制系统托盘小程序处理音量,因此音量按预期增加。但是,我打开了notepad.exe的一个实例,并用Spy++监视它的消息。即使在前台,它也没有收到任何消息。奇怪的是,
VK\u MEDIA\u PLAY\u PAUSE
是通过
WM\u APPCOMMAND
接收的,只要
notepad.exe
有焦点,就可以按下播放/暂停按钮。我会用
VK\u LAUNCH\u MEDIA\u SELECT
进行测试,但我不确定对应的按钮是什么(或者我的键盘上是否有)。

VK\u LAUNCH\u MEDIA\u SELECT
系统实际接收到
WM\u APPCOMMAND
并将其转换为
lParam
作为
APPCOMMAND\u LAUNCH\u MEDIA\u SELECT
。因此,理论上,任何实现此处理程序的程序都可以启动。(尽管很旧)列出了侦听
WM_APPCOMMAND
的默认应用程序:

  • Internet Explorer
  • Windows帮助
  • DVD播放机
  • CD播放机
  • 媒体播放器
  • 音量控制系统托盘小程序
显然,其中只有少数适用于
APPCOMMAND\u LAUNCH\u MEDIA\u SELECT


然而,我不知道翻译机制实际上是如何工作的。似乎不是每个应用程序都会收到翻译的
WM_APPCOMMAND
消息。在我的键盘上,我试着按下按钮发送
VK\u音量
。由于音量控制系统托盘小程序处理音量,因此音量按预期增加。但是,我打开了notepad.exe的一个实例,并用Spy++监视它的消息。即使在前台,它也没有收到任何消息。奇怪的是,
VK\u MEDIA\u PLAY\u PAUSE
是通过
WM\u APPCOMMAND
接收的,只要
notepad.exe
有焦点,就可以按下播放/暂停按钮。我想用
VK\u LAUNCH\u MEDIA\u SELECT进行测试,但我不确定对应的按钮是什么(或者我的键盘上是否有)。

谢谢关迈克的回答

通过测试大量的设置一个程序关联各种音频文件。 最终,这将取决于与哪个程序关联的CDA(CD音频)文件


如果您将CDA(CD音频)文件的默认关联设置为Notepad或Paint或anyotherprogram,它仍然可以发送相同的虚拟键来打开相应的程序。

谢谢Mike Kwan的回复

通过测试大量的设置一个程序关联各种音频文件。 最终,这将取决于与哪个程序关联的CDA(CD音频)文件


如果您将CDA(CD音频)文件的默认关联设置为Notepad或Paint或anyotherprogram,它仍然可以发送相同的虚拟键来打开相应的程序。

前台窗口可以根据消息执行任何操作,如果它不处理消息,则shell hooks(HSHELL_APPCOMMAND)将处理它,如果没有hooks处理消息,则Windows将检查注册表中的项。(您可以使用查找特定按键的数字)

前台窗口可以根据消息执行任何操作,如果它不处理消息,则shell hooks(HSHELL\u APPCOMMAND)将处理消息,如果没有hooks处理消息,则Windows将检查注册表中的键。(您可以使用查找特定按键的号码)

感谢您的反馈。在我的测试中,通过VBS:Wscript.CreateObject(“Wscript.Shell”)发送虚拟密钥VK_LAUNCH_MEDIA_SELECT。Sendkeys chr(&h88b5)将CDA(CD音频)文件的默认关联设置为Notepad或Paint或任何其他程序,它仍然可以发送相同的虚拟密钥来打开相应的程序。感谢您的反馈。在我的测试中,通过VBS:Wscript.CreateObject(“Wscript.Shell”)发送虚拟密钥VK_LAUNCH_MEDIA_SELECT。Sendkeys chr(&h88b5)将CDA(CD音频)文件的默认关联设置为Notepad或Paint或任何其他程序,它仍然可以发送相同的虚拟密钥来打开相应的程序。感谢您的反馈!对于你说的这些,我也需要一些学习。谢谢你的反馈!对于你说的这些,我也需要一些学习。
VK_LAUNCH_MEDIA_SELECT
0xB5
Select Media key