Autohotkey:将两个脚本合并/合并为一个脚本(#if WinActive,两个操作)

时间:2018-12-03 18:26:13

标签: merge autohotkey

我有2个脚本要合并到一个文件中,但是当我将它们放在一起时,只会执行第一个脚本:

脚本1:

#if WinActive("ahk_exe program.EXE")
#Persistent
Loop
{
WinWaitActive, Wizard
Send, !{F4}
}

Return

脚本2:

#if WinActive("ahk_exe program2.EXE")

#Persistent
Loop
{
    WinWait, ahk_class bosa_sdm_Mso96
    ; IfWinNotActive,  ahk_class bosa_sdm_Mso96, ,WinActivate, ahk_class bosa_sdm_Mso96
    ; WinWaitActive, ahk_class bosa_sdm_Mso96
    ; Sleep, 0
    ControlMove, RichEdit20W6, 20, 850, 750, 25   ;Adress box
    ControlMove, SysTreeView321, , , 800, 700
    ControlMove, TreeViewCFParent1, , , 1000, 700
    ControlMove, SysTreeView322, , , 800, 700
    ControlMove, TreeViewParent1, , , 760, 940
    WinMove, ahk_class bosa_sdm_Mso96, , 600, 50, 1000, 900 ; 900 width
}

Return

我尝试删除或更改“ #Persistent”,“ Loop”,“ Return”的位置。或在每个脚本的末尾添加#if ..仍然只执行第一个脚本。 #在第二个脚本中包含第一个脚本,仅第一个脚本被执行。也许它需要“ else”之类的东西。

1 个答案:

答案 0 :(得分:0)

#If directive仅用于创建上下文相关的热键和热字符串。

如果使用 WinWait WinWaitActive ,脚本将一直等到(第一个)窗口存在或变为活动状态,并且不再移动第二个窗口。< / p>

在没有WinWait的情况下,脚本的CPU使用率很高。

在这种情况下,更好的解决方案是SetTimer

#Persistent
SetTimer, Close_Move_Windows, 500 
return

Close_Move_Windows: 
IfWinActive, Wizard
    WinClose
IfWinExist, ahk_class bosa_sdm_Mso96
{
    WinGetPos, X, Y, Width, Height, ahk_class bosa_sdm_Mso96
    If (X != 600 || Y != 50 || Width != 900 || Height != 1000) ; "!" means "NOT" and "||" means "OR"
    {
        ControlMove, RichEdit20W6, 20, 850, 750, 25   ;Adress box
        ControlMove, SysTreeView321, , , 800, 700
        ControlMove, TreeViewCFParent1, , , 1000, 700
        ControlMove, SysTreeView322, , , 800, 700
        ControlMove, TreeViewParent1, , , 760, 940
        WinMove, ahk_class bosa_sdm_Mso96,, 600, 50, 900, 1000 ; 900 width
    }
}   
Return