我为Media Center PC(运行Windows 8.1)编写了一个屏幕保护程序。它是一个简单的Windows窗体应用程序,可以随机显示我的图片文件夹中的所有图片,为每张图片添加文件夹,文件名,日期等字幕。它处理Click,MouseMove和KeyDown事件,如果收到任何事件则终止。
它工作正常,但是,如果我按下Media Center遥控器上的某些键(例如显示我所有录音的键),屏幕保护程序不会终止。就好像这些键不会生成KeyDown事件。
我尝试使用全局键盘钩子,但似乎没有被调用 - 我有一个模糊的内存,在Windows的更高版本中不允许这些。
有关如何从C#Windows窗体应用程序检测媒体中心远程所有按键的任何建议?
源代码位于github
答案 0 :(得分:0)
我能想象到的最简单的方法是GetAsyncKeyState
。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx
[DllImport( "user32.dll" )]
static extern short GetAsyncKeyState( int KeyCode );
至少如果你的进程是前台进程(如果它是一个严肃的屏幕保护程序那么应该是这样)。
这也应该处理特殊键(如媒体键),因为它们大多只是翻译成几个键盘快捷键。
然而,缺点是您必须手动查询每个keyCode。但是,由于您已经能够捕获常规密钥,我认为仅轮询媒体密钥就足够了。