全局热键在全屏游戏中无法使用

6

我正在创建一个程序,用于在游戏外截屏。当我按下快捷键时,它可以工作,但是在全屏打开游戏时,它无法检测到按键。

我的代码:

protected override void WndProc(ref Message m)
{
    const int WM_HOTKEY = 0x0312;

    switch (m.Msg)
    {
        case WM_HOTKEY:
        {
            if ((short)m.WParam == 1)
            {
                start = DateTime.Now;
                progressBar1.Maximum = 1;
                progressBar1.Step = 1;
                progressBar1.Value = 0;

                DoRequest();
            }
            break;
        }

        default:
        {
            base.WndProc(ref m);
            break;
        }
    }
}

我使用以下方式注册全局密钥:

RegisterHotKey(this.Handle, 1, (int)KeyModifier.None, Keys.F11);

帮我:/

已解决! 问题已经解决,我通过以下项目成功修复: http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook

谢谢大家!

2个回答

3

我曾遇到类似的问题,但通过使用管理员权限运行我的程序来解决它。


太棒了,但仍然很实用 :) 谢谢 - grabarz121
这对我来说真的解决了问题!!谢谢...我制作了一个全局钩子键应用程序,但在我的游戏运行时无法工作,直到我看到了你的答案并意识到我的游戏正在以管理员身份运行,而该应用程序则没有。非常感谢,你救了我一命。 - MrJack Mcfreder

3

大多数游戏(并非全部)的问题在于使用 DirectInput(DirectX),而不是 Windows 消息泵来读取按键。我还编写了一个使用语音识别发送按键给游戏的应用程序,并遇到了同样的问题,通过查看 DirectX 键码解决了这个问题。参考:DirectInput


我怎么在我的代码中实现这个呢?我做得不对,我试着把DirectX的F11键放进去,但是它没有起作用。 - Marlon Roberto Colhado
请看一下以下链接:http://msdn.microsoft.com/en-us/library/windows/desktop/bb153252(v=vs.85).aspx,希望对你有所帮助。 - user2930590
2
谢谢,我通过这个项目成功了:http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook - Marlon Roberto Colhado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接