C++ WinAPI:钩子函数中的非dll数据

C++ WinAPI:钩子函数中的非dll数据,c++,winapi,dll,hook,C++,Winapi,Dll,Hook,我想安装一个钩子(在Windows上使用WinAPI和C++),以获取发送到特定进程/线程(我的程序通过进程ID知道)的WindowProc的密钥输入事件。据我所知,我必须将钩子过程放入DLL中。到目前为止,我一切都很好。但是钩子过程需要使用安装钩子的程序中的数据。现在我不知道如何从DLL中的钩子过程访问这些数据 我的第一个想法是在DLL内部维护一个数据结构,并通过调用DLL内部的另一个函数从外部对其进行更新。但我不确定具体如何做到这一点(例如:我假设此数据结构必须是共享数据,以便所有调用都是相

我想安装一个钩子(在Windows上使用WinAPI和C++),以获取发送到特定进程/线程(我的程序通过进程ID知道)的WindowProc的密钥输入事件。据我所知,我必须将钩子过程放入DLL中。到目前为止,我一切都很好。但是钩子过程需要使用安装钩子的程序中的数据。现在我不知道如何从DLL中的钩子过程访问这些数据

我的第一个想法是在DLL内部维护一个数据结构,并通过调用DLL内部的另一个函数从外部对其进行更新。但我不确定具体如何做到这一点(例如:我假设此数据结构必须是共享数据,以便所有调用都是相同的,无论来自哪个进程/线程,但我不确定)

我看了一些关于如何实现钩子的示例,但是这些示例从未使用安装钩子的原始程序(或任何其他“用户代码”)中的数据

如果有人能向我解释这一点,甚至能给我一个关于如何解决上述问题的简要概述(以及我的方法是否正确),我将不胜感激


非常感谢

您真正描述的是进程间通信(IPC):

windows的选项是创建套接字、管道或共享内存,并使用互斥锁、信号量或事件进行同步

除此之外,没有办法调用注入另一个进程的dll中的函数


您可以查看我在这里发布的示例:

您可以使用共享数据部分

 // dll.cpp
 #pragma data_seg("myshared")
 int iShared;
 #pragma data_seg()
 #pragma comment(linker, "/section:myshared,RWS")

从DLL导出函数,允许传递用于节中变量的值。从挂钩EXE(挂钩前)调用该函数。挂接进程中的实例DLL将看到挂接EXE设置的值。

我不认为进程间通信是我想要的,因为第二个进程根本不通信。事实上,第二个进程是一个正在运行的程序,甚至不知道我的程序存在。我只想“过滤”第二个进程获得的密钥输入消息。您打算如何让第二个进程“过滤”密钥输入而不将其硬编码到.dll中?我不确定你到底想达到什么目的..仔细看看WH_键盘将挂钩,它不需要DLL。Thaks!我觉得这个不错。我要试试这个。