begin process at 2008 09 05 11:33:02
1 237 173 membres
131 nouveaux aujourd'hui
14 312 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Lire Texte d'une fenetre windows [ Archives / Au secours ] (nomlingote)

Lire Texte d'une fenetre windows le 29/09/2005 14:45:55

nomlingote
Bonjour à tous, J'utilise Dev C++ comme environnement. Je souhaite faire une application console qui puisse lire le contenu des TEXTBOX , RICHEDIT... d'une fenetre windows. Le but est de recuperer tout ce qu'il y a comme text dans un textbox ou autres controles de l'application Windows par exemple et le faire analyser par l'application console. Pour être precis, si l'application windows affiche un texte dans une zone quelconque de la fenetre, le programme (console) devrait pouvoir aller lire ce texte affiché par l'application windows. Merci de votre aide.

Re : Lire Texte d'une fenetre windows le 29/09/2005 14:46:37
Re : Lire Texte d'une fenetre windows le 29/09/2005 17:47:35

julienbj

Recupere le handle de la fenetre dans laquelle tu veux récpérer le texte.
FindWindow
Puis, récupère le handle des composants de la fenetre. (A coup de EnumChildWindow)
Sinon, tu peux aussi récupérer les ID des composants que tu veux en faisant un prog de test qui écrit sur chaque composant de ta fenetre la valeur de l'ID:

UINT i;
char buffer[30];

for (i = 0; i < MAXID; i++)
    SendDlgItemMessage(hParent, i, WM_SETTEXT, 0, itoa(i, buffer, 10));


Selon la méthode effectuée, tu as soit le handle du composant, soit l'identifiant du composant, et avec ça, tu as le handle de la fenetre.
1.-Handle du composant:
Utilise la fonction SendMessage avec le bon message pour récupérer le texte du composant
Ex: Récupérer le texte afficher sur un bouton dont le handle est contenu dans hButton:
char buffer[256];
SendMessage(hButton, WM_GETTEXT, 255, buffer);

2.-ID du composant:
Utilise la fonction SendDlgItemMessage pour envoyer un message au composant.
Ex: Récupérer le texte du bouton d'identifiant IDButton dans la fenetre de handle hParent
char buffer[256];
SendDlgItemMessage(hParent, IDButton, WM_GETTEXT, 255, buffer);

Vive le C
Tchao
Savon

Re : Lire Texte d'une fenetre windows le 30/09/2005 06:58:21

nomlingote
salut julienbj, J'ai essayé votre sugesstion sans succes; j'ai eu un probleme avec la conversion de type dans la fonction SendDlgItemMessage() Exemple 2. Je serai plus à l'aise avec les handle des composants de la fenetre. Si vous voulez bien me donner un exemple détaillé avec la fonction EnumChildWindow (). Merci de votre aide.

Re : Lire Texte d'une fenetre windows le 30/09/2005 10:00:51

julienbj
Je veux bien te faire un exemple, mais la solution 2 me parait de loin la plus facile à mettre en place.
Pourquoi je dis ca?
Parcque EnumChildWindow va t'énumérer tous les composants d'une fenetre. Alors comment savoir lequel tu veux récupérer? J'ai quelques idées, mais elles sont assez tordues pour l'instant.

Pour la solution 2, je comprends pas ce que tu appelles un probleme de type.
Je vais essayer d'etre un peu plus clair sur ce qu'il faut que tu fasses.
Il faut que tu crées un second programme (qui ne sera lancé qu'une fois par toi).
Dans ce programme, tu demandes à chaque composant d'afficher son identifiant.
Pour cela, tu parcours tous les identifiants possibles et tu envoies le message SETTEXT par exemple. Avec comme chaine à afficher, la chaine contenant la valeur de l'identifiant.
La, tu regardes le composant que tu veux commander à partir de ta vrai application, et tu notes son identifiant en #define.
Apres, ben tu n'as plus qu'à le commander.

Mais explicite un peu l'erreur de type STP.
Je pense tu n'as pas du mettre les bonnes choses dans ton SendDlgItemMessage.

Vive le C
Tchao
Savon

Re : Lire Texte d'une fenetre windows le 30/09/2005 10:02:57

julienbj
J'ai oublié:
Pour passer de l'identifiant au handle, tu peux utiliser la fonction: GetDlgItem
Pour passer du handle à l'identifiant, utilise la fonction GetWindowLong avec le parametre GWL_ID.

Vive le C
Tchao
Savon

Re : Lire Texte d'une fenetre windows le 30/09/2005 10:11:14

julienbj
Réponse acceptée !
Sinon, une autre idée qui me vient comme ca.
Pour récupérer l'identifiant du composant que tu veux commander, utilises spy++.

Tu vas peut etre te demander pourquoi je parle toujours de l'ID plutot que du handle.
C'est parcque l'ID ne varie pas. A chaque fois que tu lances une application son handle ainsi que celui de ses composants est réaffecté, alors que les ID restent identiques.

Avec spy++, tu vas dans le menu Spy/Find Window.
La, avec l'outil de recherche, tu sélectionnes le composant que tu souhaites commander.
En cliquant sur le bouton OK (case Properties cocher), tu vas voir toutes les proprietes du composant, dont son identifiant.
C'est encore plus simple que mon premier exemple.

Vive le C
Tchao
Savon

Re : Lire Texte d'une fenetre windows le 30/09/2005 12:22:33

nomlingote
Salut, J'avais intégré directement tes suggestions à mon prog, mais en faisant un autre programme pour ecrire sur les composants de la fenetre j'ai pu corriger mon erreur. (j'avais déclaré buffer[] comme int.) Parfait je retiens le ID comme valeur de reference Ca rend le programme moins lourd en effet. C'est fou ce qu'on peut faire avec du C. Je vais quand meme regarder les fonctions GetDlgItem et GetWindowLong. On ne sait jamais ... Merci pour l'aide.


Classé sous : application, texte, lire, windows, fenetre

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Boutique

Boutique de goodies CodeS-SourceS