我使用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. 另一個全局鉤子影響到我的全局鉤子
- 3. 如何從javascript與java應用程序進行通信
- 4. 如何從Asp.net應用程序與Windows服務進行通信
- 5. 如何從.Net Web應用程序與Outlook進行通信
- 6. 如何與來自JAVA的SAP應用程序進行通信
- 7. 如何在Android中對我的應用程序進行全局更改?
- 8. Silverlight中鼠標事件的全局應用程序鉤子
- 9. WPF應用程序中的全局shell鉤子
- 10. 如何安全地使用API與兩個Web應用程序進行通信?
- 11. 如何防止任何人與我的服務器進行通信,除了我的Android應用程序
- 12. 如何在Zeos中安全地與我的遠程數據庫進行通信?
- 13. java應用程序如何與android應用程序進行通信?
- 14. Android:如何與Windows桌面應用程序進行通信?
- 15. 如何在DOM中與Angular 4應用程序進行通信?
- 16. C#全局熱鍵(沒有通常使用的全局鉤子)
- 17. 我的AIR應用程序如何與我的服務器通信?
- 18. 是否有可能讓我的應用程序與moodle進行通信?
- 19. 如何從iOS應用程序與遠程服務器進行通信?
- 20. 我自己的應用程序之間的安全通信
- 21. 與來自MVC應用程序的線程進行通信?
- 22. 電子:我如何與瀏覽器窗口進行通信?
- 23. 64位全局鉤子鎖了32位應用程序
- 24. 通過RPC從Java應用程序與Windows進程通信
- 25. 如何與正在運行的Python進程從一個Objective-C的應用程序進行通信?
- 26. 瀏覽器如何與電子郵件程序進行通信?
- 27. 如何使API與我的應用程序進行交互
- 28. 如何讓我的Web應用程序與我的桌面應用程序通信?
- 29. ios應用程序與C#程序進行通信
- 30. 用於與arduino進行藍牙通信的Android應用程序