在Win2K(或更高版本)下,通过发送虚拟密钥VK_LAUNCH_MEDIA_SELECT,可以启动播放器。
如果安装了多个播放器软件,如何确定它将启动哪个?
示例VBS代码:
Wscript.CreateObject("Wscript.Shell").Sendkeys chr(&h88b5)
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
http://msdn.microsoft.com/zh-cn/library/dd375731
VK_LAUNCH_MEDIA_SELECT
0xB5
Select Media key
答案 0 :(得分:1)
VK_LAUNCH_MEDIA_SELECT
实际上已被系统收到并转换为WM_APPCOMMAND
,lParam
为APPCOMMAND_LAUNCH_MEDIA_SELECT
。因此从理论上讲,任何为此实现处理程序的程序都可以启动。 This page(虽然旧)列出了监听WM_APPCOMMAND
的默认应用程序:
显然,其中只有少数几个适用于APPCOMMAND_LAUNCH_MEDIA_SELECT
。
但是,我不知道翻译机制是如何运作的。似乎并非每个应用程序都会收到翻译的WM_APPCOMMAND
消息。在我的键盘上,我尝试按下发送VK_VOLUME_UP
的按钮。音量按预期上升,因为它由音量控制系统托盘小程序处理。但是,我打开了notepad.exe
的实例并使用Spy ++监视其消息。即使它在前台也没有收到任何消息。奇怪的是,只要VK_MEDIA_PLAY_PAUSE
有焦点,只要按下播放/暂停按钮,就会通过WM_APPCOMMAND
收到notepad.exe
。我会用VK_LAUNCH_MEDIA_SELECT
进行测试,但我实际上并不确定哪个按钮对应(或者我的键盘是否有)。
答案 1 :(得分:1)
谢谢Mike Kwan的回复。
通过测试很多设置与各种音频文件相关的程序。 最终确定,这将取决于 CDA(CD音频)文件与哪个程序相关。
如果您将CDA(CD音频)文件的默认关联设置为Notepad或Paint或任何其他程序,它仍然可以发送相同的虚拟键以打开相应的程序。
答案 2 :(得分:1)
前台窗口可以响应WM_APPCOMMAND消息做任何事情,如果它不处理消息,那么shell钩子(HSHELL_APPCOMMAND)会处理它,如果没有钩子处理消息,那么Windows检查注册表中的AppKey密钥。 (您可以使用Process Monitor查找特定按键的编号)