Handle d'une fenetre sans passer par FindWindow

Ulala2 Messages postés 86 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 10 décembre 2006 - 7 sept. 2006 à 17:08
Ulala2 Messages postés 86 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 10 décembre 2006 - 8 sept. 2006 à 10:24
Bonjour,

C'est super bête mais là je n'y arrive vraiement pas.

Je cherche à récupérer le handle d'une fenêtre que je lance par shell ou shellexecute (je n'ai pas de préférence sur la manière de lancer le .exe, je veux juste récupérer son handle)

Par l'API FindWindow, ca fonctionne très bien, mais je veux être certain que j'obtiens bien le handle de la fenêtre que je viens de lancer, et pas le handle d'une autre si l'utilisateur à lancer plusieurs fois l'application.

J'ai essayé plusieurs fonctions mais la plupart me donnent le handle de l'application (hInstance) et pas Hwnd (handle de la fenetre).

4 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
7 sept. 2006 à 17:35
"...handle d'une fenêtre que je lance par shell ou shellexecute..."
OK on comprend ce que tu veux mais la formulation est totalement erronée, les mots sont importants.
Ce qu'on lance c'est un processus mais absolument pas une fenêtre.

Dim pidnew AsLong
pid = Shell(...)
hwnd = FindWindow(...)
GetWindowThreadProcessId(hwnd, pidnew)
if pid = pidnew Then CestLaBonne

ciao...
BruNews, MVP VC++
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
7 sept. 2006 à 20:36
Salut, déjà, tu peux interdire le lancement multiple d'une appli. Ca devrait te faciliter les choses.
Cherche sur le site avec des mots clés comme "previnstance" et "mutex".
0
Ulala2 Messages postés 86 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 10 décembre 2006
7 sept. 2006 à 21:36
Bonjour,

en ce qui concerne previnstance, l'utilisateur a besoin de lancer 2 ou 3 de cette application, car c'est un émulateur de terminal.

en ce qui concerne le mutex, l'application est installée sur 4 serveurs TSE, donc pas possible, et comme le point précédent, ce n'est pas ce que je recherche.


Brunews, ta méthode fonctionne très bien, j'ai adapté une source avec une boucle. Mais ce que je ne comprend pas, c'est qu'en lancant calc.exe (même 10 fois), aucun pb, la valeur retournée est la même que l'API FinWindow, mais avec cette application, les valeurs sont différentes.
0
Ulala2 Messages postés 86 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 10 décembre 2006
8 sept. 2006 à 10:24
Bonjour,

En fait j'ai trouvé pourquoi.

quand je lance le .exe, FindWindow me renvoie directement la bonne valeur, alors qu'avec cet algo :

GetWindowThreadProcessId(hwnd, pidnew)
if pid = pidnew Then CestLaBonne

il y a 4 processus qui ont le même WindowText mais qui donnent le même pidnew.
0