2011-02-11 21 views
0

我正在嘗試使用Windows API創建鼠標鉤。目前,我有以下代碼,但我努力使其工作。也許一些示例代碼可以幫助我更好地理解這些概念。使用Windows API創建鼠標鉤的問題

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    HWND hWindow , hEntryWnd; 
    HRESULT hResult; 
    ztcEvents pEvent; 
    ztcField *p_click_field; 
    ztcInterfaceContext *p_context_interface; 
    TCHAR  className [32]; 
    HWND hWnd; 
    if (nCode < 0) // do not process message 
     return CallNextHookEx(hook, nCode, wParam, lParam); 
    MOUSEHOOKSTRUCT *msg = (MOUSEHOOKSTRUCT *)lParam; 

    switch (nCode) 
    { 
    case HC_ACTION: 
     { 
      hWnd    = msg->hwnd; 
      p_click_field  = pEvent.GetMatchField(hWnd); 
      p_context_interface = pEvent.getMarkInterface(); 
      if(p_click_field == NULL || p_context_interface == NULL) 
      { 
       break; 
      } 
      GetClassName(p_click_field->Widget()->WindowHandle() , className , sizeof (className) - 1); 

      if(p_click_field->Widget()->IsKindOf(RUNTIME_CLASS(ztcOleWdgt))) 
      { 
       switch(wParam) 
       { 
        case WM_LBUTTONDOWN: 

         hWindow = p_click_field->Widget()->Parent()->WindowHandle(); 
         hEntryWnd = p_click_field->Widget()->WindowHandle(); 

         ::PostMessage(hWindow , OLE_NOTIFY , (WPARAM)hEntryWnd , OLE_LCLICK); 
         /*pEvent.SetVariables(p_click_field , evClick ,etFormField , true , p_context_interface); 
         SetEvent(hEventWnd);*/ 
         fprintf(trace_event , "buttonClick\t%x\n" , msg->hwnd); 
         fflush(trace_event); 
         break; 
        case WM_RBUTTONDOWN: 
         fprintf(trace_event , "RightClick\n"); 
         fflush(trace_event); 
         break; 
        case WM_LBUTTONDBLCLK: 
         fprintf(trace_event , "ButtonDoubleClick\n"); 
         fflush(trace_event); 
         break; 
       } 
      } 
     } 

     break; 
     default: 
     break; 
    } 
    return CallNextHookEx(hook, nCode, wParam, lParam); 
}  

的同時單擊鼠標左鍵,上面的代碼進入的情況下WM_LBUTTONDOWN超過30倍。我的代碼有問題嗎?如果是這樣,我該如何解決它?

+1

你可以只是谷歌,如果你只是想看到任何隨便舉個例子。你有更具體的問題嗎?你有什麼嘗試?最重要的是:什麼樣的鉤子?出於什麼目的? – tenfour 2011-02-11 11:40:49

+0

我有ole小部件的句柄,並使用該句柄,我必須跟蹤鼠標單擊事件和setfocus並殺死焦點事件。 – karthik 2011-02-11 11:43:03

+0

因爲我需要一些鉤子程序的基本思想 – karthik 2011-02-11 11:43:21

回答

2

該樣品看起來值得信賴的,是由一個相當著名的作家寫:

          Hooks and DLLs

1

也許here很多我不太喜歡網站的名稱。