Handle de fenêtre et process ID... [Résolu]

cyrilpradel 12 Messages postés mercredi 19 juin 2002Date d'inscription 12 décembre 2005 Dernière intervention - 12 déc. 2005 à 09:47 - Dernière réponse : cyrilpradel 12 Messages postés mercredi 19 juin 2002Date d'inscription 12 décembre 2005 Dernière intervention
- 12 déc. 2005 à 14:48
Salut tout le monde !

Via
la fonction Shell, je lance une application (la fonction Shell me
retourne le process Id de l'appli lancée mais pas le handle)
Avant, je m'appuyais sur la classe de fenêtre pour la retrouver :

'on lance l'appli
hApp = Shell(<monExe> + " " + , <mode d'ouverture>)
hFen = 0
'Recherche du handle de la fenêtre (hFen) selon sa classe (zClassFen) jusqu'à la fin du timer ou jusqu'à ce qu'on trouve
Do While hFen = 0 And (Timer < lTimer)
DoEvents
hFen = GetWinHandle(zClassFen)
Loop

PS : Je ne détaille pas la fonction GetWinHandle mais j'utilisais les API GetWindow et GetClasseName

Cela fonctionnait très bien à partir du moment où on connaissait la classe de fenêtre.
Aujourd'hui, je cherche à récupérer le handle d'une appli selon son process Id.
On aurait donc :

'on lance l'appli
hApp = Shell(<monExe> + " " + , <mode d'ouverture>)
hFen = 0
'Recherche du handle de la fenêtre (hFen) selon sa classe (zClassFen) jusqu'à la fin du timer ou jusqu'à ce qu'on trouve
Do While hFen = 0 And (Timer < lTimer)
DoEvents
hFen = GetWinHandlePid(hApp)
Loop

Et c'est là que je sèche !
Si vous avez des idées, n'hésitez pas à me contacter.

Merci d'avance !

Cyril
Afficher la suite 

6 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 12 déc. 2005 à 11:56
3
Merci
EnumWindows
et regarde pendant énumération (dans l'enumProc) la 1ere qui correspond au processId.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 12 déc. 2005 à 11:16
0
Merci
OpenProcess()

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
cyrilpradel 12 Messages postés mercredi 19 juin 2002Date d'inscription 12 décembre 2005 Dernière intervention - 12 déc. 2005 à 11:38
0
Merci
Merci !
Après avoir déclaré l'API OpenProcess, voilà donc ce que j'ai fais :

'on lance l'appli
hApp = Shell(<monExe> + " " + , <mode d'ouverture>)
hFen = 0
'Recherche du handle de la fenêtre (hFen) selon le pID
hFen = OpenProcess(1, False, hApp)

Hélàs, le retour dans hFen ne correspond pas du tout au handle de la fenêtre à rechercher...
Si vous avez d'autres idées...

Cyril
cyrilpradel 12 Messages postés mercredi 19 juin 2002Date d'inscription 12 décembre 2005 Dernière intervention - 12 déc. 2005 à 11:52
0
Merci
Je tiens à préciser que ce n'est pas le handle du processus que je cherche à récupérer en fonction du process ID mais le handle de la fenêtre lancée.

Cyril
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 12 déc. 2005 à 11:53
0
Merci
Tu demandes handle d'une appli (donc le prog) et ensuite tu dis que le handle ne correspond pas à une fenêtre, bien pour la cohérence.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
cyrilpradel 12 Messages postés mercredi 19 juin 2002Date d'inscription 12 décembre 2005 Dernière intervention - 12 déc. 2005 à 14:48
0
Merci
Voici donc le code exact :

Private Declare Function GetWindowThreadProcessId Lib "USER32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long


Private Declare Function GetParent Lib "USER32" (ByVal hwnd As Long) As Long


Private Declare Function GetWindow Lib "USER32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long


Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA"
(ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long


Private Const GW_HWNDNEXT = 2

-------------------------------------------------------------------

Public Function ProcIDFromWnd(ByVal hwnd As Long) As Long


'Renvoie l'id d'un processus à partir d'un handle de fenêtre


Dim idproc As Long


GetWindowThreadProcessId hwnd, idproc


ProcIDFromWnd = idproc


End Function

--------------------------------------------------------------------



Public Function GetWindowHandle (hInstance As Long) As Long





'Renvoie un handle de fenêtre à partir d'un id de processus


Dim tempHwnd As Long


tempHwnd = FindWindow(vbEmpty, vbEmpty)


Do Until tempHwnd = 0


If GetParent(tempHwnd) = 0 Then


If hInstance = ProcIDFromWnd(tempHwnd) Then


GetWindowHandle = tempHwnd


Exit Do


End If


End If


tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT)


Loop


End Function




Et pour l'appeler :

Dim id As Long


id = Shell("notepad.exe")


MsgBox GetWindowHandle(id)

En espérant que ça pourra aider d'autres personnes,

A+

Cyril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.