Page 1 sur 1

[Func] _GetHwndFromPID | Handle à partir du Pid

Posté : jeu. 17 juin 2010 09:08
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

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

Posté : ven. 02 juil. 2010 11:27
par d3v1lm33
Alors ce serait la fenetre "principale"? La première fenetre crée?

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

Posté : ven. 02 juil. 2010 12:36
par timmalos
Oui, et c'est egalement la fenetre du Thread principal si le programme a plusieurs threads.

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

Posté : mer. 07 sept. 2011 14:12
par RL77LUC
Merci, c'est très pratique pour mon projet actuel où j'aurais besoin d'injecter des DLLs dans des processus !

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

Posté : sam. 10 sept. 2011 16:06
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:

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

Posté : jeu. 06 oct. 2011 20:00
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.

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

Posté : jeu. 06 oct. 2011 22:21
par mikell

Code : Tout sélectionner

#include <Array.au3>
_ArrayDisplay (ProcessGetWin() )
sympa Image

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

Posté : dim. 09 oct. 2011 12:39
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.