C EXE与全局钩子DLL之间的通信
我有一个应用程序正在加载一个库,其中包含一个用于全局GetMessage钩子的回调函数。我获取该过程并将其传递给SetWindowsHookEx,以便为所有正在运行的线程进行设置 问题是,我希望DLL函数在某些情况下(如按键)告诉原始应用程序退出,而不是所有应用程序。我能想到的唯一方法是在应用程序中创建一个窗口,并让DLL调用SendMessage(HWND_BROADCAST)发送应用程序识别的自定义消息以退出。但我想验证一下这是否是最好的方法C EXE与全局钩子DLL之间的通信,c,winapi,C,Winapi,我有一个应用程序正在加载一个库,其中包含一个用于全局GetMessage钩子的回调函数。我获取该过程并将其传递给SetWindowsHookEx,以便为所有正在运行的线程进行设置 问题是,我希望DLL函数在某些情况下(如按键)告诉原始应用程序退出,而不是所有应用程序。我能想到的唯一方法是在应用程序中创建一个窗口,并让DLL调用SendMessage(HWND_BROADCAST)发送应用程序识别的自定义消息以退出。但我想验证一下这是否是最好的方法 另一个问题也出现了。假设我希望DLL执行一些一次
另一个问题也出现了。假设我希望DLL执行一些一次性初始化,例如打开一个文件。如果我在DllMain中这样做,那么它似乎会这样做多次,因为它被加载了多次。这是解决这个问题的办法吗?谢谢。尝试使用WinAPI函数如果您的DLL在应用程序内部运行,有很多方法可以识别我当前运行的EXE。例如,可以使用
GetModuleFileName(NULL,…)
获取当前进程的可执行文件的路径。另一种方法:可以验证当前进程中是否存在版本资源之类的资源,并使用一些特殊值,例如FileDescription
(请参阅和)
如果您的DLL没有每线程初始化(如TlsAlloc
等),最好调用DisableThreadLibraryCalls
(请参阅和)在DllMain
的内部,第二个参数是DLL\u PROCESS\u ATTACH