簡體   English   中英

如何掛鈎Ctrl-Alt-Tab?

[英]How can I hook Ctrl-Alt-Tab?

我試圖在我的程序中掛鈎鍵盤,但有一些我無法完成的事情。 下面的方法是我班級中最重要的部分,我處理某些鍵組合。 所有這些都有效,但我也想掛鈎Ctrl-Alt-Tab。 我花了好幾個小時試圖弄清楚要做什么,但我空手而歸。 我怎么能掛鈎這個組合呢?

更多信息可以在這里找到:
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執行按位AND操作以確定是否按下了多個修改鍵。

這是我的頭腦,但我認為代碼看起來像這樣:

(lParam.flags == 32)

應該看起來像:

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

在這個例子中,32和16是任意的。 您需要弄清楚ALT和CTRL實際上是什么值。 它們將是1,2,4 ... 16,32等,以便它們可以一起“或”成單個值。

閱讀Paul DiLascia撰寫的文章可能值得您花些時間來展示如何在此處捕獲Ctrl + Alt + Del組合鍵。 沒有可用於在CodeProject上發現了.NET框架版本在這里這里

希望這會有所幫助,最好的問候,湯姆。

您應該為win32消息泵創建子類。
也許你會從這個VC6項目Trap CtrlAltDel得到一些想法; 在Win2000 / XP上的任務列表中隱藏應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM