Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
Bonjour,

Je voudrait terminer un processus Windows qui rentre en conflit avec mon appli et le relancer ensuite.
J'ai regardé les fonctions d'API mais la fonction TerminateProcess utilise un n° d'identifiant et non le nom même du process. J'ai essayé de voir les fonctions API qui pourraient me fournir l'identifiant mais je ne trouve pas. Si quelqu'un a une idée, je suis toute ouï ^^

Contribution le : 10/06/2004 12:08
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
01/06/2004 17:15
Post(s): 21
Regarde ceci :
http://old.wdforge.org/modules/mydownloads/singlefile.php?cid=1&lid=71
Tu trouvera dans mon projet la fonction API FindWindowA
si mes souvenir sont bon...
cest
hwndWinamp sera le handle du processus
hwndWinamp est un entier = API("user32.dll","FindWindowA","Class","Nom de la fenetre")
Si le nom de la fenetre change alors met Null on travaillera que sur la class
ex :
hwndWinamp est un entier = API("user32.dll","FindWindowA","Winamp v1.x",Null)

Pour récupérer la class, la seule méthode que jai trouvé c'est d'utiliser une application de je sais pas qui :p que j'ai trouvé je ne sais comment !
=> Télécharger Listeur de fenetre 1.0

Contribution le : 10/06/2004 12:53
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
Je vais regarder de + pres a ton code ...
mais j'arrive déjà pas a lancer l'appli :(
Il lui manque le fichier WD553EXE.ddl a priori.
je te tiens o courrant...

Contribution le : 10/06/2004 13:24
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
j'ai l'ébauche d'une solution...
je viens de regarder dans la LST56 et il y a un exemple d'appli permettant de modifier la priorité d'un processus.
je vais donc me baser sur cet exemple pour killer se dernier ^^

Contribution le : 10/06/2004 14:07
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
sniff !!!
j'arrive point a m'en dépatouiller :(
j'ai utilisé l'exemple de la lst56 et j'ai remplacé l'appel a un changement de priorité par un appel a la fonction Terminateprocess... cela fonctionne sur le processus courrant mais pas sur un autre :(
sniiiif

Mon code :
SI API("Kernel32","TerminateProcess",hCurrentProcess, uExitCode)=0 ALORS
gsDerniereErreur="Impossible de Terminer le processus."+RC+"Code Erreur : "+API("kernel32","GetLastError")
res est une chaîne
Info(gsDerniereErreur)
RENVOYER Faux
FIN

si quelqu'un avait une id ...
^^

Contribution le : 11/06/2004 10:39
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Anonyme

-> Télécharger les DLL


Je te conseil ma méthode ;)

Contribution le : 11/06/2004 11:59
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
01/06/2004 17:15
Post(s): 21
Précision de ton code au niveau de :
hCurrentProcess,et uExitCode
hCurrentProcess handle fenetre ?
uExitCode quel valeur ?

Contribution le : 11/06/2004 12:02
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
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 !!!



Contribution le : 11/06/2004 13:32
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
En ce qui concerne ta méthode, j'ai laissé tombé car je ne cherche pas a manipuler un processus, juste a le terminer (et dieu que c'est compliqué). je ne voi pas comment je peut modifier ton code pour obtenir ce que je veut donc j'ai continué de me baser sur l'exemple de la lst56 qui se rapproche + de mon but. (tête de mule ? ^^)
Et j'ai réussi a le lancer tout ce qu'il me fallait c t le mettre dans le rep de Windev 5.5 (dans le rep programme, la ou se trouve la fameuse dll)
Il faut dire que j'ai les 4 versions d'installées sur mon poste, de la 5.5 à la 8 ^^
Je te dit pas le fouilli


Contribution le : 11/06/2004 13:39
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Utilisateur WDF
Inscrit:
09/06/2004 09:31
Post(s): 78
si je regarde ton code tu ne tue que le process courant en gros le process qui executer le terminateprocess

Tu peux combiner ça avec openprocess pour recuperer un handle sur un autre process

Sinon tu fais une recherche avec finidwindows sur la fenetre du process et derriere tufais un sendmessage en envoyant WM_CLOSE ou WM_DESTROY

Contribution le : 14/06/2004 11:16
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
ben pourtant, si. L'appli exemple stocke les handle des process dans un tableau...
ainsi la fct nHandleProcessParApplication(sNomApplication) récupère le résultat de la fct nHandleProcessParID(nIdProcess) suivante :

// Variables locales
nHandleProcess est un entier sur 4 octets

// Récupération d'un handle sur ce processus
nHandleProcess = API("Kernel32","OpenProcess",0x400+0x0010+0x0200,0,nIdProcess)

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

L'erreur renvoyée est "Acces refusé". Je ne sais pas comment palier a cela, sachant que je suis admin sur mon poste, donc que j'ai tous les droits. Y a t il qu'elle que chose a paramètrer pour que je puisse avancer ?

Contribution le : 14/06/2004 11:38
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Utilisateur WDF
Inscrit:
09/06/2004 09:31
Post(s): 78
se serait pa OpenProcessA ??

Contribution le : 14/06/2004 12:00
Créer un fichier PDF de la contribution Imprimer


Re: Terminer un processus Windows
Stagiaire WDF
Inscrit:
03/03/2004 11:09
Post(s): 39
non,non la fonction API est bien OpenProcess ...

Contribution le : 14/06/2004 14:09
_________________
Cordialement.
-----------
Peggy ......
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2