Recevoir texte d'une autre fenètre

Signaler
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 ?) ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Injecte une dll par SetWindowsHookEx qui sous classera l'edit et discutera avec le prog lanceur.

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
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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
euh bon j'ai rien dit
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Merci pour tous ces renseignements je vais voir !!!!
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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...
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Et parmis les fenètres "candidates" comment savoir si c'est une "EDIT" ?

Merci merci merci merci merci merci merci merci merci merci !!!!!!
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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);
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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)
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Ok merci !!!!!

Ta des personnes super sympa sur ce forum...

Encore merci.
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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 );
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 ?
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 ???
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 !!!!!!!