【问题标题】:Win32 C++ Can Extra Info be Sent with a ProcedureWin32 C++ 可以通过过程发送额外信息
【发布时间】:2013-08-21 20:51:57
【问题描述】:

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

我现在正在使用键盘挂钩程序,如果有办法,我正在尝试将我的主窗口句柄传递给它。

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

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

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

谢谢。

【问题讨论】:

    标签: c++ winapi procedure handle


    【解决方案1】:

    您似乎正在寻找一种将状态对象传递给您的KeyboardProc 的方法。您可以按照here 的描述使用 thunk 对象来执行此操作。这样,KeyboardProc 可以是 C++ 类的非静态成员方法,无需全局变量。这有点骇人听闻,但非常方便。 ATL 库(atlstdthunk.h 中的CStdCallThunk)使用了类似的技术。由于certain issues with DEP(数据执行保护),您最好使用thunk 的ATL 实现。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        相关资源
        最近更新 更多