autohotkey 脚本求修改

一个窗口控制脚本,但是不能工作,希望高手帮忙修改程序返回如下:008: {030: {056: arry := Object()057: arry.Nub := 0 059: Return (11.78)060: {061: arry = : min("arry")062: Return (5.09)Press [F5] to refresh============================================源代码如下:;传递最小化的窗口个数,返回包含窗口ID的数组,自定义函数就在局部变量里开始了,数组变量:当前项目数。;(数组需求)本函数的数组,局部变量,不需要考虑全局,该数组包含个数类.;为了数组的生命周期(全局的,并且仅声明一次),故传入参数为数组。;(动作)按一次运行一遍min(arry){ ;得到当前窗口信息,用于判别和存储变量。 WinGet, active_id, ID, A msgbox 找到的窗口信息如下:%active_id% %ID% %A% ;debug ;处理桌面需求,不缩小桌面 if active_id = ahk_class Progman { return Cy ;返回数组 } ;按一次就缩小一次窗口 arry.Nub += 1 ;记录数组中的项目数,项目数+1 Nu := arry.Nub arry[Nu] :=%active_id% ; 把此行保存到数组中 WinMinimize, ahk_id %active_id% ;隐藏 msgbox %active_id%};此参数不对当前窗口操作,仅操作数组内窗口;(动作)按一次从数组内数组内取出一个ID,最大化ID窗口max(arry){;处理ID关闭,项目-1,直到 找到未关闭或项目为0:循环,知道找到存在id或Nub为0 ,未防止未知错误一直运行,设置循环次数为15loop 15{ Nu := arry.Nub ;从数组内取出ID active_id := arry[Nu] ;看是否关闭了 Process,Exist,%active_id% ;如果未关闭就跳出循环 if ErrorLevel > 0 break if Nub = 0 { return arry ;如果项目数为0,就返回不做了 Nub -= 1 ;关闭了就下一个 }} ;现在找到了数组中存在的进程 WinMaximize, ahk_id %active_id% ;最大化 A -= 1 ;下次读取的ID不能是这个了 return arry};现在开始声明参数变量arry := Object()arry.Nub := 0;现在开始调用F1::{arry =: min("arry")return}F2::{arry =: max("arry")return}
2026年09月17日 11:07
有1个网友回答
网友(1):

;我可以理解为min函数存入窗口信息到数组并最小化,调用max函数时最大化最后一次缩小一个窗口,并从数组移除。当数组为空时,不作任何处理。
;
;下面是你的脚本,注释掉了一些,修改了语法问题,整体进行重构。因为数组。
min(array)
{
; WinGetClass, active_id, ID, A ;这里你获取的active_id是做唯一性验证用的,不用用在窗口缩放命令上面
WinGetActiveTitle, title
WinGetClass, active_ahk_class, %title%
; if active_id = ahk_class Progman
if active_ahk_class = Progman
{
; return Cy
return array
}
array[Nub] += 1
Nu := array[Nub]
array[Nu] := active_ahk_class
WinMinimize, ahk_class %active_ahk_class%
return array
; msgbox  %active_id%
}

max(array)
{
Nu := array[Nub]
loop 15
{
active_ahk_class := array[Nu]
; Process,Exist,%active_id% ;这个是用来判断进程的,不是判断窗口的
; if ErrorLevel > 0
; break
; if Nub = 0
; {
; Nub -= 1
; return array
; }
IfWinExist, ahk_class %active_ahk_class%
{
WinMaximize, ahk_class %active_ahk_class%
Nu -= 1
Break
}
Else
{
if Nu = 0
Break
Else
Nu -= 1
}
}
;WinMaximize, ahk_class %active_id%
;A -= 1
array[Nub] := Nu
return array
}

array := Object()
array[Nub] := 0

F1::
array := min(array)
return

F2::
array := max(array)
return