Lambda表达式本质上是一种匿名函数,可以在函数内部访问外部变量,包括this指针。因此,可以使用Lambda表达式来捕捉this指针,在SetWindowsHookEx函数中进行回调。

具体实现如下:

HHOOK hHook;

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    // 处理钩子
}

class HookManager
{
public:
    HookManager()
    {
        hHook = SetWindowsHookEx(WH_KEYBOARD_LL, [](int nCode, WPARAM wParam, LPARAM lParam)
        {
            // 在Lambda表达式中访问this指针
            return this->HookProc(nCode, wParam, lParam);
        }, GetModuleHandle(NULL), 0);
    }

    virtual ~HookManager()
    {
        UnhookWindowsHookEx(hHook);
    }
};

int main()
{
    HookManager hm;
    // ...
}

在上面的代码中,我们定义了一个HookManager类,用来管理键盘钩子。在构造函数中,我们使用Lambda表达式来捕捉this指针,并将其作为回调函数传递给SetWindowsHookEx函数。在Lambda表达式中调用HookProc函数,完成钩子的处理。在析构函数中,我们通过UnhookWindowsHookEx函数来取消钩子。

需要注意的是,Lambda表达式中访问this指针需要在类的非静态成员函数中进行。如果在静态成员函数或全局函数中使用Lambda表达式,是无法访问this指针的

c++lambda表达式使用SetWindowsHookEx捕捉this

原文地址: https://www.cveoy.top/t/topic/fIsC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录