我正在尝试跟踪移动的桌面应用程序窗口,以便我可以平移相应的透明覆盖窗口。目前,我使用 SetWinEventHook
Hook EVENT_SYSTEM_MOVESIZEEND
事件。在我的回调中,我使用目标应用程序窗口的新位置更新了我的叠加层的位置。
这行得通,但这意味着在用户放开目标窗口的标题栏后,我的叠加层会跳来跳去。我希望我的叠加层能够在移动时跟踪目标窗口,而不是在它移动之后。
我能想到的唯一方法是同时 Hook EVENT_SYSTEM_MOVESIZESTART
事件。当 START
事件触发时,生成一个新线程来轮询目标窗口位置并更新我的覆盖位置。然后,当 END
事件触发时,终止轮询线程。
这是一种合理的方法,还是有更好的方法来实现我想要的功能。
谢谢。
最佳答案
根据 Hans Passant 对我的问题的建议。我确实想 Hook EVENT_OBJECT_LOCATIONCHANGE
而不是 EVENT_SYSTEM_MOVESIZEEND
。一旦我 Hook LOCATIONCHANGE
,跟踪就会按预期进行。
请注意,通过 Hook LOCATIONCHANGE
,您还将收到窗口的鼠标事件。您可以通过检查WinEventProc
回调函数的hwnd
轻松过滤窗口的移动。
MSDN:
生成事件的窗口句柄,如果没有窗口与事件关联,则为 NULL。例如,鼠标指针不与窗口关联。
关于windows - 跟踪移动的桌面窗口 WinApi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22020777/