使用WinMove移动窗口非常缓慢



我正试图在AutoHotkey中实现一种窗口停靠功能,但在使用WinMove移动窗口的性能方面遇到了问题。

在我的消息处理程序中,我检测被移动的窗口是否有任何从属项,并根据需要移动它们。问题是,使用WinMove移动被固定对象会导致非常缓慢和剧烈的拖动移动。奇怪的是,CPU负载并没有上升,所以这不是由坏循环或类似情况引起的。

如果我改为使用Gui,Show命令,它会产生一个很好的、流畅的运动,但如果停靠窗口关闭并移动其父窗口,则停靠对象将重新显示为一个约5x10像素的薄窗口。我尝试为Gui命令使用hide选项,并在窗口的关闭处理程序中专门添加对Gui, Destroy的调用,但都没有帮助。此外,使用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命令不重新显示关闭的窗口,我也会考虑它。)

SetWinDelay, -1应该可以解决您的问题。

"每次窗口命令后都会自动执行短延迟(睡眠)",因为默认为100ms。