繁体   English   中英

跟踪移动的桌面窗口WinApi

[英]Track a moving desktop window WinApi

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

这可行,但是这意味着在用户放开目标窗口的标题栏后,我的叠加层就会跳来跳去。 我想我的叠加跟踪目标窗口, 因为它是移动的,它被移动并不只是后。

我认为可以执行此操作的唯一方法是也挂接EVENT_SYSTEM_MOVESIZESTART事件。 START事件触发时,产生一个新线程来轮询目标Windows位置并更新我的叠加位置。 然后,当END事件触发时, END轮询线程。

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

谢谢。

根据汉斯·帕桑特Hans Passant )对我的问题的建议。 我确实确实希望钩住EVENT_OBJECT_LOCATIONCHANGE而不是EVENT_SYSTEM_MOVESIZEEND 钩住LOCATIONCHANGE ,跟踪将按预期工作。

值得注意的是,通过钩住LOCATIONCHANGE您还将收到该窗口的鼠标事件。 您可以通过检查WinEventProc回调函数的hwnd轻松过滤窗口的移动。

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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM