2016-08-20 8 views
0

我想要實現的是使用SetTimer命令啓動無限子程序。下面的代碼不起作用obv,但它應該很清楚我想要做什麼。 反正每次我按下F1的時間我要開始新的子程序,使用不同的名稱使用SetTimer命令的Lauch無限子程序

guiCount := 0 
f1::  
guiCount++ 
drawFrameAroundWin(WinExist("a"), "Red", 5, 1) 
WinGetActiveTitle, activeWinTitleFrame 
wingetpos,activeWinTitleFrameX,,,,%activeWinTitleFrame% 
SetTimer, Window%guiCount% 
return 

Window%guiCount%: 
wingetpos,activeWinTitleFrameX2,,,,%activeWinTitleFrame% 
    if (activeWinTitleFrameX != activeWinTitleFrameX2) 
     { 
     Gui,Destroy 
     SetTimer, window%guiCount%, off 
     } 
return 

回答

1

如你所知,子程序不能用一個變量,你想聲明。你似乎試圖使用線程,不幸的是官方的AutoHotkey沒有它們,但有3個選項:AutoHotkey.dll提供線程類似的功能(谷歌它),你可以修改和保存一個新的腳本,並在每次你想分開運行它創建一個新的窗口邊界,或者你可以使用一個定時器(如果它不需要精確地銷燬GUI)並按照從最初創建到最後的順序銷燬窗口,就可以使用一個定時器。

下面演示了第三選項,而不是一個完美的執行:

guiNumArr := [] 

F1:: 
    WinGetActiveStats, Title, Width, Height, X, Y 
    guiCurrent := drawFrameAroundWin(Width, Height) 
    guiNumArr.push(guiCurrent) 
    Gui, %guiCurrent%:Show, NoActivate ; The Gui will not steal keyboard focus 
    SetTimer, guiDestroy, 2000 
Return 

guiDestroy: 
    if (guiNumArr.length()) { 
     x := guiNumArr.RemoveAt(1) 
     gui, %x%:destroy 
     return 
    } 
    else 
     SetTimer, guiDestroy, Off 
return 

drawFrameAroundWin(TW:=320, TH:=240, BorderThickness:=3, BorderColor:="0000FF") { 
    static guiNumber := 0 

    guiNumber++ 
    colors := ["Red", "Yellow", "Blue", "Green"] 

    random, x, 1, 4 
    BorderColor := colors[x] 

    Gui, %guiNumber%:Margin, %BorderThickness%, %BorderThickness% 
    Gui, %guiNumber%:Color, %BorderColor% 
    Gui, %guiNumber%:Add, Text, w%TW% h%TH% 0x6 ; Draw a white static control 
    Gui, %guiNumber%:+LastFound 
    WinSet, TransColor, FFFFFF 
    Gui, %guiNumber%: -Caption +AlwaysOnTop +ToolWindow 

    Return guiNumber 
} 
+0

泰非常多的寶貴時間 – user3159140