我使用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. 挂钩我的应用程序