Page 1 sur 1

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

Posté : lun. 12 oct. 2009 14:10
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.

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

Posté : lun. 12 oct. 2009 17:56
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. ;)

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

Posté : mar. 13 oct. 2009 10:03
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.