2010-02-05 95 views
1

我使用win32安裝了全局鉤子,但我需要與我的主應用程序進行通信。我應該怎麼做?我想DLL可以有一個函數,我設置我的應用程序HWND,然後鉤可以sendmessage呢?或者我應該搜索窗口標題以便從鉤子和發送消息中找到我的應用程序?什麼是最好的策略,並且sendmessage是最好的方法,或者我應該使用其他方式與我的全局鉤子進行通信。如何從我的全局鉤子與我的應用程序進行通信?

回答

1
  • 使用PostMessage而不是SendMessage:SendMessage可能需要一段時間,這可能會導致其他應用程序的延遲。

  • 初始化掛鉤時,使用您定義的函數將您的應用程序的HWND添加到鉤子DLL中。這應該被存放在一個共享的數據段在DLL中,就像這樣:

    #pragma data_seg(".shared") 
    HWND hWndApp = NULL; 
    #pragma data_seg() 
    #pragma comment("linker, /section:.shared,rws") 
    
    void setAppWnd(HWND hWnd) { 
        hWndApp = hWnd; 
    } 
    

你可以看到這樣做here一個完整的例子。

1

您想要回到您的應用中的是哪種類型的信息?

SendMessage不適合跨DWORD跨越進程邊界傳遞任何東西(例如,不能將指針傳遞到另一個進程的內存),但如果你真的需要做的就是傳遞簡單的值,工作得不錯。

作爲@interjay國家,PostMessage是一個更好的計劃,但最終仍然有相同的限制。

相關:「Hazards of cross-process messages」,「PasswordSpy - Retrieving lost passwords using Windows hooks

相關問題