如何将类实例传递给LowLevelMouseProc



我正在实现逻辑来处理全局鼠标点击,但我停留在需要从LowLevelMouseProc获取数据的时刻。目前,我在创建MyClass实例时设置全局变量,并且我能够从LowLevelMouseProc访问它,但我认为这不是正确的方法。

设置钩:

g_myClass = this;
SetWindowsHookEx(WH_MOUSE_LL, MyClass::MouseHookProc, LoadLibraryA("user32.dll"), 0);

LowLevelMouseProc:

LRESULT CALLBACK MyClass::MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
    g_myClass.onClick(wParam, pMouseStruct->pt.x, pMouseStruct->pt.y); //isn't good
}

低级鼠标挂钩不提供检索实例指针的机制。使用全局变量通常是最佳选择。

如果你不能让你的程序以这种方式工作,你将需要使用一个thunk。该技术已经在许多地方进行了讨论,网络搜索将提供更多细节。例如,我的粗略搜索得出了这个结果:http://zabkat.com/blog/hook-callback-thunk-x64.htm

相关内容

  • 没有找到相关文章

最新更新