c#检测所有按键(Windows 8.1)

时间:2017-03-06 17:16:04

标签: c# keyboard windows-screensaver

我为Media Center PC(运行Windows 8.1)编写了一个屏幕保护程序。它是一个简单的Windows窗体应用程序,可以随机显示我的图片文件夹中的所有图片,为每张图片添加文件夹,文件名,日期等字幕。它处理Click,MouseMove和KeyDown事件,如果收到任何事件则终止。

它工作正常,但是,如果我按下Media Center遥控器上的某些键(例如显示我所有录音的键),屏幕保护程序不会终止。就好像这些键不会生成KeyDown事件。

我尝试使用全局键盘钩子,但似乎没有被调用 - 我有一个模糊的内存,在Windows的更高版本中不允许这些。

有关如何从C#Windows窗体应用程序检测媒体中心远程所有按键的任何建议?

源代码位于github

1 个答案:

答案 0 :(得分:0)

我能想象到的最简单的方法是GetAsyncKeyStatehttps://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx

    [DllImport( "user32.dll" )]
    static extern short GetAsyncKeyState( int KeyCode );

至少如果你的进程是前台进程(如果它是一个严肃的屏幕保护程序那么应该是这样)。

这也应该处理特殊键(如媒体键),因为它们大多只是翻译成几个键盘快捷键。

然而,缺点是您必须手动查询每个keyCode。但是,由于您已经能够捕获常规密钥,我认为仅轮询媒体密钥就足够了。