我正试图在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。