2015-05-19 98 views
2

我做了一个WPF应用程序,我能够钩住一些窗口组合。 ALT + TAB被挂钩,它在我的应用程序运行时没有任何作用(如预期的那样)。问题是,当我按下CTRL + ALT + TAB 得到相同的效果ALT + TAB 。 你们有什么想法如何挂钩这种组合?钩CTRL + 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);} 
+0

对不起,我不明白你的问题。你想勾选“Alt + Tab”或“Ctrl + Alt + Tab”?你有尝试过什么吗? – Nazmul

+0

显示您的代码! – giammin

回答

0

回答1

你可以尝试像它下面的工作CTRL + SHIFT + TABCTRL + 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等,以便它们可以被合并成单个值。

+0

谢谢你的回复。我已经尝试过,但它不适用于CTRL + ALT组合。 :\ –

+0

您是否尝试过答案2? – Nazmul

+0

是的,我有没有运气。我认为这可能是因为它是一个“特殊”组合,就像Ctrl + Alt + Del,这就是为什么它不起作用。 –