Win32 C++是否可以使用过程发送额外信息

Win32 C++ Can Extra Info be Sent with a Procedure

本文关键字:额外信息 过程 C++ 是否 可以使 Win32      更新时间:2023-10-16

我一直在努力避免将任何窗口句柄存储为全局句柄。到目前为止,我一直很好。

我现在正在使用键盘挂钩程序,我正在努力寻找,如果有办法的话,把我的主窗口句柄传给它。

如果真的不能用简单的方式完成,我可以让主窗口句柄为全局。

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);

有没有一种方法可以将句柄包含在其中一个参数中?

谢谢。

您似乎正在寻找一种将状态对象传递给KeyboardProc的方法。您可以使用thunk对象,按照此处所述进行操作。这样,KeyboardProc可以是C++类的非静态成员方法,而不需要全局变量。这有点像黑客,但很方便。ATL库也使用了类似的技术(atlstdthunk.h中的CStdCallThunk)。由于DEP(数据执行保护)的某些问题,您最好使用thunks的ATL实现。

不,没有。钩子参数是固定的,所有这些参数都由操作系统使用。您必须全局存储句柄。如果你在一个挂接多个进程的DLL中实现挂接过程,你需要将全局存储在共享内存中,这样DLL的每个实例都可以访问它