[英]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.