Recevoir texte d'une autre fenètre

Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
- - Dernière réponse : vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
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....
Afficher la suite 

20/28 réponses

Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
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
Commenter la réponse de vecchio56
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
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 ?) ?
Commenter la réponse de ncoder
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
Injecte une dll par SetWindowsHookEx qui sous classera l'edit et discutera avec le prog lanceur.

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

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

Ta des personnes super sympa sur ce forum...

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