Что нового

Как сравнить PID процессов

AlexxxMksv

Новичок
Сообщения
39
Репутация
0
Как сравнить PID процессов, обычным способом не выходит PID1 == PID2?
нужно наверное перевести в другой тип. Как это сделать?

Код:
Global Const $MyPid = @AutoItPID
$aProcessList = ProcessList("CreateDT.exe")

For $i = 1 To $aProcessList[0][0]
  If String($aProcessList[$i][1]) == $MyPid Then
	 MsgBox(0,"","True")
  EndIf
Next
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
PID - это уникальное число. Они всегда разные.
 

Olim98

Новичок
Сообщения
48
Репутация
2
У меня все нормально работает!
Код:
$pid1 = ProcessExists('smss.exe')
$pid2 = ProcessExists('services.exe')
If $pid1 = $pid2 Then
	MsgBox(0, 'smss = services', 'PID равны')
Else
	MsgBox(0, 'smss = services', 'PID не равны')
EndIf
$pid1 = ProcessExists('smss.exe')
$pid2 = ProcessExists('smss.exe')
If $pid1 = $pid2 Then
	MsgBox(0, 'smss = smss', 'PID равны')
Else
	MsgBox(0, 'smss = smss', 'PID не равны')
EndIf
 
Автор
A

AlexxxMksv

Новичок
Сообщения
39
Репутация
0
Код:
Global Const $MyPid = @AutoItPID
MsgBox(0,"",$MyPid)

$aProcessList = ProcessList("CreateDT.exe")

For $i = 1 To $aProcessList[0][0]
  If $aProcessList[$i][1] == $MyPid Then
    MsgBox(0,"","True")
  EndIf
Next



Да, у меня так заработало, странно.
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
AlexxxMksv [?]
так заработало, странно
Ничего удивительного. Для скомпилированного скрипта @AutoItPID - это и есть PID процесса скомпилированного скрипта.
 
Автор
A

AlexxxMksv

Новичок
Сообщения
39
Репутация
0
InnI сказал(а):
AlexxxMksv [?]
так заработало, странно
Ничего удивительного. Для скомпилированного скрипта @AutoItPID - это и есть PID процесса скомпилированного скрипта.

Вот в чем дело было! Я думал код идентичен, в чем моя ошибка, работают они по разному?
Код:
For $i = 1 To $aProcessList[0][0]
  If Not $aProcessList[$i][1] == $MyPid Then
    MsgBox(0,"","Конкурент: " & $aProcessList[$i][1])
  EndIf
Next


Код:
For $i = 1 To $aProcessList[0][0]
  If $aProcessList[$i][1] == $MyPid Then
  Else
    MsgBox(0,"","Конкурент: " & $aProcessList[$i][1])
  EndIf
Next
 

InnI

AutoIT Гуру
Сообщения
4,982
Репутация
1,460
AlexxxMksv
Найти "конкурента" вы можете по имени процесса, а не по его PID
Код:
$aProcessList = ProcessList("calc.exe")
If $aProcessList[0][0] > 1 Then MsgBox(0,"","Найден конкурент")
 
Автор
A

AlexxxMksv

Новичок
Сообщения
39
Репутация
0
InnI сказал(а):
AlexxxMksv
Найти "конкурента" вы можете по имени процесса, а не по его PID
Код:
$aProcessList = ProcessList("calc.exe")
If $aProcessList[0][0] > 1 Then MsgBox(0,"","Найден конкурент")


Не годится. потому что их не один и с каждым придется перебросится сообщениями, идентифицируя его по ID
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
AlexxxMksv, посмотрите UDF во вложениях, я думаю, что Вам пригодятся функции _Process_CheckProcCopy и _Process_GetProcFilePuth
Код:
#include "Process.au3"
Local $aList, $fCopy = 0
$aList = _Process_CheckProcCopy(@ScriptName, 0)
	If NOT @Error Then
	For $i = 1 To $aList[0]
		If $aList[$i] = @AutoItPID Then ContinueLoop
		If _Process_GetPidFilePuth($aList[$i]) = @AutoItExe Then $fCopy += 1
	Next
	EndIF

MsgBox(48," ","Найдено "&$fCopy&" копий процесса скрипта")
 

Вложения

  • Process.au3
    12.2 КБ · Просмотры: 3
Верх