2014-09-26 72 views
1

我想在AutoHotkey中實現一種窗口對接功能,並且在使用WinMove移動窗口時出現性能問題。用WinMove移動窗口非常慢

在我的消息處理程序中,我檢測被移動的窗口是否有任何依賴項,並根據需要移動它們。問題是移動Dockers WinMove會導致非常緩慢和不平穩的拖動。奇怪的是,CPU負載確實是而不是上升,所以它不是由不良循環或其他引起的。

如果我使用Gui,Show命令代替,它會產生一個很好的流暢的動作,但是如果停靠的窗口關閉並且它的父窗口被移動,則停靠窗口將重新顯示爲一個薄的〜5x10像素的窗口。我嘗試使用命令的hide選項,以及在窗口的關閉處理程序中專門添加對Gui, Destroy的調用,但都沒有幫助。此外,使用Gui命令意味着它不僅更加混亂,而且除了句柄之外還必須存儲Gui數字,這並不理想。

; Works and leaves closed windows closed, but is very slow 
WinMove, ahk_id %dHWND%,, dX, dY 

; This works and is fast, but requires storing the GUI # and closed windows reappear 
Gui, % (Dock[dHWND, "gui"] ? Dock[dHWND, "gui"] . ":" : "") . "Show", % "hide na x" . dX " y" . dY 

有沒有人知道爲什麼WinMove是如此之慢,以及如何解決它? (我也會考慮Gui命令,如果它可以修復不重新顯示關閉窗口。)

回答

3

SetWinDelay, -1應該解決你的問題。

「在每個窗口命令後自動完成一個短暫延遲(睡眠)」,因爲這會默認爲100ms。

+0

完美。我一直在忘記這一點。感謝三百萬。 – Synetech 2014-09-26 21:54:35