2014-02-25 27 views
1

我正在嘗試跟蹤正在移動的桌面應用程序窗口,以便可以在奇偶校驗中移動相應的透明疊加窗口。目前,我將EVENT_SYSTEM_MOVESIZEEND事件與SetWinEventHook掛鉤。在我的回調中,我使用目標應用程序窗口的新位置更新覆蓋層的位置。跟蹤正在移動的桌面窗口WinApi

這工作,但它意味着我的疊加跳躍各地用戶允許後進入目標窗口的標題欄。我想我的覆蓋物跟蹤目標窗口它正在移動,而不僅僅是它之後已移動

我能想到做到這一點,唯一的辦法就是也勾EVENT_SYSTEM_MOVESIZESTART事件。當START事件觸發時,產生一個新的線程輪詢目標窗口位置並更新我的覆蓋位置。然後,當END事件觸發時,終止輪詢線程。

這是一個合理的方法,或者是有沒有更好的方式來實現我想要的功能。

謝謝。

+3

使用EVENT_OBJECT_LOCATIONCHANGE或隱藏覆蓋,而它正在移動。 –

+0

@HansPassant謝謝,這似乎是我正在尋找的。我不知道我是如何錯過的,我會試試看。 – forTruce

+0

另一種選擇是對目標窗口進行子類化並處理WM_WINDOWPOSCHANGING消息。 –

回答

2

漢斯帕桑特的關於我的問題的建議。我確實想要掛鉤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.

+0

感謝您的MSDN筆記。 – SMUsamaShah