挂钩CTRL + ALT + TAB

时间:2015-05-19 14:56:32

标签: wpf keyboard-hook

我已经制作了一个WPF应用程序,我能够挂钩一些Windows组合。 ALT + TAB 被挂钩,当我的应用程序运行时(正如预期的那样)它什么都不做。问题是,当我按 CTRL + ALT + TAB 时,我得到与 ALT + TAB 。 你们有没有想过如何勾选这种组合?

修改

我已成功连接 ALT + TAB 。我想挂钩 CTRL + ALT + TAB 。我试过这个project example来实现这一目标。

以下是制作钩子的代码:

private static IntPtr KeyboardHookHandler(int nCode, IntPtr wParam, 
                  ref KBHookStruct lParam){
if (nCode == 0)
{
    if (((lParam.vkCode == 0x09) && (lParam.flags == 0x20)) ||  // Alt+Tab
    ((lParam.vkCode == 0x1B) && (lParam.flags == 0x20)) ||      // Alt+Esc
    ((lParam.vkCode == 0x1B) && (lParam.flags == 0x00)) ||      // Ctrl+Esc
    ((lParam.vkCode == 0x5B) && (lParam.flags == 0x01)) ||      // Left Windows Key
    ((lParam.vkCode == 0x5C) && (lParam.flags == 0x01)) ||      // Right Windows Key
    ((lParam.vkCode == 0x73) && (lParam.flags == 0x20)) ||      // Alt+F4
    ((lParam.vkCode == 0x20) && (lParam.flags == 0x20)))        // Alt+Space
    {
        return new IntPtr(1);
    }
}

return CallNextHookEx(hookPtr, nCode, wParam, ref lParam);}

1 个答案:

答案 0 :(得分:0)

回答1

你可以尝试下面它适用于 CTRL + SHIFT + TAB CTRL + TAB

private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
   if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
   {
      MessageBox.Show("CTRL + SHIFT + TAB trapped");
   }

   if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
   {
      MessageBox.Show("CTRL + TAB trapped");
   }
}

回答2

应该看起来像:

((lParam.flags & 33 == 33) && (lParam.flags & 22 == 22))
在该示例中,

32和22是任意的。您需要弄清楚ALT和CTRL实际上是什么值。它们将分别为1,2,4 ...... 16,32等,以便它们可以一起“或”成一个值。