gpt4 book ai didi

c++ - 带有 WH_MOUSE 和 TrackMouseEvent 的 SetWindowsHookEx 不捕获 WM_MOUSELEAVE

转载 作者:行者123 更新时间:2023-11-28 03:15:39 25 4
gpt4 key购买 nike

我使用 SetWindowsHookEx() 来捕获 WM_MOUSEMOVE,而不是使用 TrackMouseEvent 来捕获 WM_MOUSELEAVE,但是我的 MouseHook 没有捕获 WM_MOUSELEAVE。

使用 Spy++ 我可以看到 WM_MOUSELEAVE 已被触发,但我的 MouseHook 没有捕获消息。为什么?

LRESULT CALLBACK MouseHook(int nCode, WPARAM wp, LPARAM lp)
{
MOUSEHOOKSTRUCT *pmh = (MOUSEHOOKSTRUCT *) lp;

if (nCode >= 0) {
if( wp == WM_MOUSEMOVE) {
if(!tracking){
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE;
tme.hwndTrack = pmh->hwnd;
TrackMouseEvent(&tme);
tracking = true;
}
}
}

if( wp == WM_MOUSELEAVE){
if(tracking){
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_LEAVE & TME_CANCEL;
tme.hwndTrack = pmh->hwnd;
TrackMouseEvent(&tme);
tracking = false;
}
}
return CallNextHookEx(NULL, nCode, wp, lp);
}

最佳答案

WM_MOUSELEAVE 不是真正的鼠标消息,它是由调用 TrackMouseEvent 时建立的内部定时器过程生成的(反复检查鼠标是否离开窗口并在它发送消息时向它发送消息)。

您可能可以使用 WH_CALLWNDPROC Hook 捕获它。

关于c++ - 带有 WH_MOUSE 和 TrackMouseEvent 的 SetWindowsHookEx 不捕获 WM_MOUSELEAVE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16993070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com