【发布时间】:2021-10-01 23:38:14
【问题描述】:
LRESULT CALLBACK LowLevelMouseProc(_In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
BOOL fpassmove = FALSE;
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_MOUSEMOVE: // how do i catch a dx instead of a cursor points?
PMOUSEHOOKSTRUCT me = (PMOUSEHOOKSTRUCT)lParam;
printf("x:%d\ny:%d\nextrainfo:%04X\n", me->pt.x,me->pt.y, me->dwExtraInfo );
break;
}
}
return(fpassmove ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}
int main()
{
// Install the low-level keyboard & mouse hooks
HHOOK hhkLowLevelMouse = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, 0, 0);
// Keep this app running until we're told to stop
MSG msg;
while (!GetMessage(&msg, NULL, NULL, NULL)) { //this while loop keeps the hook
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(hhkLowLevelMouse);
return(0);
}
我正在从全局钩子中查看所有鼠标时刻,我试图找到鼠标事件的 dx 和 dy,我希望在“dwExtraInfo”中找到它。但是,我不知道如何理解“dwExtraInfo”中的数据。
windows 文档无法告诉我 dwExtraInfo 中的数据是什么意思
dwExtraInfo
Type: ULONG_PTR
Additional information associated with the message.
【问题讨论】:
-
您的代码正在使用
WH_MOUSE_LL挂钩。它的回调不使用MOUSEHOOKSTRUCT(由WH_MOUSE使用),它使用MSLLHOOKSTRUCT。它们都有dwExtraInfo,但在内存中的偏移量不同,因此由于使用了错误的结构类型,您正在打印出垃圾数据。