MSG msg;
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode >= 0) {
if (wParam == WM_MOUSEWHEEL) cout << GET_WHEEL_DELTA_WPARAM(wParam) << endl; //prints 0
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
bool get_state(){
if(GetMessage(&msg,GetActiveWindow(), 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
int main()
{
HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0);
while(true){
get_state();
}
UnhookWindowsHookEx(mousehook);
return 0;
}
我在这个线程中找到了一个鼠标钩子,它可以工作,但是当我尝试检查鼠标滚轮的状态(是向前还是向后移动)时,获取移动的函数总是返回 0。
我是否调用了 GET_WHEEL_DELTA_WPARAM(wParam) 错误?还是我使用钩子的方式与 GET_WHEEL_DELTA_WPARAM(wParam) 函数不兼容?
我发现的另一个线程有代码从名为 MOUSEHOOKSTRUCTEX 的结构中获取 mouseData(这可能允许我获取我正在寻找的移动值),但是当我尝试编译时,我收到错误“'MOUSEHOOKSTRUCTEX' is not declared在这个范围内”。
请注意,此代码已被剥离以隔离问题,因此请原谅奇怪的部分,例如 while 循环不受阻碍地运行。
解决方法是使用以下方法获得运动:
MSLLHOOKSTRUCT *pMhs = (MSLLHOOKSTRUCT *)lParam;
short zDelta = HIWORD(pMhs->mouseData);
在 MouseHookProc 函数中。
用户克里斯给出的答案