Что нового

Узнать запущен ли скрипт

Dimmak

Знающий
Сообщения
185
Репутация
9
Подскажите, пожалуйста,
как узнать запущен ли конкретный скрипт или нет??
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Dimmak [?]
как узнать запущен ли конкретный скрипт или нет?
Можно по окну, по имени процесса (если скомпилирован), по ком. строке, и ещё по многим критериям.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Как вариант, в начало скрипта который надо мониторить добавить

Код:
GUICreate('MyScript')


а в скрипт который будет проверять добавляем
Код:
If WinExists('MyScript') Then
    MsgBox(64, "Состояние процесса","скрипт запущен")
EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Dimmak [?]
По названию скрипта.
Проще по ком. строке тогда уже, там тоже есть название скрипта:

Код:
#include <WinAPIEx.au3>

$aProcList = ProcessList("AutoIt3.exe")

For $i = 1 To UBound($aProcList)-1
	$sCmdLine = _WinAPI_GetProcessCommandLine($aProcList[$i][1])
	ConsoleWrite($aProcList[$i][0] & ": " & StringRegExpReplace($sCmdLine, '^.*\\|"+$', '') & @LF)
Next


WinAPEX
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
CreatoR!
Это именно то, что нужно! :ok:
СПАСИБО!!! :IL_AutoIt_1:
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
CreatoR
Запутался в справке по _winapi... :wacko:
Как же все-таки завершить процесс полученный из
_WinAPI_GetProcessCommandLine? :whistle:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Dimmak [?]
Как же все-таки завершить процесс полученный из
Нужно завершить все процессы AutoIt скриптов, или какой то определённый?
Если первое, тогда так:

Код:
$aProcList = ProcessList("AutoIt3.exe")

For $i = 1 To UBound($aProcList)-1
    ProcessClose($aProcList[$i][1])
Next


а если второе, тогда так:

Код:
#include <WinAPIEx.au3>

$sScriptName = "AutoIt v3 Script.au3"
$aProcList = ProcessList("AutoIt3.exe")

For $i = 1 To UBound($aProcList)-1
    $sCmdLine = _WinAPI_GetProcessCommandLine($aProcList[$i][1])
    
    If StringRegExpReplace($sCmdLine, '^.*\\|"+$', '') = $sScriptName Then
        ProcessClose($aProcList[$i][1])
    EndIf
Next
 
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
Думал я, что ProcessClose не завершает дочерные процессы по отдельности. :blink:
И искал решения в справке по WinApi :(
А все оказывается намного проще! :IL_AutoIt_1:
CreatoR, DarWiM
Спасибо! ;D
 
Верх