Page 1 sur 1

[R] Problème de récupération de fenêtre à partir du Process

Posté : dim. 07 sept. 2008 07:12
par SagePourpre
Bonjour groupe !

J'essaie de récupérer la fenêtre d'un processus donné pour pouvoir réaliser certaines
opérations dessus (entre autre un winclose() (le processclose est trop brutal avec l'application que je veux fermer :S )


Bref, voilà le code

Code : Tout sélectionner

Func winfrompid($process)
    $process = ProcessExists($process)
    $winlist = WinList()
    For $i = 1 To $winlist[0][0]
        If WinGetProcess($winlist[$i][0]) = $process Then
            Return $winlist[$i][1]
            ExitLoop
        EndIf
    Next


EndFunc   ;==>winfrompid

J'ai crée le code à l'aide d'informations glanés ici et là.
Le problème est que, bien que la plupart du temps mes 4 applications se
ferme correctement, il arrive qu'une fenêtre soit oublié et même parfois cela
me fait apparaître la fenêtre me demandant si je désire mettre le système en veille.
J'en déduit que mon code doit avoir au moins une lacune ...

Re: [..] Problème de récupération de fenêtre à partir du Process

Posté : dim. 07 sept. 2008 10:16
par Tlem
N'oubliez pas que pour l'ouverture d'un topic c'est [..] (Deux points) et non [...]. :roll:

En ce qui concerne votre code, vous faites :

Code : Tout sélectionner

$process = ProcessExists($process)
or cette ligne ne vous avance à rien en l'occurrence, car elle modifie votre variable $process qui est sensée contenir le PID de l'application à fermer.
Sauf que si le process n'existe pas $process sera égal à zéro. :?
Vous pouvez utiliser ceci si vous déclaré $process byRef, ce qui vous permet de récupérer une variable en retour de fonction.
Exemple :

Code : Tout sélectionner

$a = 5
MsgBox(0,"","La variable $a est égale à " & $a & " avant la fonction")

Test($a)

MsgBox(0,"","La variable $a est égale à " & $a & " après la fonction")
Exit

Func Test(ByRef $a)  ;swap the contents of two variables
    $a = 10
EndFunc
Vous devriez plutôt faire une condition sur l'existence du process ...

Code : Tout sélectionner

If ProcessExists($process) Then ...
et renvoyer le résultat ou zéro si le process n'existe pas/plus.
Ensuite c'est dans l'appel de la fonction qu'il faut gérer les conditions ...

Re: [R] Problème de récupération de fenêtre à partir du Process

Posté : lun. 08 sept. 2008 09:26
par SagePourpre
Désolé pour le point manquant... Je ne recommencerai plus :(
Je vais faire un jour de jeûne pour que ça me rentre bien dans la tête.


Pour ce qui est de ta solution ... Ça semble être ça qui causait de drôle de réactions indésirables ( finalement, à bien y penser, ce n'étais pas tellement drôle ).


Yay !

J'ai beau tester ma fonction sans arrêt depuis 10 min... rien n'y fait, elle refuse de
planter à nouveau.

Merci :mrgreen: