Lire Texte d'une fenetre windows [Résolu]

nomlingote 6 Messages postés jeudi 29 septembre 2005Date d'inscription 3 octobre 2005 Dernière intervention - 29 sept. 2005 à 14:45 - Dernière réponse : nomlingote 6 Messages postés jeudi 29 septembre 2005Date d'inscription 3 octobre 2005 Dernière intervention
- 30 sept. 2005 à 12:22
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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
julienbj 458 Messages postés jeudi 4 décembre 2003Date d'inscription 19 décembre 2008 Dernière intervention - 30 sept. 2005 à 10:11
3
Merci
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
[mailto:julienbj@hotmail.com Savon]

Merci julienbj 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de julienbj
nomlingote 6 Messages postés jeudi 29 septembre 2005Date d'inscription 3 octobre 2005 Dernière intervention - 29 sept. 2005 à 14:46
0
Merci
Commenter la réponse de nomlingote
julienbj 458 Messages postés jeudi 4 décembre 2003Date d'inscription 19 décembre 2008 Dernière intervention - 29 sept. 2005 à 17:47
0
Merci
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:

<hr size="2" width="100%">UINT i;

char buffer[30];



for (i = 0; i < MAXID; i++)

SendDlgItemMessage(hParent, i, WM_SETTEXT, 0, itoa(i, buffer, 10));

<hr size="2" width="100%">

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
[mailto:julienbj@hotmail.com Savon]
Commenter la réponse de julienbj
nomlingote 6 Messages postés jeudi 29 septembre 2005Date d'inscription 3 octobre 2005 Dernière intervention - 30 sept. 2005 à 06:58
0
Merci
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.
Commenter la réponse de nomlingote
julienbj 458 Messages postés jeudi 4 décembre 2003Date d'inscription 19 décembre 2008 Dernière intervention - 30 sept. 2005 à 10:00
0
Merci
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
[mailto:julienbj@hotmail.com Savon]
Commenter la réponse de julienbj
julienbj 458 Messages postés jeudi 4 décembre 2003Date d'inscription 19 décembre 2008 Dernière intervention - 30 sept. 2005 à 10:02
0
Merci
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
[mailto:julienbj@hotmail.com Savon]
Commenter la réponse de julienbj
nomlingote 6 Messages postés jeudi 29 septembre 2005Date d'inscription 3 octobre 2005 Dernière intervention - 30 sept. 2005 à 12:22
0
Merci
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.
Commenter la réponse de nomlingote

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.