PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → killer un processus
killer un processus
Débuté par Eric DETREZ, 12 oct. 2006 19:08 - 2 réponses
Posté le 12 octobre 2006 - 19:08
Comment faire pour killer un processus dont on connait le nom ?

Merci d'avance
Posté le 12 octobre 2006 - 19:33
exetermine()

Eric DETREZ a émis l'idée suivante :

Comment faire pour killer un processus dont on connait le nom ?

Merci d'avance


--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Posté le 12 octobre 2006 - 19:34
Bonjour, y-a peut-être plus simple mais çà fonctionne chez moi sur XPpro-SP2
(j'suis admin...)
tiens moi au courrant
A+

//***************************
constante
kernel32_dll = "kernel32.dll"
TH32CS_SNAPALL = 0x0000001F // Includes all processes and threads in
the system,
// plus
the heaps and modules of the process specified
// in
th32ProcessID. Equivalent to specifying the
//
TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS,
// and
TH32CS_SNAPTHREAD values.

end

//***************************
_PROCESSENTRY32 est une structure
dwSize est un entier
cntUsage est un entier // This member is no longer used and is always
set to zero.
th32ProcessID est un entier // Process identifier.
th32DefaultHeapID est un entier sans signe // This member is no longer used
and is always set to zero.
th32ModuleID est un entier // This member is no longer used and is
always set to zero.
cntThreads est un entier // Number of execution threads started by the
process.
th32ParentProcessID est un entier // Process identifier of the process
that created this process (its parent process).
pcPriClassBase est un entier // Base priority of any threads created by
this process.
dwFlags est un entier // This member is no longer used and is always
set to zero.
szExeFile est une chaîne fixe sur 260 // Pointer to a null-terminated
string that specifies the name of the executable file for the process.
END



//***************************
PROCEDURE KillProcesses(pProcessesName)
RetApi est un booléen
PID, hProcesses sont des entiers
ProcessesName, ProcessesListe, Ligne sont des chaînes
ProcessesName = Majuscule(SansEspace(pProcessesName))

ProcessesListe = EnumProcesses()
IF ProcessesListe = "" THEN RENVOYER -2 // EnumProcesses Fail

Ligne = ExtraitChaîne(ProcessesListe,rangPremier,CRLF)
WHILE Ligne <> EOT
IF Majuscule(SansEspace(ExtraitChaîne(Ligne,1))) = ProcessesName THEN
SORTIR
Ligne = ExtraitChaîne(ProcessesListe,rangSuivant,CRLF)
END
IF Ligne = EOT THEN RENVOYER -1 // Processes Not Found

PID = Val(ExtraitChaîne(Ligne,2))

hProcesses = API(kernel32_dll, "OpenProcess", 0x00010001, True, PID)
IF hProcesses <> - 1 THEN
RetApi = API( kernel32_dll, "TerminateProcess", hProcesses, 0)
API(kernel32_dll, "CloseHandle", hProcesses)
IF RetApi THEN RENVOYER 0 ELSE RENVOYER -4
END
RENVOYER -3


//***************************
// Renvoie si tout va bien une chaine comportant n lignes séparateur CRLF
// Chaque ligne est composée de champs séparés par TAB
// 1° Nom du processus
// 2° PID du processus
// 3° PID du processus parent
// 4° Nombre de thread lancé par le processus
//
// Permet de faire un tableau type celui du fameux CTRL+ALT+DEL
"Gestionnaire des tâches"
// Remarque : le premier processus portant le nom de "[System Process]" avec
PID=0
// semble etre identifié comme les "Processus inactif du système"
//
// voir les pages
//
http://msdn.microsoft.com/library/default.asp…
//
http://msdn.microsoft.com/library/default.asp…
//
http://msdn.microsoft.com/library/default.asp…
//
http://msdn.microsoft.com/library/default.asp…
//
FUNCTION EnumProcesses()

retAPI est un entier sans signe = 0
pHANDLE est un entier = 0
lppe est une _PROCESSENTRY32
ProcessesList est une chaîne = ""

pHANDLE = API( kernel32_dll, "CreateToolhelp32Snapshot", TH32CS_SNAPALL,
0x0)
IF pHANDLE <> -1 THEN
lppe:dwSize = 296 // Taille de la structure lppe
lppe:szExeFile = ""
IF API(kernel32_dll, "Process32First", pHANDLE, &lppe) THEN
ProcessesList = lppe:szExeFile[[1 A
Position(lppe:szExeFile,Caract(0x0))-1]] + TAB +...
NumériqueVersChaine(lppe:th32ProcessID) + TAB +...
NumériqueVersChaine(lppe:th32ParentProcessID) + TAB +...
NumériqueVersChaine(lppe:cntThreads)+CRLF
lppe:szExeFile = ""
WHILE API(kernel32_dll, "Process32Next", pHANDLE, &lppe)
ProcessesList += lppe:szExeFile[[1 A
Position(lppe:szExeFile,Caract(0x0))-1]] + TAB +...
NumériqueVersChaine(lppe:th32ProcessID) + TAB +...
NumériqueVersChaine(lppe:th32ParentProcessID) + TAB +...
NumériqueVersChaine(lppe:cntThreads)+CRLF
lppe:szExeFile = ""
END
END
API(kernel32_dll, "CloseHandle", pHANDLE)
END
RENVOYER ProcessesList



"Eric DETREZ" <eric.detrez@ch-aubenas.fr> a écrit dans le message de news:
452e598c$1@news.pcsoft.fr...


Comment faire pour killer un processus dont on connait le nom ?

Merci d'avance