Войти

Показать полную графическую версию : [решено] как поставить скрипт в очередь ?


mitiya
16-01-2012, 12:20
есть у меня скрипт на autoit который может быть запущен несколько раз в то время пока первый еще не успел отработать до конца. И мне нужно что бы они как бы в очередь вставали. Работать параллельно им нельзя и сбрасывать те что запущены тоже нельзя.
Есть способ _Singleton() что бы узнать, что уже запущен скрипт, если бы можно было только 2 экземпляра запустить то я бы просто проверку в цикл поставил, но когда их может быть несколько все становится сложнее.
Нужно знать длину очереди и номер в очереди, тут я малость встал.
Может есть какие идеи ?

Iska
16-01-2012, 14:10
Можно воспользоваться тем, что PID'ы растут последовательно.

При запуске приложения проверяйте наличие процессов с тем же именем (исключая, естественно, сам текущий экземпляр приложения), получите их PID'ы, следите за процессом с наивысшим PID'ом, и ждите, пока он не будет завершён.

Creat0R
16-01-2012, 17:14
Можно воспользоваться тем, что PID'ы растут последовательно. »
Вообще то нет, есть у меня в процессах старые процессы с меньшим большим значением у PID.

Iska
16-01-2012, 17:33
с меньшим значением у PID. »
С большим, наверное?

Я не находил информацию, как подтверждающую, либо опровергающую ранее приведённое предположение. Буду рад, ежели кто поделится.

ferget
16-01-2012, 18:39
проверяю

запускаю калькулятор PID 2148, затем блокнот PID 5120

закрываю калькулятор и блокнот

снова запускаю

калькулятор PID 5632, затем блокнот PID 2296

а самый высокий PID у pythonw.exe 6140, а запущен он еще утром

так что по PID не отследить

Creat0R
16-01-2012, 21:11
В общем вот что у меня получилось:

$iQueue_Position = _AppSetQueue(500)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'Title', StringFormat (http://www.autoitscript.com/autoit3/docs/functions/StringFormat.htm)('Process: %i\nQueue position: %i', @AutoItPID (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitpid), $iQueue_Position))

; #FUNCTION# ====================================================================================================
; Name...........: _AppSetQueue
; Description....: Sets Queue for the next instances of this script.
; Syntax.........: _AppSetQueue($iWait = 500, $iOnStart = 1)
; Parameters.....: $iWait [Optional] - Wait between each queue check (default is 500 ms).
; $iOnStart [Optional/Internal] - Indicates if the function was executed on start, only internal usage.
;
;
; Return values..: Success - Return Queue position (-1 if this is the first instance of the program).
; Failure - None.
; Author.........: G.Sandler (CreatoR)
; Modified.......:
; Remarks........:
; Related........:
; Link...........:
; Example........:
; ==================================================================================================== ===========
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _AppSetQueue($iWait = 500, $iOnStart = 1)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sUnique_Win, $sQueue, $aQueue, $iC, $sTmp_Script, $nEdit, $hFile, $iLast_Queue

$sUnique_Win = "__Au3_Queue_Window__"
$sQueue = ControlGetText (http://www.autoitscript.com/autoit3/docs/functions/ControlGetText.htm)($sUnique_Win, "", "Edit1")
$aQueue = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)($sQueue, @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf), 1)

