[R] Connaître le Handle à partir d'un process

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

[R] Connaître le Handle à partir d'un process

#1

Message par eric »

Bonjour,

En lançant un programme par la fonction RUN on obtient le PID du process.

J'aimerais ensuite pouvoir fermer ce programme mais je préfèrerais le faire avec Winclose qu'avec Processclose qui me parait un peu trop violent.

Seulement Winclose n'accepte visiblement pas les PID mais plutôt les Handle (j'aimerais éviter de passer par le nom de la fenêtre, ce nom peut varier d'un poste à l'autre).

Et il possible de récupérer le Handle d'un programme lancé avec RUN ou de transormer un PID en Handle.

Merci de votre aide.
Modifié en dernier par eric le mar. 13 oct. 2009 10:11, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Connaître le Handle à partir d'un process

#2

Message par Tlem »

Vous pouvez essayer ceci :
1 - Récupérer la liste des fenêtres avec Winlist.
2 - Utiliser le tableau pour en extraire grâce à une boucle le titre des fenêtres afin de comparer grâce à WinGetProcess le PID de votre application et celui renvoyé par le WinGetProcess. ;)
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é".
eric
Niveau 5
Niveau 5
Messages : 177
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: [..] Connaître le Handle à partir d'un process

#3

Message par eric »

Bonjour Tlem et merci pour cette solution.

Je pensais qu'on pouvais faire plus court mais bon.

En gros cela donne quelque chose comme ceci.

Code : Tout sélectionner

$pidprogramme = run ("notepad.exe","",@SW_MAXIMIZE) ; lancer le programme

sleep(2000)

$listeprog = WinList() ; lister tous les programmes ouverts

For $i = 1 to $listeprog[0][0]

    $verifvisible = WinGetState ($listeprog[$i][0]) ; vérifier l'état des fenêtres

    Select

    case BitAND ($verifvisible,2) And $listeprog[$i][0] <> "" ; ne pas tenir compte des fenêtres invisibles et sans nom

$pid = WinGetProcess($listeprog[$i][0]) ; obtenir le PID des programmes


if $pid = $pidprogramme Then ; comparer le PID des programme avec celui du programme et si PID trouvé fermer le programme

WinClose($listeprog[$i][1])

    EndIf

    EndSelect

Next
Par contre il faut respecter le fait de ne pas tenir compte des fenêtres invisibles et sans nom puisque il y a plusieurs fenêtres qui possèdent le même PID.
Répondre