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

Résolu
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007 - 9 juin 2006 à 23:13
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur 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.

10 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
10 juin 2006 à 15:29
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");
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 juin 2006 à 23:30
Si tu as son HWND, récupère son ID avec GetWindowLong.

ciao...
BruNews, MVP VC++
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
9 juin 2006 à 23:35
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 ?.
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
9 juin 2006 à 23:35
Oups faute d'ortho, c'est pas t'as mais ta*.Désolé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 juin 2006 à 23:46
GWL_ID

ciao...
BruNews, MVP VC++
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
9 juin 2006 à 23:59
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 juin 2006 à 00:15
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++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
10 juin 2006 à 16:14
Toutes le fenêtes child ont bien un ID. Quand elles sont créées avec CreateWindow, le paramètre hmenu correspond à cet ID
0
krokro6 Messages postés 66 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 28 juin 2007
10 juin 2006 à 17:24
Salut merci à tout les trois, j'ai enfin réussis à faire ce que je voulais :).
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
10 juin 2006 à 17:31
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.
0
Rejoignez-nous