2012-01-24 37 views
1

我有我試圖找出一個C#的功能,這裏是代碼:C#鍵盤鉤子,按鍵釋放事件

private int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam) 
    { 
     if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) 
     { 
      var hookStruct = (KbLLHookStruct)Marshal.PtrToStructure(lParam, typeof(KbLLHookStruct)); 

      bool ctrlDown = GetKeyState(0xA2) != 0 || GetKeyState(0xA3) != 0; 

      if (hookStruct.vkCode == 0x56 && hookStruct.KF_REPEAT == 0) 
      { 
       Clipboard.SetText(" "); 
       MessageBox.Show("Hit ?); 
      }     
     } 

     if (nCode >= 0 && wParam == (IntPtr)WM_KEYUP) 
     { 
       MessageBox.Show("Message : KEY UP"); 
     } 

     // Pass to other keyboard handlers. Makes the Ctrl+V pass through. 
     return CallNextHookEx(_hookHandle, nCode, wParam, lParam);   
    } 

所以我正在尋找在這裏是要弄清楚如何當按下L_CTRL + V按鈕時觸發事件。這是工作;不過,我只想在事件發生後才能開火,並且因此我迷路了。誰能提供任何方向?

回答

0

我只想在事件發生後,鑰匙起來,併爲此我迷路了。誰能提供任何方向?

如果您只想在鍵釋放時做出響應,那麼只回應WM_KEYUP message

刪除處理WM_KEYDOWN消息的if語句部分。

+0

感謝@Cody Gray的迴應,但是我只想讓事件觸發,如果用戶同時按下了「Ctrl + V」,我將如何構造WM_KEYUP的該語句? CUS嵌套如果statemnt,檢查看CTRL BTTN是否會(在這一點上)看到它作爲了...它的一個捕獲22 :(我想我需要某種listner .. –

+0

另外我得到一個letup event for the Ctrl and the V keys and I only want one event。 –

+0

@Canada_Goose:我不知道你的意思是一個監聽器,一個hook *是一個監聽器,你需要做的是設置一個標誌(在類級聲明的布爾變量),當按下Ctrl鍵時('WM_KEYDOWN'),然後在接收到V key被釋放的通知('WM_KEYUP')時檢查該標誌。如果該標誌爲真,則用戶已經按下了Ctrl + V,如果該標誌爲false,那麼他們只是按下V,所以你什麼都不做,無論哪種方式,當你收到Ctrl鍵被釋放的通知('WM_KEYUP')時,將標誌重置爲false。 –