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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#1

Message 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 ...
Modifié en dernier par SagePourpre le lun. 08 sept. 2008 09:26, modifié 2 fois.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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 ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#3

Message 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:
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Répondre