[Func] _GetHwndFromPID | Handle à partir du Pid

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[Func] _GetHwndFromPID | Handle à partir du Pid

#1

Message par timmalos »

Voici une fonction qui retourne l'handle d'une fenêtre à partir du PID du process.

Code : Tout sélectionner

Func _GetHwndFromPID($PID)
    $hWnd = 0
    $stPID = DllStructCreate("int")
    Do
        $winlist2 = WinList()
        For $i = 1 To $winlist2[0][0]
            If $winlist2[$i][0] <> "" Then
                DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i][1], "ptr", DllStructGetPtr($stPID))
                If DllStructGetData($stPID, 1) = $PID Then
                    $hWnd = $winlist2[$i][1]
                    ExitLoop
                EndIf
            EndIf
        Next
        Sleep(100)
    Until $hWnd <> 0
    Return $hWnd
EndFunc ;==>_GetHwndFromPID
Avatar du membre
d3v1lm33
Niveau 2
Niveau 2
Messages : 28
Enregistré le : mer. 28 mai 2008 16:03
Status : Hors ligne

Re: [Func] _GetHwndFromPID | Handle à partir du Pid

#2

Message par d3v1lm33 »

Alors ce serait la fenetre "principale"? La première fenetre crée?
Venez ici poster les astuces que vous trouvez sur le web, nous les collectionnons !
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Func] _GetHwndFromPID | Handle à partir du Pid

#3

Message par timmalos »

Oui, et c'est egalement la fenetre du Thread principal si le programme a plusieurs threads.
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [Func] _GetHwndFromPID | Handle à partir du Pid

#4

Message par RL77LUC »

Merci, c'est très pratique pour mon projet actuel où j'aurais besoin d'injecter des DLLs dans des processus !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Func] _GetHwndFromPID | Handle à partir du Pid

#5

Message par mikell »

Une fonction de référence qui va permettre d'éviter bien des erreurs

Vous auriez pu l'appeler ProcessGetWin , puisque apparemment c'est le pendant exact de WinGetProcess :mrgreen:
WinGetProcess
Retrieves the Process ID (PID) associated with a window.
EDIT
Marrant, en cherchant bêtement ProcessGetWin sur le forum US je tombe sur ça
http://www.autoitscript.com/forum/topic ... _p__498047 :shock:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Dinosaure
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 06 oct. 2011 16:36
Status : Hors ligne

Re: [Func] _GetHwndFromPID | Handle à partir du Pid

#6

Message par Dinosaure »

Bonsoir, je cherchais une fonction permettant de lister les fenêtres attachées à un processus pour un script de gestion des fenêtres sous Windows.
Malheureusement, n'en ayant pas trouvé, j'ai dû me créer ma propre fonction ProcessGetWin (comme quoi, il semble manquer une fonction de ce nom ! ^^) pour le faire.
► Afficher le texte
Fonctionnement :
ProcessGetWin(Mode, "Processus;cherché", "Liste;Des;Fenêtres")
Par défaut ProcessGetWin(8, "", "") retourne un array contenant les fenêtres(+Handle) disponibles, et les processus(+PID) associés.
La recherche peut être rapidement affinée en utilisant par exemple ProcessGetWin(8, "explorer.exe;winamp") pour lister toutes les fenêtres attachées à des processus contenant ces mots, tout en ayant la possibilité d'en black-lister certaines pour ne pas les sélectionner.

Par-contre, cette fonction ne gère pas (encore) la recherche par PID, n'en ayant pas eu le besoin. Autrement, la gestion des White-/Black-Listes ne porte (pour le moment toujours) que sur les noms des fenêtres, il n'y a pas la possibilité de choisir les processus "tous sauf.." ni "portant exactement ce nom"...
Ouais, en gros, elle n'est pas finie, ok. :)
Elle existe, donc même si probablement incomplète, si vous en avez besoin, autant la partager !

D.
Modifié en dernier par Dinosaure le dim. 09 oct. 2011 12:40, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Func] _GetHwndFromPID | Handle à partir du Pid

#7

Message par mikell »

Code : Tout sélectionner

#include <Array.au3>
_ArrayDisplay (ProcessGetWin() )
sympa Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Dinosaure
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 06 oct. 2011 16:36
Status : Hors ligne

Re: [Func] _GetHwndFromPID | Handle à partir du Pid

#8

Message par Dinosaure »

En effet, j'ai oublié d'indiquer comment la visualiser :

Code : Tout sélectionner

#include <Array.au3>
Local $a = ProcessGetWin()
_ArrayDisplay($a)
Mea Culpa. :)

D.
Répondre