begin process at 2012 02 14 21:04:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

Shell

 > 

Handle de fenêtre et process ID...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Handle de fenêtre et process ID...

lundi 12 décembre 2005 à 09:47:26 | Handle de fenêtre et process ID...

cyrilpradel

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> + " " + <Arguments>, <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> + " " + <Arguments>, <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
lundi 12 décembre 2005 à 11:16:53 | Re : Handle de fenêtre et process ID...

BruNews

Administrateur CodeS-SourceS
OpenProcess()

ciao...
[ Lien ]
BruNews, MVP VC++
lundi 12 décembre 2005 à 11:38:24 | Re : Handle de fenêtre et process ID...

cyrilpradel

Merci !
Après avoir déclaré l'API OpenProcess, voilà donc ce que j'ai fais :

'on lance l'appli
hApp = Shell(<monExe> + " " + <Arguments>, <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
lundi 12 décembre 2005 à 11:52:48 | Re : Handle de fenêtre et process ID...

cyrilpradel

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
lundi 12 décembre 2005 à 11:53:06 | Re : Handle de fenêtre et process ID...

BruNews

Administrateur CodeS-SourceS
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...
[ Lien ]
BruNews, MVP VC++
lundi 12 décembre 2005 à 11:56:24 | Re : Handle de fenêtre et process ID...

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
EnumWindows
et regarde pendant énumération (dans l'enumProc) la 1ere qui correspond au processId.

ciao...
[ Lien ]
BruNews, MVP VC++
lundi 12 décembre 2005 à 14:48:13 | Re : Handle de fenêtre et process ID...

cyrilpradel

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


Cette discussion est classée dans : process, handle, id, fenêtre, hfen


Répondre à ce message

Sujets en rapport avec ce message

Recherche d'handle [ par SiWolf ] Salut à toutes et à tous,est-ce que quelqu'un sait comment récupérer l'handle de n'importe quel contrôle se trouvant sur n'importe quel fenêtre. Parce Connaitre la fenêtre active [ par appstmd ] j'utilise la fonction GetForegroundWindow pour connaitre la fenêtre active, mais j'obtient le handle de la fenêtre mère et non celle du contrôle actif touver une fenêtre et la fermer [ par Joul ] Bonjour,Je cherche à touver une fenêtre et à la fermer. j'essai d'utiliser FindWindow pour trouver la fenêtre(il s'agit d'Acrobat Distiller):Handle_Di URGENT : Nom ou handle de l'application (fenêtre) active du bureau. [ par Philippe ] Bonjour,Je souhaiterais savoir s'il est possible de récupérer le nom (ou le handle) de la fenêtre actuellement active du bureau.Merci de votre aide. Handle hWnd - descripteur Fenêtre [ par vbost ] Je trouve pratique d'utiliser les descripteurs de fenêtres afin de pouvoir naviguer d'une fenêtre à l'autre (comme de la fenêtre appellée vers la fenê Connaitre le handle du 2e form dans le zorder [ par z0nez ] Bonjour,je ne sais pas si c'est moi qui est coincé mais je ne parviens pas à trouver le handle du 2e form dans le zorder soit la fenêtre qui juste der récupérer un handle [ par t26 ] bonjour,Je débute dans l'utilisation des api dans vb6, et je m'aperçois que la plupart du temps, les apis demandent le handle de la fenêtre, ou du con VB6 : pouvoir activer une fenêtres en fonction de son Process Id (ou autrement ??) [ par flegros ] Bonjour,J'ai trouvé sur vbfrance comment récupérer le process Id d'une fenêtre notepad.exe (par exemple) ....Comment faire pour activer ce process (le Mettre une fenêtre active au 1er plan [ par JMO ] Bonjour à tous....En VBS, j'arrive à énumérer les fenêtres et les ID associées.Mais comment mettre une application au 1er plan.For Handle, Control ID, etc... Est-ce que quelqu'un peut être clair? [ par midiennemi ] Bonjour,Depuis quelques jours, je recherche la solution à mon problème.Vous allez donc me dire "Mais quel est-il ce problème?" donc je vous répondrais


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,218 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales