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

Signaler
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
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.

10 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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");
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Si tu as son HWND, récupère son ID avec GetWindowLong.

ciao...
BruNews, MVP VC++
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

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 ?.
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Oups faute d'ortho, c'est pas t'as mais ta*.Désolé.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
GWL_ID

ciao...
BruNews, MVP VC++
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

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.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Toutes le fenêtes child ont bien un ID. Quand elles sont créées avec CreateWindow, le paramètre hmenu correspond à cet ID
Messages postés
66
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
28 juin 2007

Salut merci à tout les trois, j'ai enfin réussis à faire ce que je voulais :).
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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.