我想钩的键盘在我的程序,但有的东西,我不可能完成的任务。下面的方法是最重要的部分在我的班级在哪里,我处理某些关键的组合。所有这些工作,但我也要挂钩Ctrl-Alt-卡。我已经花了几个小时试图找出是什么做的,但是我来空手而归。我怎么能挂钩这种组合呢?

更多的信息可以在这里找到:
http://msdn.microsoft.com/en-us/library/ms644967(VS。85).aspx
http://msdn.microsoft.com/en-us/library/ms927178.aspx

 private static IntPtr KeyboardHookHandler(int nCode, IntPtr wParam, KBDLLHookStruct lParam)
 {
   if (nCode == 0)
   {              

    if ( ( (lParam.flags == 32)  && (lParam.vkCode == 0x09) ) ||      // Alt+Tab
         ( (lParam.flags == 32)  && (lParam.vkCode == 0x1B) ) ||      // Alt+Esc
         ( (lParam.flags == 0 )  && (lParam.vkCode == 0x1B) ) ||      // Ctrl+Esc
         ( (lParam.flags == 1 )  && (lParam.vkCode == 0x5B) ) ||      // Left Windows Key
         ( (lParam.flags == 1 )  && (lParam.vkCode == 0x5C) ) ||      // Right Windows Key
         ( (lParam.flags == 32)  && (lParam.vkCode == 0x73) ) ||      // Alt+F4              
         ( (lParam.flags == 32)  && (lParam.vkCode == 0x20) ))        // Alt+Space

    {
        return new IntPtr(1);
    }
  }

  return CallNextHookEx(hookPtr, nCode, wParam, lParam);
}
有帮助吗?

解决方案

世界,你是正确诱捕密钥,但你需要执行你的lParam.flags位与运算,以确定一个以上修饰键是否被按下。

这是从我的头顶,但我认为,看起来像这样的代码:

(lParam.flags == 32)

应该是这个样子:

((lParam.flags & 32 == 32) && (lParam.flags & 16 == 16))

32和16是在该示例中任意的。你需要弄清楚什么值ALT和CTRL实际上是。他们将是1,2,4 ... 16,32等,以便它们可以被或运算在一起成为一个单一的值。

其他提示

这可能是值得你看看这篇文章由保罗DiLascia谁演示如何陷阱键Ctrl+Alt-Del组合 在这里,.有一个版本可用。净框架上找到演示 在这里,在这里,.

希望这会有所帮助, 最好的问候, 汤姆。

您应该继承的win32消息泵。结果 也许你会从中得到VC6项目陷阱CtrlAltDel一些想法;在任务列表上的Win2000 / XP 隐藏应用程序

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top