;The script Exits (called by OnAutoItExitRegister)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) IsDeclared (http://www.autoitscript.com/autoit3/docs/functions/IsDeclared.htm)("iOnStart") Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sQueue = ""
$iC = 0

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aQueue[0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($aQueue[$i], '^\d+:' & @AutoItPID (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitpid)) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iC += 1
$sQueue &= $iC & ":" & StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aQueue[$i], '^\d+:', '') & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

$sQueue = StringStripWS (http://www.autoitscript.com/autoit3/docs/functions/StringStripWS.htm)($sQueue, 3)
ControlSetText (http://www.autoitscript.com/autoit3/docs/functions/ControlSetText.htm)($sUnique_Win, "", "Edit1", $sQueue)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

OnAutoItExitRegister (http://www.autoitscript.com/autoit3/docs/functions/OnAutoItExitRegister.htm)("_AppSetQueue")

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)($sUnique_Win) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sTmp_Script = _
'#NoTrayIcon' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'GUICreate("' & $sUnique_Win & '", 100, 20)' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'$nEdit = GUICtrlCreateEdit("1:' & @AutoItPID (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitpid) & '", 0, 0, 100, 20)' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'While GUICtrlRead($nEdit) <> ""' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
' Sleep(100)' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'WEnd' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'FileDelete(@TempDir & "\~tmp_GUI_src.tmp")' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Run(@ComSpec & '' /C Del /F /Q "'' & @TempDir & ''\~tmp_GUI.tmp"'', '''', @SW_HIDE)' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'Exit' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)

$hFile = FileOpen (http://www.autoitscript.com/autoit3/docs/functions/FileOpen.htm)(@TempDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@tempdir) & "\~tmp_GUI_src.tmp", 2)
FileWrite (http://www.autoitscript.com/autoit3/docs/functions/FileWrite.htm)($hFile, $sTmp_Script)
FileClose (http://www.autoitscript.com/autoit3/docs/functions/FileClose.htm)($hFile)

FileCopy (http://www.autoitscript.com/autoit3/docs/functions/FileCopy.htm)(@AutoItExe (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitexe), @TempDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@tempdir) & "\~tmp_GUI.tmp", 1)
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@TempDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@tempdir) & '\~tmp_GUI.tmp /AutoIt3ExecuteScript "' & @TempDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@tempdir) & '\~tmp_GUI_src.tmp"')

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) -1
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$iLast_Queue = Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)(StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aQueue[$aQueue[0]], '^(\d+)', '\1'))
$sQueue &= @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & $iLast_Queue + 1 & ":" & @AutoItPID (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitpid)
ControlSetText (http://www.autoitscript.com/autoit3/docs/functions/ControlSetText.htm)($sUnique_Win, "", "Edit1", $sQueue)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$sQueue = ControlGetText (http://www.autoitscript.com/autoit3/docs/functions/ControlGetText.htm)($sUnique_Win, "", "Edit1")
$aQueue = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)($sQueue, @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf), 1)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($aQueue[1], '^\d+:' & @AutoItPID (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitpid)) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aQueue[0] ;It' our turn in the queue
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)($iWait)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

mitiya
17-01-2012, 01:59
упс, не обновил страницу. а тут уже кучу всего написали ))

я так понимаю тут временные файлы используются ?
мне приходила в голову идея с файлами, но не хотелось мучить ssd и я на эту идею подзабил.

Creat0R
17-01-2012, 02:08
я так понимаю тут временные файлы используются ? »
Используется, и только один раз при запуске первой копии программы.
Делается это для того, чтобы запустить дополнительный (промежуточный-нейтральный) скрипт, который действует как хранилище для очереди запускаемых копий скриптов.

mitiya
17-01-2012, 02:15
а вы можете описать поподробней как там все работает. честно говоря код сложноват для меня.

Creat0R
17-01-2012, 03:20
как там все работает »

При первом запуске создаётся скрипт с окном и элементом Edit для хранения списка очереди.
При повторном запуске скрипт дописывает в этот самый Edit-элемент себя как ожидающего очереди, и ждёт пока эта очередь до него дойдёт (пока в списке Edit он не будет первым).
Когда скрипт завершает свою работу, он удаляет себя из списка очереди, корректируя список.

код сложноват для меня »
А всё что от вас требуется, так это помещение этого кода в начало вашего скрипта.
Там где MsgBox, это и есть тело вашего скрипта.

Немного подправил код.

Creat0R
17-01-2012, 04:50
Вот более простой скрипт (не использует временных файлов):

$iQueue_Position = _AppSetQueue(100)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'Title', StringFormat (http://www.autoitscript.com/autoit3/docs/functions/StringFormat.htm)('Process: %i\nQueue position: %i', @AutoItPID (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitpid), $iQueue_Position))

; #FUNCTION# ====================================================================================================
; Name...........: _AppSetQueue
; Description....: Sets Queue for the next instances of this script.
; Syntax.........: _AppSetQueue($iWait = 100)
; Parameters.....: $iWait [Optional] - Waiting queue (default is 500 ms).
;
;
; Return values..: Success - Return Queue position (0 if this is the first instance of the program).
; Failure - None.
; Author.........: G.Sandler (CreatoR)
; Modified.......:
; Remarks........:
; Related........:
; Link...........:
; Example........:
; ==================================================================================================== ===========
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _AppSetQueue($iWait = 100)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sUnique_Win, $sScriptName, $aProcList, $aWinList, $iQueue, $hPrev_Queue_Win, $j

$sUnique_Win = "_Au3_Queue_Window_"
$sScriptName = @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @Compiled (http://www.autoitscript.com/autoit3/docs/macros.htm#@compiled) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sScriptName = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)(@AutoItExe (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitexe), '^.*\\', '')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$aProcList = ProcessList (http://www.autoitscript.com/autoit3/docs/functions/ProcessList.htm)($sScriptName)
$aWinList = WinList (http://www.autoitscript.com/autoit3/docs/functions/WinList.htm)($sUnique_Win)

$iQueue = 0
$hPrev_Queue_Win = 0

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aWinList) > 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$hPrev_Queue_Win = $aWinList[1][1]
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aProcList)-1
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $j = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aWinList)-1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $aWinList[$j][0] = $sUnique_Win And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) WinGetProcess (http://www.autoitscript.com/autoit3/docs/functions/WinGetProcess.htm)($aWinList[$j][1]) = $aProcList[$i][1] Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iQueue += 1

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $j > 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$hPrev_Queue_Win = $aWinList[$j-1][1]
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

AutoItWinSetTitle (http://www.autoitscript.com/autoit3/docs/functions/AutoItWinSetTitle.htm)($sUnique_Win & "__")
ControlSetText (http://www.autoitscript.com/autoit3/docs/functions/ControlSetText.htm)($sUnique_Win & "__", "", "Edit1", $iQueue + 1)
AutoItWinSetTitle (http://www.autoitscript.com/autoit3/docs/functions/AutoItWinSetTitle.htm)($sUnique_Win)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iQueue = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) 0
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)($hPrev_Queue_Win)
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)($iWait)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $iQueue
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

mitiya
17-01-2012, 12:42
был бы признателен за объяснение что тут и как .

я полез в функцию _Singleton() которой определяется запущен ли уже скрипт или нет и выяснил, что она работает за счет создания у процесса неких mutant. Не совсем понимаю что это и для чего, но тем не менее с помощью них было бы очень удобно все сделать, если бы не одно но, при проверке на наличие у процесса этого mutant если его нет функция его создает, а как просто проверить есть или нет я не знаю. Если бы можно было это делать, то можно было бы хранить номер в очереди у каждого процесса.

Creat0R
17-01-2012, 13:22
был бы признателен за объяснение что тут и как »
Я использовал „систему билетов“, как это сделано например в поликлинике :)

Каждый запущенный скрипт получает „билетик“, для этого используется встроенное окно AutoIt (см. AutoItWinGetTitle).
Далее проверяются все окна от процессов нашего скрипта, и если скрипт на очереди (первый в списке), то продолжается (выполняется) его работа.

Если бы можно было это делать, то можно было бы хранить номер в очереди у каждого процесса. »
Спрашивается зачем?

Пример выше разве не работает?

mitiya
17-01-2012, 13:40
ну у меня скрипт без окон.
и самое главное они запускаются на терминальном сервере, и в результате скрпты всех пользователей в очередь встают, а надо чтоб очередь создавалась у каждого пользователя своя. с помощью _Singleton() легко отслеживается процесс от текущего пользователя, если делать к примеру так _Singleton($sProIDText & @UserName, 1)

Creat0R
17-01-2012, 22:52
у меня скрипт без окон »
У AutoIt есть встроенное (скрытое) окно, его и использует моя функция.

самое главное они запускаются на терминальном сервере, и в результате скрпты всех пользователей в очередь встают, а надо чтоб очередь создавалась у каждого пользователя своя »
Вот это «самое главное» следует указывать в самом начале, при созданий темы.

Можно попробовать так:

#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) "WinAPIEx.au3" ;http://autoit-script.ru/index.php/topic,47.0.html

$iQueue_Position = _AppSetQueue(100)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'Title', StringFormat (http://www.autoitscript.com/autoit3/docs/functions/StringFormat.htm)('Process: %i\nQueue position: %i', @AutoItPID (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitpid), $iQueue_Position))

; #FUNCTION# ====================================================================================================
; Name...........: _AppSetQueue
; Description....: Sets Queue for the next instances of this script.
; Syntax.........: _AppSetQueue($iWait = 100, $sUserName = @UserName)
; Parameters.....: $iWait [Optional] - Waiting queue (default is 100 ms).
; $sUserName [Optional] - Limit queue for specfific system user.
;
;
; Return values..: Success - Return Queue position (0 if this is the first instance of the program).
; Failure - None.
;
; Author.........: G.Sandler (CreatoR)
; Modified.......:
; Remarks........:
; Related........:
; Link...........:
; Example........:
; ==================================================================================================== ===========
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _AppSetQueue($iWait = 100, $sUserName = @UserName (http://www.autoitscript.com/autoit3/docs/macros.htm#@username))
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sUnique_Win, $sScriptName, $aProcList, $aWinList, $iQueue, $hPrev_Queue_Win, $aProcUser

$sUnique_Win = "_Au3_Queue_Window_"
$sScriptName = @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @Compiled (http://www.autoitscript.com/autoit3/docs/macros.htm#@compiled) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sScriptName = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)(@AutoItExe (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitexe), '^.*\\', '')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$aProcList = ProcessList (http://www.autoitscript.com/autoit3/docs/functions/ProcessList.htm)($sScriptName)
$aWinList = WinList (http://www.autoitscript.com/autoit3/docs/functions/WinList.htm)($sUnique_Win)

$iQueue = 0
$hPrev_Queue_Win = 0

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aWinList) > 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$hPrev_Queue_Win = $aWinList[1][1]
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aProcList)-1
$aProcUser = _WinAPI_GetProcessUser($aProcList[$i][1])

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $aProcUser[0] <> $sUserName Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ContinueLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ContinueLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $j = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aWinList)-1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $aWinList[$j][0] = $sUnique_Win And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) WinGetProcess (http://www.autoitscript.com/autoit3/docs/functions/WinGetProcess.htm)($aWinList[$j][1]) = $aProcList[$i][1] Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iQueue += 1

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $j > 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$hPrev_Queue_Win = $aWinList[$j-1][1]
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

AutoItWinSetTitle (http://www.autoitscript.com/autoit3/docs/functions/AutoItWinSetTitle.htm)($sUnique_Win & "__")
ControlSetText (http://www.autoitscript.com/autoit3/docs/functions/ControlSetText.htm)($sUnique_Win & "__", "", "Edit1", $iQueue + 1)
AutoItWinSetTitle (http://www.autoitscript.com/autoit3/docs/functions/AutoItWinSetTitle.htm)($sUnique_Win)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iQueue = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) 0
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) WinExists (http://www.autoitscript.com/autoit3/docs/functions/WinExists.htm)($hPrev_Queue_Win)
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)($iWait)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $iQueue
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

нужно подключить библиотеку WinAPIEx.au3 (http://autoit-script.ru/index.php/topic,47.0.html).

mitiya
18-01-2012, 08:50
Вот это «самое главное» следует указывать в самом начале, при созданий темы. »
сам это упусти вначале :)

спасибо

Iska
18-01-2012, 10:40
И я поправил (http://forum.oszone.net/post-1837063.html#post1837063).




© OSzone.net 2001-2012