Récupérer l'id d'un controle d'un autre programme. [Résolu]

Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
28 juin 2007
- - Dernière réponse : racpp
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
- 10 juin 2006 à 17:31
Salut à tous, j'aurais besoin d'aide pour récupérer l'id d'un controle
d'un autre programme car je n'y arrive vraiment pas, même avec le spy ++, j'arrive à trouver la fenêtre mais ca
n'affiche pas son id.


Voila si qqun pouvait m'aider.Merci.
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
3
Merci
Salut,
krokro6 >> Certains controles peuvent ne pas avoir d'ID car ils sont créés pendant l'exécution du programme. Pour envoyer du texte à un controle, tu peux utiliser directement son HWND. Pour récupérer ce HWND, je te conseille d'utiliser FindWindowEx():
// Pour retrouver le premier EDIT contenu dans la fenêtre:
HWND conrole=FindWindowEx(hwndparent,0,"EDIT",0);
// Pour retrouver le suivant:
controle=FindWindowEx(hwndparent,controle,"EDIT",0);
Tu peux répéter cette dernière ligne jusqu'à trouver le HWND du controle voulu. Il est préférable d'utiliser une boucle do while() si le nombre d'EDITs est grand.
Pour envoyer du texte au controle, il suffit de faire:
SetWindowText(controle,'Bonjour");

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de racpp
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
Si tu as son HWND, récupère son ID avec GetWindowLong.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
28 juin 2007
0
Merci
Merci de t'as réponse rapide, cépendant, je n'ai pas très bien compris :

hwnd = FindWindow(NULL,"Mon Programme");
GetWindowLong(hwnd, et ici je dois mettre quoi ?);

Voila dans GetWindowLong(hwnd,int) à la place du int, c'est quoi que je dois mettre ?.
Commenter la réponse de krokro6
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
28 juin 2007
0
Merci
Oups faute d'ortho, c'est pas t'as mais ta*.Désolé.
Commenter la réponse de krokro6
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
GWL_ID

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
28 juin 2007
0
Merci
Hem, ne comprends vraiment pas, comment avec :
hwnd = FindWindow(NULL,"Mon Programme");
GetWindowLong(hwnd,GWL_ID);
On va dire que sur un programme j'ai un Edit Box, sur l'edit box j'ai envie d'envoyer un texte, j'y arrive mais qu'avec les programmes ou je connais l'id des controles(avec resource hacker), mais sur les programmes où resource hacker n'affiche pas le dialogue donc pas les controles, je n'arrive pas à récupérer l'id de l'edit box.
Dans ton code, GWL_ID, c'est quoi comme controle ?.

Merci quand même de ton aide.
Commenter la réponse de krokro6
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
La question est bien "récupérer l'ID d'un controle"...

SI et seulement SI tu as réussis à avoir le hwnd du contrile (par enum, GetDlgItem ou autre), alors:
long ctrlID = GetWindowLong(hctrl, GWL_ID);

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
Toutes le fenêtes child ont bien un ID. Quand elles sont créées avec CreateWindow, le paramètre hmenu correspond à cet ID
Commenter la réponse de vecchio56
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Dernière intervention
28 juin 2007
0
Merci
Salut merci à tout les trois, j'ai enfin réussis à faire ce que je voulais :).
Commenter la réponse de krokro6
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
0
Merci
vecchio56 >> Oui, CreateWindow() permet bien d'affecter un ID à un controle. Mais c'est facultatif. Dans beaucoup d'application ce paramètre n'est pas utilisé car le HWND retourné par la fonction suffit pour gérer tout ce qui touche à ce controle. Cet ID sera égal à 0. Ce qu'on peut traduire par "pas de ID". Personnellement, je n'affecte un ID à un controle qu'en cas de besoin.
Commenter la réponse de racpp

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.