Что нового

Как отследить запуск и завершение процессов с помощью ProcessList

Dimmak

Знающий
Сообщения
185
Репутация
9
; Для определения появившихся процессов использую следующий код. Но это не эффективный способ.

Код:
#include <Array.au3>

$aPrsList_1= ProcessList()
      $iPid_1=  Run( 'Notepad.Exe' )
      $iPid_2=  Run( 'Notepad.Exe' )

$aPrsList_2= ProcessList()
      ProcessClose($iPid_1) 
      ProcessClose($iPid_2); Закрываем для удобства

If $aPrsList_1[0][0]< $aPrsList_2[0][0] Then
$iShift= $aPrsList_2[0][0] -$aPrsList_1[0][0]

      For $i= 1 To $iShift
            ConsoleWrite( $aPrsList_2[ $aPrsList_1[0][0]+$i ][0] &@CR)
            ConsoleWrite( $aPrsList_2[ $aPrsList_1[0][0]+$i ][1] &@CR)
      Next

EndIf



; Подскажите, пожалуйста, как эффективно сравнить 2 ProcList'a чтобы определить появившиеся и/или закрытые процессы?
 

joiner

Модератор
Локальный модератор
Сообщения
3,470
Репутация
609
во вложении что-то типа диспетчера задач. есть контекстное меню к процессам и естественно отслеживает появление новых.
код как идея. может что полезного для себя возьмешь
 

Вложения

  • Proc_mon.au3
    5.6 КБ · Просмотры: 16
Автор
Dimmak

Dimmak

Знающий
Сообщения
185
Репутация
9
joiner спасибо.
Но мой вопрос такой:
ProcessList() возвращает 2 мерный массив данных содержащих pid процесса и имя. Мне нужно сравнить 2 вызова функции ProcessList для выяснения различий между массивами. Помогите пожалуйста с функцией.
Сообщение автоматически объединено:

 

InnI

AutoIT Гуру
Сообщения
4,740
Репутация
1,360
для выяснения различий между массивами
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,670
Репутация
2,473
Если по проще, то можно так сравнивать два массива:

Код:
#include <Array.au3>

$iTestPID = Run('Notepad.exe', '', @SW_HIDE)
$aOldProcList = ProcessList()

While 1
    Sleep(100)
    
    $aProcList = ProcessList()
    
    If _ArrayCompare($aProcList, $aOldProcList) Then
        MsgBox(64, @ScriptName, 'Processes list has been changed.')
        ExitLoop
    EndIf
    
    ProcessClose($iTestPID)
WEnd

Func _ArrayCompare($aArr1, $aArr2)
    Return (_ArrayToString($aArr1) <> _ArrayToString($aArr2))
EndFunc
 
Верх