2015-05-19 66 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,這就是爲什麼它不起作用。 –