我如何从我的全局钩子与我的应用程序进行通信?

我使用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钩子检索丢失的密码 ”

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...