跟踪移动的桌面窗口WinApi

时间:2014-02-25 16:48:16

标签: windows winapi

我正在尝试跟踪移动的桌面应用程序窗口,以便我可以在奇偶校验中移动相应的透明覆盖窗口。目前,我将EVENT_SYSTEM_MOVESIZEEND事件与SetWinEventHook挂钩。在我的回调中,我使用目标应用程序窗口的新位置更新叠加层的位置。

这有效,但这意味着在用户放开目标窗口的标题栏后,我的叠加层会跳转。我希望我的叠加层能够跟踪目标窗口 它正在移动,而不仅仅是 移动后。

我能想到的唯一方法是挂钩EVENT_SYSTEM_MOVESIZESTART事件。当START事件触发时,会生成一个新线程,该线程轮询目标窗口位置并更新我的覆盖位置。然后,当END事件触发时,杀死轮询线程。

这是一种合理的方法,还是有更好的方法来实现我想要的功能。

感谢。

1 个答案:

答案 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.