- Lister les processus
- Fermer un processus
- Savoir si un processus existe bien
Elles fonctionnes comme les fonctions standards (ProcessList , ProcessClose, ProcessExists)
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: Matwachich
Script Function:
Fonction traitant les processus par le chemin du fichier, et non par le nom uniquement
Utile quand on veut 'cibler' un processus en particulier quand on en a plusieurs avec le
même nom de fichier
#ce ----------------------------------------------------------------------------
#include-once
#include <_processfunctions.au3>
#include <array.au3>
;===============================================================================
;
; Function Name: _processClosePath($path)
; Description:: Ferme le processus correspondant au chemin du fichier (pas seulement au non du fichier)
; Utile par exemple, si vous voulez fermer un processus appelé 'svchost.exe' sans risquer de toucher
; au processus système
; Parameter(s): $path = Chemin du fichier
; Requirement(s): l'UDF de Ascend4nt's (inclue au début du fichier)
; Return Value(s): Succes -> Retourne ce que retourne 'ProcessClose' (standard) en fermant un PID
; Erreur -> -1 et si:
; Aucun processus avec ce NOM de fichier: @error = 1
; Aucun processus avec ce CHEMIN de fichier: @error = 0
; Author(s): Matwachich
;
;===============================================================================
;
Func _processClosePath($path)
Local $fileName = StringTrimLeft($path, StringInStr($path, "\", 1, -1))
Local $process = _processListPath($fileName)
If $process[0][0] = 0 Then Return SetError(1, 0, -1)
Local $pids[$process[0][0]]
For $i = 1 To $process[0][0]
If $process[$i][0] = $path Then $pids[$i - 1] = $process[$i][1]
Next
;~ _ArraySort($pids, 1)
If $pids[0] <> "" Then
Return SetError(0, 0, ProcessClose($pids[0]))
;~ ConsoleWrite($pids[0] & @CRLF)
Else
;~ ConsoleWrite("No" & @CRLF)
Return SetError(0, 0, -1)
EndIf
EndFunc
;===============================================================================
;
; Function Name: _processPathExists($path)
; Description:: Informe si un processus correspondant au chemin du fichier existe
; Parameter(s): $path = Chemin du fichier
; Requirement(s): l'UDF de Ascend4nt's (inclue au début du fichier)
; Return Value(s): Succes -> True (un processus correspondant au CHEMIN du fichier existe)
; @extended = Le PID du processus (le plus elevé si il y'en a plusiseurs)
; Erreur -> False et si:
; Le fichier n'existe pas: @error = 1
; Le fichier existe mais aucun processus ne lui correspond: @error = 0
; Author(s): Matwachich
;
;===============================================================================
;
Func _processPathExists($path)
If Not FileExists($path) Then Return SetError(1, 0, False)
Local $fileName = StringTrimLeft($path, StringInStr($path, "\", 1, -1))
;~ ConsoleWrite($fileName & @CRLF)
Local $process = _processListPath($fileName)
;~ _ArraySort($process, 1, 0, 0, 1)
For $i = 1 To $process[0][0]
If $process[$i][0] = $path Then Return SetError(0, $process[$i][1], True)
Next
Return SetError(0, 0, False)
EndFunc
;===============================================================================
;
; Function Name: _processListPath($name = "")
; Description:: Exactement comme 'ProcessList' (standard) saufe qu'elle retourne les CHEMINS et les PID)
; Parameter(s): $name = (Optionel) Nom du processus à rechercher. si vide, recherche tous les processus
; Requirement(s): l'UDF de Ascend4nt's (inclue au début du fichier)
; Return Value(s): Succes -> Array 2D contenant les chemins et les pid
; ($array[0][0] = Nombre d'éléments trouvés
; $array[$i][0] = chemin du fichier
; $array[$i][1] = pid du processus)
; Erreur -> -1 et si:
; $name n'est pas un string: @error = -1
; impossible de construire la liste des processus: @error = 1
; Author(s): Matwachich
;
;===============================================================================
;
Func _processListPath($name = "")
If String($name) <> $name Then Return SetError(-1, 0, -1)
Local $list, $path
If $name = "" Then
$list = ProcessList()
Else
$list = ProcessList($name)
EndIf
Local $handle
If Not IsArray($list) Then Return SetError(1, 0, -1)
Local $new[$list[0][0]+1][2]
$new[0][0] = $list[0][0]
For $i = 1 To $list[0][0]
$handle = _ProcessOpen($list[$i][0], 0x0400)
$path = _ProcessGetPathname($handle)
If $path = -1 Then $path = $list[$i][0]
$new[$i][0] = $path
$new[$i][1] = $list[$i][1]
Next
Return $new
EndFunc