Re: Terminer un processus Windows

Posté par Peggy le 11/6/2004 13:32:11
L'appli se présente comme une fenetre ou tu peut appliquer le changement de priorité du processus en sélectionnant celui-ci dans une combo.
j'ai modifié la fct qui change la priorité du process afin qu'elle le KILL.

hCurrentProcess est récupéré a l'aide de la fonction suivante :

PROCEDURE nHandleProcessParApplication(sNomApplication)

// Variables locales
nIndice est un entier // Indice de parcours

// Réinitialisation du système de gestion des erreurs
ReinitialiseErreur()

// Parcours de la liste des process
POUR nIndice = 1 A (gnNbProcess)
// On compare le nom du process avec le nom de l'application recherchée
SI sNomApplication ~= sNomProcess(gsTableauProcess[nIndice]) ALORS
// On renvoie le handle du process
RENVOYER nHandleProcessParID(gsTableauProcess[nIndice])
FIN
FIN

// Par défaut, le process n'est pas trouvé
RENVOYER 0

Où sNomApplication est le nom du processus sélectionné dans la combo(ici l'appli WDAPI.exe que je lance comme test)

Voici Ma fonction :
PROCEDURE ChangerPriorite(nPriorite,nHandleProcess=0)

// Variables locales
hCurrentProcess est un entier sur 4 octets // Handle du processus dont on veut modifier la priorité

// Réinitialisation du système de gestion des erreurs
gsDerniereErreur = ""

// Sous Windows 95, 98 et ME, certaines constantes ne sont pas disponibles
SI nPriorite=cPrioriteDessousNormale OU nPriorite=cPrioriteDessusNormale ALORS
// On affecte à "Normal" sous 95, 98 et ME
SI SysVersionWindows()~="95" OU SysVersionWindows()~="98" OU SysVersionWindows()~="ME" ALORS
nPriorite = cPrioriteNormale
FIN
FIN

//Récupère le handle du process
SI nHandleProcess= 0 ALORS
hCurrentProcess = API("Kernel32","GetCurrentProcess")
SINON
hCurrentProcess = nHandleProcess
FIN
// Modification effective de la priorité
//SI API("Kernel32","SetPriorityClass",hCurrentProcess, nPriorite)=0 alors
// info("Impossible de modifier la priorité."+RC+"Code Erreur : "+APi("kernel32","GetLastError"))
// RENVOYER Faux
//FIN
uExitCode est un entier sans signe=4

// Fin du processus
SI API("Kernel32","TerminateProcess",hCurrentProcess, uExitCode)=0 ALORS
gsDerniereErreur="Impossible de Terminer le processus."+RC+"Code Erreur : "+API("kernel32","GetLastError")
Info(gsDerniereErreur)
Info(ErreurApi(API("kernel32","GetLastError")))
RENVOYER Faux
FIN

RENVOYER Vrai


Voili voilou.
Comme tu peux le voir la variable UExitCode a 4 en valeur.
et l'erreur retourné a comme code 5.
J'ai trouvé une fonction permettant de formater le texte correspondant au type de l'erreur sur le site http://centrewd.free.fr/
Mais le texte généré est "L'opération est réussie" :(
snifff !!!



Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=12&topic_id=1021&post_id=4198