Rechercher une fenetre par sa classe et une partie de son titre

Soyez le premier à donner votre avis sur cette source.

Vue 4 718 fois - Téléchargée 418 fois

Description

Cette source vient en réponse au message
http://www.delphifr.com/infomsg_HANDLE-FENETRE-PRECISE_1081910.aspx

Il est possible que la recherche d'une instance de fenêtre par sa classe ne fonctionne pas si plusieurs fenêtres ont la même classe, ou si il y a plusieurs instances de lancées.

Les intérêts de cette source sont:
- l'utilisation de FindWindowEx
- la lecture du titre d'une fenêtre par GetWindowText
- l'envoi/réception de message (par PostMessage)

Remarque : Si on lance l'exécution depuis Delphi, on retrouve aussi l'instance en design dans l'IDE !

Conclusion :


Voici une source assez simpliste mais qui permet de comprendre facilement (je l'espère) le principe d'une recherche de fenêtre (au TopLevel).
Si vous voulez que je pousse plus la source, dites le moi (rechercher dans les fenêtres enfants, ...)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
20
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
8 octobre 2019

Bonjour, suites à tes propos dans la rubrique "Conclusions" :
Oui, il serait intéressant d'approfondir tout cela... Je suis actuellement confronté à ce genre de problématique dans le développement d'utilitaires orientés "gestion des machines sur le réseau".
J'ai, dans mon application, une petite fenêtre que nous appellerons "tableau de contrôle" où sont créés, dynamiquement, des boutons permettant d'activer, de fermer, d'actualiser, etc..., des fenêtres dynamiques correspondant chacune à une machine différente... Comment faire de manière simple, pour que chaque bouton soit facilement référençable vers sa fenêtre correspondante. Plus compliqué encore si l'on sait qu'à partir de chacune des machines, donc des fenêtres dynamiques, on peut encore lancer des tâches spécifiques créant chacune sa fenêtre de gestion et d'affichage, tout cela en multi-threading pour simplifier encore, bien entendu.
Actuellement je fais tout cela à partir de tableaux dynamiques, des "handle" et des "tag" mais c'est assez compliqué et je pense en avoir encore pour un petit moment avant d'avoir réussi à résoudre tous les difficultés rencontrées.
Au plaisir donc de pouvoir te lire prochainement sur ce thème si tu as de bonnes idées, merci d'avance, cordialement, Patrice
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
merci yannfrance
toutes les infos propres a la manipulation de windows se trouvent dans ... l'aide de la sdk de windows (dans le menu "aide->windows SDK" sur mon D7).
mais une partie est déjà encapsulée dans des fonctions delphi ... donc dans l'aide de delphi.

sinon, MSDN reste une valeur sure, mais un peu galère pour y faire des recherches des fois.
Messages postés
48
Date d'inscription
mardi 18 septembre 2007
Statut
Membre
Dernière intervention
1 décembre 2010

Merci beaucoup, cette source est une mine d'or.
Beaucoup disaient qu'il était impossible de rechercher un handle avec une seul partie de text de la barre de titre.
Tres content, merci beaucoup...
Ou peut t'on trouver les informations necessaires pour réaliser des sources comme celui-ci ?
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
merci pour le commentaire.

2 remarques :
- "Pour contourner cela, il suffit de lui affecter un titre au moment du démarrage de l'application": c'est fait, mais la recherche par classe me retourne obligatoirement l'instance de l'IDE
- J'ai peut être abusé de self, mais je trouve ca plus confortable quand on utilise des propriétés d'objets dont on ne sait pas si elles appartiennent a self ou si c'est une variable locale

Désolé Japee, je te ferai une version en assembleur prochainement ;)
peut-on savoir dans quelles versions de Delphi on été ajoutées les fonctions?
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
27
"Si on lance l'exécution depuis Delphi, on retrouve aussi l'instance en design dans l'IDE !"
Pour contourner cela, il suffit de lui affecter un titre au moment du démarrage de l'application, dans le OnCreate de la fiche principale, par exemple. Evidemment, si tu démarres une autre instance de l'exécutable, ça ne va pas résoudre le problème.

NB : pas besoin de mettre des Self un peu partout pour désigner l'instance actuelle de la fiche (Self.Handle, Self.Caption, etc).

J'ai bien aimé l'utilisation de IfThen pas souvent rencontrée sur ce site. Mais je crois me souvenir qu'elle n'est disponible que depuis delphi 6. Pauvre Japee, il va devoir adapter le code... :)

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.