You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Autohotkey多显示器下窗口最小化后恢复位置偏移问题

问题根因

你当前脚本的问题出在WinMove和WinMaximize的执行逻辑,以及系统对最大化窗口的位置缓存机制:

  • 系统默认会为最大化窗口存储一套「还原状态坐标」,最小化后恢复时会优先读取这套缓存,你直接移动后最大化,没有正确更新系统层面的窗口还原坐标缓存,多显示器场景下就会回弹到主显示器
  • 硬编码的固定坐标适配性差,如果你后续调整显示器排列参数会失效

修正后可生效的AHK脚本

; 启动第一个记事本并标记专属标题
Run, Notepad
WinWait, ahk_class Notepad
WinSetTitle, 左屏记事本
; 先重置为还原状态再移动,确保更新系统的窗口位置缓存
WinRestore, 左屏记事本
WinMove, 左屏记事本,, -2304, 0, A_ScreenWidth, A_ScreenHeight
WinMaximize, 左屏记事本

; 启动第二个记事本并标记专属标题
Run, Notepad
WinWait, ahk_class Notepad
WinSetTitle, 右屏记事本
WinRestore, 右屏记事本
WinMove, 右屏记事本,, 1500, 0, A_ScreenWidth, A_ScreenHeight
WinMaximize, 右屏记事本

; 可选:添加窗口还原事件监听,永久避免坐标回弹
OnMessage(0x0112, "CheckWindowRestore")
CheckWindowRestore(wParam) {
    if (wParam = 0xF120) { ; 0xF120对应窗口还原的系统消息码SC_RESTORE
        WinGetTitle, activeTitle, A
        if (activeTitle = "左屏记事本") {
            WinRestore, A
            WinMove, A,, -2304, 0
            WinMaximize, A
        } else if (activeTitle = "右屏记事本") {
            WinRestore, A
            WinMove, A,, 1500, 0
            WinMaximize, A
        }
    }
}

关键修改说明

  • 先执行WinRestore再移动:确保你修改的是窗口的还原状态坐标,修改后再最大化,系统会自动把你设置的坐标存入还原位置缓存,恢复时就不会回弹
  • 增加窗口还原事件监听:如果系统后续因为分辨率调整、显示器插拔重置了坐标,触发还原操作时会自动把窗口挪回对应位置
  • 去掉了多余的窗口遍历和弹窗逻辑,直接针对两个标记后的记事本操作,执行效率更高

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:39:04