我正在实现逻辑来处理全局鼠标点击,但我停留在需要从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