我使用win32安装了一个全局钩子,但是我需要与我的主应用程序进行通信。 我应该怎么做? 我想DLL可以有一个函数,我设置我的应用程序HWND,然后钩可以sendmessage呢? 或者我应该search窗口标题,从钩子和sendmessage中find我的应用程序? 什么是最好的策略,sendmessage是最好的方法,或者我应该使用别的东西来沟通我的全局钩子。
Windows – 用C#命名pipe道性能build议
是否有任何目前更新的graphics用户界面less自动编译器?
Windows中需要rJava的问题
汉字显示为问号
C ++ – WinAPI获取所有连接的USB设备列表
使用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; }
你可以在这里看到完整的例子。
你想要返回到你的应用程序的什么类型的信息?
SendMessage没有足够的能力传递除DWORD之外的所有进程的边界(例如,不能将指针传递到另一个进程的内存),但是如果你真的需要做的就是传递简单的值,那就足够了。
作为@interjay的状态,PostMessage是一个更好的计划,但最终仍然有相同的限制。
相关:“ 跨进程消息的危害 ”,“ PasswordSpy – 使用Windows钩子检索丢失的密码 ”