Recevoir texte d'une autre fenètre

ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 - 7 juin 2005 à 15:55
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 17 juin 2005 à 16:03
Bonjour à tous,

Voici mon problème : J'ai fait un programme et à un moment il en lance un autrequi ouvre une fenètre.

J'aimerai pouvoir récupérer le texte de l'editbox de la nouvelle fenètre, et le récupérer à chaque fois qu'elle est à nouveau modifiée...

PS: j'ai son handle....(travaille avec Dev cpp)

Merci d'avance....

28 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
7 juin 2005 à 16:11
Pour avoir le contenu d'un edit, c'est GetWindowText, et pour savoir quand elle change, tu as la notification EN_CHANGE. Le problème c'est que c'est l'application qui contient l'edit qui va la recevoir. Donc quand le programme qui contient l'EDIT recoit la notification EN_CHANGE, le programme envoie un message (#define EN_MYCHANGE (WM_USER + 1) par exemple) au premier programme. Quand le premier programme recoit EN_MYCHANGE, ca veut dire que le texte a changé, tu peux alors faire le GetWindowText sur l'edit
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
7 juin 2005 à 16:45
D'accord mais 2 problèmes s'offrent à moi :

1) Le 2eme programme (qui contient l'edit) n'est pas de ma création, donc je ne peux le modifier !!!! (je peux pas mettre #define EN_MYCHANGE (WM_USER + 1) )

2) Je n'ai pas le "nom" de l'edit juste je sais qu'il y en a qu'un dans la fenètre (faire une boucle qui puisse le trouver puisque si je le trouve c'est le bon ?) ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 juin 2005 à 16:53
Injecte une dll par SetWindowsHookEx qui sous classera l'edit et discutera avec le prog lanceur.

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
7 juin 2005 à 16:55
Je pensais que tu avais le HWND de l'edit. Tu peux utiliser EnumChildWindows pour le trouver, et tester le nom de classe jusqu'a ce que tu ais "EDIT".
Si tu ne peux pas modifier le deuxième programme, ca va être compliqué: sous XP tu n'a pas le droit de sous classer une fenêtre d'un autre process. Pour le moment je vois pas comment faire.
0

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

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
7 juin 2005 à 16:55
euh bon j'ai rien dit
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
7 juin 2005 à 17:00
Merci pour tous ces renseignements je vais voir !!!!
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
7 juin 2005 à 17:13
Désolé d'une question si bète, mais comment j'utilise EnumChildWindows(HWND,ENUMWINDOWSPROC,LPARAM); ???

En tout cas merci de perdre votre précieux temps pour moi...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 juin 2005 à 17:39
Il faut que tu crée une fonction que tu passes en paramètre à EnumChildWindows

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)

{

...

}

Tu recevra les fenêtres "candidates" dans le paramètre hwnd
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
8 juin 2005 à 21:14
Merci et juste une dernière chose avant de vous laissez libre...
Un petit exemple ?

J'ai tout essayé pendant 40 ans rien ne marche...
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
8 juin 2005 à 21:16
Et parmis les fenètres "candidates" comment savoir si c'est une "EDIT" ?

Merci merci merci merci merci merci merci merci merci merci !!!!!!
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 juin 2005 à 21:27
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)

{

char className[32];

if(GetClassName(hwnd, className, 32) 4 && (*(DWORD*)className 'TIDE' || *(DWORD*)className == 'tide'))

{

C'est un edit

}

}



EnumChildWindows(hParent, EnumChildProc, 0);
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 juin 2005 à 21:29
Ah oui, quand tu as un edit tu arrête l'enumération, en retournant FALSE:





BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)

{

char className[32];

if(GetClassName(hwnd, className, 32) 4 && (*(DWORD*)className 'TIDE' || *(DWORD*)className == 'tide'))

{

...

return FALSE;

}

return TRUE; // on continue l'énumération jusqu'a ce qu'on trouve un edit

}



Bien sur ca ne marche que s'il n'y a que un edit dans la fenêtre, sinon aucun moyen de le différencier des autre
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 juin 2005 à 21:31
Encore un petit truc, j'ai mis "EDIT" et "edit", mais apparemment c'est
"Edit" que Windows donne pour les edit, donc a toi de voir comment tu
fais (tu peux utiliser strcmpi pour une comparaison qui ne tient pas
compte de la casse)
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
9 juin 2005 à 10:43
Ok merci !!!!!

Ta des personnes super sympa sur ce forum...

Encore merci.
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
9 juin 2005 à 11:05
Voilà ce que j'ai fait :

EnumChildWindows(hwnd, EnumChildProc, 0);

Puis :
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{printf( "--- Fonction appelée ---\n");
printf("%s\n", *(DWORD*)className );
return TRUE;
}

Or jamais il s'affiche "--- Fonction appelée ---" !!!!!!!!
(Je suis en mode console...)

Où est le pb ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 juin 2005 à 11:41
Ca veut dire que hwnd n'a pas de fenêtre fille à priori, tu est sur que tu as la bonne fenêtre?

printf("%s\n", *(DWORD*)className );

-> puts(className );
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
9 juin 2005 à 13:31
Quand je le fais sur une autre fenètre ça marche, donc cette fenètre là n'a pas de fenètre fille ??

Mais comment prendre le texte dans l'édit ? (Ca je suis sûr à 100% qu'il y a un...)

NB: le "EDIT" peut-il être bloqué ????
Ou "inscrit" dans la fenètre parent ?
Mais alors comment faire ?
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
9 juin 2005 à 13:32
Ah mais en fait c'est peut être une dialogbox !!!
Ca change qqchose ?
Donc l'"EDIT' n'est pas une fenètre a part entière...non?

How can I do ???
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 juin 2005 à 13:48
Non de ce point de vue un dialog est une fenêtre comme les autres, et un edit aussi. Je vois pas d'ou vient ton problème la
0
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
9 juin 2005 à 14:07
Si cela peut aider à résoudre le pb :
Je veux juste prendre les conversations d'MSN Messenger ....!
Donc faire un GetWindowText( ) sur l' "EDIT" ou sur ce controle là d'une fenètre de conversation dont j'aurais préalablement donné le handle......
C'est possible ?
Ou alors une autre idée ?

Merci beaucoup de ton aide vecchio56 !!!!!!!
0
Rejoignez-nous