我正在尝试跟踪移动的桌面应用程序窗口,以便我可以在奇偶校验中移动相应的透明覆盖窗口。目前,我将EVENT_SYSTEM_MOVESIZEEND
事件与SetWinEventHook
挂钩。在我的回调中,我使用目标应用程序窗口的新位置更新叠加层的位置。
这有效,但这意味着在用户放开目标窗口的标题栏后,我的叠加层会跳转。我希望我的叠加层能够跟踪目标窗口 它正在移动,而不仅仅是 移动后。
我能想到的唯一方法是挂钩EVENT_SYSTEM_MOVESIZESTART
事件。当START
事件触发时,会生成一个新线程,该线程轮询目标窗口位置并更新我的覆盖位置。然后,当END
事件触发时,杀死轮询线程。
这是一种合理的方法,还是有更好的方法来实现我想要的功能。
感谢。
答案 0 :(得分:2)
根据 Hans Passant 对我提问的建议。我确实想要挂钩EVENT_OBJECT_LOCATIONCHANGE
而不是EVENT_SYSTEM_MOVESIZEEND
。一旦我挂钩LOCATIONCHANGE
,跟踪就会按预期工作。
需要注意的是,通过挂钩LOCATIONCHANGE
,您还会收到窗口的鼠标事件。您可以通过查看hwnd
回调函数的WinEventProc
轻松过滤窗口的移动。
<强> MSDN:强>
Handle to the window that generates the event, or NULL if no window is associated with the event. For example, the mouse pointer is not associated with a window.