2012-09-09 95 views
0

我想檢測每次我粘貼的東西。這只是讓一些數據輸入工作變得更簡單。 我設置了一個全局鉤子,然後「等待」wm_paste。這是我的代碼的一部分:WM_PASTE掛鉤不工作

LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    if(nCode < 0)//Do not process the message 
     return CallNextHookEx(msg_hook,nCode,wParam,lParam); 

    LPMSG m=(LPMSG)lParam; 

    if(m->message == WM_PASTE) 
    { 
     OutputString("Paste detected!\n"); 
    } 
    if(m->message == WM_PASTE) 
    { 
     OutputString("Paste detected!\n"); 
    } 


    return CallNextHookEx(msg_hook,nCode,wParam,lParam); 
    } 





//DLL_ATTACH: 
... 
if(strstr(ProcName, LOADERNAME)) 
     { 
      InitCommonControls(); 

      if(!(msg_hook=SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hinstDLL, 0))) 
      { 
       ErrorExit(TEXT("SetWindowsHookEx")); 
       //MessageBox(0, "WH_GETMESSAGE", 0, 0); 
       //return -1; 
      } 
     } 

WM_PASTE調試字符串永遠不會被打印。我知道並非所有的應用程序都使用WM_PASTE。但至少記事本應該工作。

有什麼建議嗎? 謝謝!

回答

0

Wm_paste消息僅在組合框和編輯控件中觸發。有沒有簡單的方法來捕獲粘貼,但你可以通過創建一個小窗口並添加這個window to the chain of clipboard viewers得到複製消息。

2

GetMsgProc中,wParam參數不是被截取的消息,而是一個標誌,指示消息是否在lParam中並且已從消息隊列中移除。

您應該使用m->wParam來代替。

+0

的確,在這裏粘貼代碼時,我粘貼了代碼的舊版本,而不是帶有消息的代碼。 – Cornwell

+0

不過,m-> message或m-> wParam不起作用。我在這裏錯過了什麼嗎? – Cornwell