Handle d'une fenetre sans passer par FindWindow

Signaler
Messages postés
86
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
10 décembre 2006
-
Messages postés
86
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
10 décembre 2006
-
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

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
"...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++
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

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".
Messages postés
86
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
10 décembre 2006

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.
Messages postés
86
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
10 décembre 2006

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.