我一直在尝试避免将任何窗口句柄存储为全局句柄。到目前为止,我一直很好。
我现在正在使用键盘挂钩程序,如果有办法,我正在尝试将我的主窗口句柄传递给它。
如果真的不能以简单的方式完成,我可以将主窗口句柄设为全局。
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
有没有办法可以将句柄包含在一个参数中?
谢谢。
看来您正在寻找一种将状态对象传递给您的KeyboardProc
. 您可以按照此处所述使用 thunk 对象执行此操作。这样,KeyboardProc
可以成为 C++ 类的非静态成员方法,无需全局变量。这有点骇人听闻,但非常方便。CStdCallThunk
ATL 库(在atlstdthunk.h中)使用了类似的技术。由于DEP(数据执行保护)的某些问题,最好使用 thunk 的 ATL 实现。
不,那里没有。钩子参数是固定的,都是操作系统使用的。您必须全局存储句柄。而且,如果您在挂钩多个进程的 DLL 中实现挂钩过程,则需要将该全局存储在共享内存中,以便 DLL 的每个实例都可以访问它。