我使用win32安裝了全局鉤子,但我需要與我的主應用程序進行通信。我應該怎麼做?我想DLL可以有一個函數,我設置我的應用程序HWND,然後鉤可以sendmessage呢?或者我應該搜索窗口標題以便從鉤子和發送消息中找到我的應用程序?什麼是最好的策略,並且sendmessage是最好的方法,或者我應該使用其他方式與我的全局鉤子進行通信。如何從我的全局鉤子與我的應用程序進行通信?
1
A
回答
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」
相關問題
- 1. 全局鉤子DLL的應用程序
- 2. 如何從.Net Web應用程序與Outlook進行通信
- 3. Silverlight中鼠標事件的全局應用程序鉤子
- 4. WPF應用程序中的全局shell鉤子
- 5. C#全局熱鍵(沒有通常使用的全局鉤子)
- 6. Android:如何與Windows桌面應用程序進行通信?
- 7. 我的AIR應用程序如何與我的服務器通信?
- 8. 如何從iOS應用程序與遠程服務器進行通信?
- 9. 電子:我如何與瀏覽器窗口進行通信?
- 10. 通過RPC從Java應用程序與Windows進程通信
- 11. 如何與正在運行的Python進程從一個Objective-C的應用程序進行通信?
- 12. 瀏覽器如何與電子郵件程序進行通信?
- 13. 如何使API與我的應用程序進行交互
- 14. 如何讓我的Web應用程序與我的桌面應用程序通信?
- 15. ASP.NET:響應中的全局鉤子?
- 16. 用於與arduino進行藍牙通信的Android應用程序
- 17. 如何爲我的android應用程序創建全局高分?
- 18. 如何讓iAd在我的應用程序中全局查看?
- 19. 如何爲我的Laravel應用程序註冊全局變量?
- 20. 我應該如何與我的組件在React中進行通信?
- 21. 通過Wifi將Android應用程序與PC應用程序進行通信
- 22. 如何從我的iPhone應用程序進行付款?
- 23. 我如何檢查Solr主站與Solr從站進行通信
- 24. 如何從java應用程序與neo4j服務器進行通信?
- 25. gmail從我的應用程序短信
- 26. 小應用程序能否與servlet的實例進行通信
- 27. 如何在Android上的應用程序之間進行通信
- 28. C++如何在應用程序的DLL之間進行通信?
- 29. 如何防止除我的iPhone應用程序以外的任何其他應用程序與我的Rails webapp進行通信?
- 30. 掛鉤我的應用程序