我正在编写一个简单的音乐播放器。我希望能够捕获全局的WM_APPCOMMAND消息(APPCOMMAND_MEDIA_PLAY, APPCOMMAND_MEDIA_PAUSE, APPCOMMAND_MEDIA_NEXTTRACK等)。 你能告诉我如何做到这一点吗? 非常感谢!
这需要一个WH_SHELL钩子,由SetWindowsHookEx()设置。 钩子回调将获得HSHELL_APPCOMMAND通知。 此钩子需要一个可以注入到所有运行进程中的DLL。您无法在像C#这样的托管语言中编写此类DLL,因为您尝试注入的进程将没有加载CLR。需要非托管代码,C是典型的选择。 这个项目应该有助于启动这样的DLL。 请注意,在64位操作系统上存在相当复杂的问题,您需要两个辅助程序,以便您可以注入32位和64位进程。
protected override void WndProc(ref Message m)
,但它无法挂钩全局消息:( 我也不想使用键盘钩子,因为我正在使用全局钩子应用程序,并使用它向Windows发送WM_APPCOMMAND
。 - Thanh Nguyen