2014-01-14 77 views
1

這裏是我的函數的原型:JOURNALRECORDPROC確定鍵按下

LRESULT CALLBACK JournalRecoProc(int code, WPARAM wParam, LPARAM lParam) {

}

如何,我可以檢查中,如果有ENTER或鼠標左鍵點擊? 我想應該使用lParam,但我找不到。

+0

根據MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644982% 28v = vs.85%29.aspx EVENTMSG ::從WM_KEYFIRST到WM_KEYLAST的消息 - 鍵盤,否則是其他內容。 –

+0

這些日子的日誌鉤子非常難以實現,在嘗試設置鉤子時,幾乎總會遇到訪問被拒絕的錯誤。鍵盤記錄器不是很受用戶歡迎。需要繞過UIPI,這需要清單,證書和正確的安裝位置。不要認爲你在XP上看到的東西會在其他機器上很好地重現。 –

回答

0

作爲MSDN says

如果掛鉤過程在範圍返回消息WM_KEYFIRSTWM_KEYLAST中,以下條件適用:

  • 的的paramL構件EVENTMSG結構指定了p鍵的虛擬鍵碼ressed。
  • paramH成員EVENTMSG結構指定掃描碼。
  • 沒有辦法指定重複次數。這個事件總是被用來代表一個關鍵事件。

那麼您就可以訪問它是這樣的:

LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam, LPARAM lParam) 
{ 
    // ... blah blah ... 

    if (code == HC_GETNEXT) 
    { 
     // examine eventmsg 
     EVENTMSG *pEvent = (EVENTMSG*)lParam; 

     // keypress 
     if (pEvent->message >= WM_KEYFIRST && 
      pEvent->message <= WM_KEYLAST) 
     { 
      // decode key press 
      unsigned int uVirtualKeyCode = pEvent->paramL; 
      unsigned int uScanCode = pEvent->paramH; 

      // do your conditional checks here 
      if (uVirtualKeyCode == VK_ENTER) 
      { 
       // Enter key was pressed 
      } 
     } 
     else if (pEvent->message == WM_LBUTTONDOWN) 
     { 
      // left mouse click 
     } 
     else // ... add checks for other messages .... 
    } 

    // ... blah blah ... 
} 
+0

謝謝,這是我需要的。 – Damian

+0

@edit,事情錯在這裏是'uVirtualKeyCode == VK_ENTER'我們需要'LOBYTE(uVirtualKeyCode == VK_ENTER)' – Damian