0

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

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

我尝试放入一个全局键盘挂钩,但它似乎没有被调用 - 我有一个模糊的记忆,这些在更高版本的 Windows 中是不允许的。

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

源代码在github上

4

2 回答 2

0

通常,我使用这个程序来检测任何具有特定 Key ID 的按键。对了,上面写着C++,对不起,我几乎一无所知C#。让我知道,如果它有帮助或没有。. 谢谢@Psi :)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#if       _WIN32_WINNT < 0x0500
#undef  _WIN32_WINNT
#define _WIN32_WINNT   0x0500
#endif
#include <windows.h>
using namespace std;
int main ()
{
    char i;
    for(i=8; i<190; i++)
    {
        if(GetAsyncKeyState(i)== -32767)
        {
            cout<<int (i)<<endl;
        }
    }
    return 0;
} 
于 2017-05-06T05:24:48.940 回答
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。但是由于您已经能够捕获常规密钥,因此我认为仅轮询媒体密钥就足够了。

于 2017-03-06T17:20:25.540 回答