2014-09-26 80 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