Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
627 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Récupérer le contenu d'une partie d'une fenetre...

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Récupérer le contenu d'une partie d'une fenetre...

n°418271
pilou51
Posté le 05-06-2003 à 18:08:46  profilanswer
 

Salut,
 
Dsl le sujet est pas clair :)
Voilà je fais un programme qui aurait besoin de récupérer un numéro qui apparait ds une fenetre d'un autre soft, dont je n'ai pas la source bien sûr...
y a-t-il un moyen de faire ça svp ?
 
Mici d'avance, même si je suis pessimiste...
 
PS : si c possible ds un autre langage que C/C++, hésitez pas à le dire qd mm, chui ouvert à tout :)

mood
Publicité
Posté le 05-06-2003 à 18:08:46  profilanswer
 

n°418272
skeye
Posté le 05-06-2003 à 18:09:36  profilanswer
 

pilou51 a écrit :

Salut,
 
Dsl le sujet est pas clair :)
Voilà je fais un programme qui aurait besoin de récupérer un numéro qui apparait ds une fenetre d'un autre soft, dont je n'ai pas la source bien sûr...
y a-t-il un moyen de faire ça svp ?
 
Mici d'avance, même si je suis pessimiste...
 
PS : si c possible ds un autre langage que C/C++, hésitez pas à le dire qd mm, chui ouvert à tout :)


euhhhh... [:alph-one]
[edit]
Capture d'écran + ocr? [:ddr555]


Message édité par skeye le 05-06-2003 à 18:10:24
n°418273
pilou51
Posté le 05-06-2003 à 18:10:34  profilanswer
 

me dis pas que spa possible  :cry:
 
Edit : erf oui ste bonne idée :) hum, qq'un d'autre ?  :whistle:


Message édité par pilou51 le 05-06-2003 à 18:11:24
n°418275
Konar
Posté le 05-06-2003 à 18:17:37  profilanswer
 

pilou51 a écrit :

Salut,
 
PS : si c possible ds un autre langage que C/C++, hésitez pas à le dire qd mm, chui ouvert à tout :)


 
du mal avec ton neurone ?
 
c posté ds la section c/c++, et tu veux un truc en autre chose ke tu c ?
 
j'ai ptet la solution en c++, apres, a toi de te mettre d'accord avec ton neurone.

n°418288
gnoof
Posté le 05-06-2003 à 18:40:04  profilanswer
 

Utilises déjà un utilitaire comme spy++ (  visual c++ ) pour en savoir plus sur la fenêtre en question.
Après en fonction du résultat plusieurs techniques existent,
sous-classement, capture ...

n°418300
Konar
Posté le 05-06-2003 à 19:08:47  profilanswer
 

gnoof a écrit :

Utilises déjà un utilitaire comme spy++ (  visual c++ ) pour en savoir plus sur la fenêtre en question.
Après en fonction du résultat plusieurs techniques existent,
sous-classement, capture ...


 
FindWindow() aussi, apres tu recuperes le control en question et voila

n°418826
pilou51
Posté le 06-06-2003 à 08:14:07  profilanswer
 

Merci pour ça v essayer...  :)  
 
Quant à mon neurone, j'ai posté dans C/C++ parceque c ce qui me semblait le plus probable et qu'il faut choisir une section, je pensais pas que les gens d'hfr étaient devenus bornés à ce point depuis la création des sous-sections, mais peut etre n'as-tu dit ça que pour etre fidèle à ton pseudo, que tu portes fort bien par ailleurs  :hello:

n°418844
pilou51
Posté le 06-06-2003 à 08:40:45  profilanswer
 

et pis le problème, c que spy++ n'exporte pas ce qu'il trouve, donc pas moyen de faire le truc dynamiquement (l'handle est bien créé dynamiquement à chaque lancement d'une appli ?)...

n°418880
chrisbk
-
Posté le 06-06-2003 à 09:13:22  profilanswer
 

un peu de bricole
 
1) deja tu fais un findWindow pour recup l'HWND de la fenetre que tu veux
 
Ensuite fo retrouver le HWND du controle contenant les donnees souhaités. Perso je connais que la methode rustre :
 
 
dans une premiere phase, dans un programme de test :

Code :
  1. for (i=0;i<N;i++)
  2. {
  3. HWND m = GetDlgItem(hwndTaFenetre,i);
  4. //faire des test pour savoir si m est bien le controle souhaité, si oui, garder la valeur de i dans un coin
  5. }


 
apres tout ce que tu fais c :

Code :
  1. HWND h = FindWindow(..)
  2. HWND controle = GetDlgItem(h,iTrouvePlusHaut)
  3. GetDlgItemText(controle,...)


 
si qqun a plus fin je suis preneur
 
 
 
 
 
 
 

n°418925
pilou51
Posté le 06-06-2003 à 09:35:15  profilanswer
 

merci bcp, mm si c brutal, ça me plaît bien, vu que les performances ne sont pas critiques pour mon appli (elle se contente de récupérer un numéro de téléphone dans un autre soft, puis va le chercher ds une base de donées...)
 
j'aurais tout de mm des questions, je suis pas spécialiste du tt de la prog windows... La fonction FindWindow est définie comme suit :  

Code :
  1. HWND FindWindow(
  2. LPCTSTR lpClassName,
  3. LPCTSTR lpWindowName );


à quoi correspondent les paramètres ? le premier je vois pas, le deuxième, c le nom de la fenetre tel qu'il apparait ?
 
D'autre part, une fois que j'ai récup mon handle sur la fenetre, comment puis-je afficher son contenu (en ce qui me concerne c une zone de texte) directement, afin de vérifier que c la bonne fenetre par exple ? Désolé, je sais que c la base, mais je connais pas du tt ça :(
 
Merci bcp :)
 
 

mood
Publicité
Posté le 06-06-2003 à 09:35:15  profilanswer
 

n°418958
pilou51
Posté le 06-06-2003 à 09:55:24  profilanswer
 

hourra j'ai bien le handle de ma fenetre :)
reste à trouver comment afficher le contenu des items ds la boucle for... je cherche aussi, mais si qq'un sait et me le dit, je lui en voudrai pas  :D

n°418965
chrisbk
-
Posté le 06-06-2003 à 09:57:14  profilanswer
 

la reponse figure dans mon post, c sympa de me lire :O

n°418974
pilou51
Posté le 06-06-2003 à 10:00:43  profilanswer
 

euh désolé :(
tu veux dire GetDlgItemText ? ça renvoit un UINT et je vois pas bien comment afficher le résultat après :(

n°418977
chrisbk
-
Posté le 06-06-2003 à 10:04:13  profilanswer
 

Mais merdalafin, quand on sait pas comment on utilise une fonction on cherche un peu par soit meme, bordel de cul :O
 
 
http://msdn.microsoft.com/library/ [...] emtext.asp
 
La :O
 
On va pas te la tenir tout le tps hein ? :O

n°418981
skeye
Posté le 06-06-2003 à 10:05:22  profilanswer
 

pilou51 a écrit :

euh désolé :(
tu veux dire GetDlgItemText ? ça renvoit un UINT et je vois pas bien comment afficher le résultat après :(


Citation :


int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;
 
int GetDlgItemText( int nID, CString& rString ) const;
 
Parameters
 
nID
 
Specifies the integer identifier of the control whose title is to be retrieved.
 
lpStr
 
Points to the buffer to receive the control’s title or text.
 
nMaxCount
 
Specifies the maximum length (in bytes) of the string to be copied to lpStr. If the string is longer than nMaxCount, it is truncated.
 
rString
 
A reference to a CString.
 
 
 

n°418988
pilou51
Posté le 06-06-2003 à 10:07:31  profilanswer
 

mici, désolé j'étais sur cette page aussi, mais il est tôt et chui dans le pâté... forcément qd c surligné en gras, on voit mieux :)
Merci bcp, désolé d'avoir abusé de votre patience...

n°419016
pilou51
Posté le 06-06-2003 à 10:28:53  profilanswer
 

Bon chui pas sûr qu'on accepte encore de me répondre, mais qui ne tente rien n'a rien... :) et l'espoir fait vivre...
 
J'ai le code suivant :  

Code :
  1. int main (void) {
  2. char * texte = (char *) malloc (sizeof (char) * 6);
  3. HWND fenetre = FindWindow ("ThunderRT6FormDC","Nom de mon prog" );
  4. if (fenetre == NULL) printf("Fenetre non trouvee\n" );
  5. for (int i=0;i<10;i++) {
  6.  HWND m = GetDlgItem (fenetre, i);
  7.  if (GetDlgItemText(m, i, texte, 5) == 0) printf("Pas de texte trouve pour l'item %d\n", i);
  8.  else printf("Texte recupere : %s pour le handle : %d\n", texte, i);
  9. }
  10. return 0;
  11. }


Il me trouve bien le handle sur la fenetre (il n'affiche "fenetre non trouvée" que lorsque je ferme l'autre prog), par contre jamais de texte avec GetDlgItemText, quel que soit i... C encore moi qui me plante, ou bien ça peut etre autre chose ?
 
Merci infiniment à celui qui répondra :)

n°419021
chrisbk
-
Posté le 06-06-2003 à 10:31:28  profilanswer
 

GetDlgItemText(m, i, texte, 5)
 
c la que ca debloque, ne donne  pas "m" mais "fenetre" (tu veux le controle numero i de "fenetre" ). ca fait que le GetDlgItem ne sert a rien en fait
ensuite de 0 a 10 c leger, mais bon ca tu verras bien :D


Message édité par chrisbk le 06-06-2003 à 10:31:58
n°419025
skeye
Posté le 06-06-2003 à 10:32:05  profilanswer
 

pourquoi tu vas de 0 à 10...? Tu es sûr d'avoir 10 items seulement dans ta fenêtre?


Message édité par skeye le 06-06-2003 à 10:36:18
n°419028
pilou51
Posté le 06-06-2003 à 10:33:12  profilanswer
 

j'ai essayé avec 100 et ça n'affiche rien ensuite non plus. Là j'ai réduit uniquement pour la visibilité.

n°419030
chrisbk
-
Posté le 06-06-2003 à 10:34:30  profilanswer
 

il lit pas mes reponses [:sisicaivrai]

n°419032
skeye
Posté le 06-06-2003 à 10:35:52  profilanswer
 

chrisbk a écrit :

il lit pas mes reponses [:sisicaivrai]


C'est ma faute je l'ai cachée en le quotant pour rien...dsl!
Pour la peine je la requote ta réponse:

Citation :

GetDlgItemText(m, i, texte, 5)  
 
c la que ca debloque, ne donne  pas "m" mais "fenetre" (tu veux le controle numero i de "fenetre" ). ca fait que le GetDlgItem ne sert a rien en fait


Message édité par skeye le 06-06-2003 à 10:36:41
n°419035
pilou51
Posté le 06-06-2003 à 10:37:10  profilanswer
 

arf si on me tend des pièges en +... :)
 
J'ai changé en fenetre, mais c pareil, "pas de texte trouvé"...  :cry:

n°419036
chrisbk
-
Posté le 06-06-2003 à 10:38:27  profilanswer
 

pilou51 a écrit :

arf si on me tend des pièges en +... :)
 
J'ai changé en fenetre, mais c pareil, "pas de texte trouvé"...  :cry:  


 
ben augmente le nombre hein, et vazy franco, paske l'id ca peut etre n'importe quoi (conseil :vire le message "pas trouve" ) et affiche le numero de i quand tu en trouve)

n°419040
skeye
Posté le 06-06-2003 à 10:39:51  profilanswer
 

pilou51 a écrit :

arf si on me tend des pièges en +... :)
 
J'ai changé en fenetre, mais c pareil, "pas de texte trouvé"...  :cry:  


Tu as re-augmenté i?
[edit]
Grillaid, encore...


Message édité par skeye le 06-06-2003 à 10:40:37
n°419044
pilou51
Posté le 06-06-2003 à 10:42:24  profilanswer
 

j'en suis à 1 000 000 et toujours rien  :cry:  
J'ai essayé en récupérant l'ID d'un contrôle au hasard donné par spy++ (c en hexa) et il ne m'affiche toujours rien...

n°419059
pilou51
Posté le 06-06-2003 à 10:56:18  profilanswer
 

bon ok je sais, les int vont pas jusquà un million, mais c t pour le principe :)
Sinon, aucune solution ? c pas normal qu'il m'affiche rien qd je lui donne un ID valide, puisque récupéré par Spy++ non ?
 
help me plz, et mici bcp à ceux qui ont essayé :)

n°419299
pilou51
Posté le 06-06-2003 à 12:58:00  profilanswer
 

Evolution !!!
 
En faisant un GetLastError(), il me renvoit une erreur 1421 qui correspond à "Control ID not found."
Soit :

An application, as part of its user interface, has requested an operation on a control (BUTTON, LISTBOX, SCROLLBAR, and so on) that does not exist in the user interface.


Est-ce que les ID de contrôle sont vraiment des valeurs numériques ? J'avais vu un code source où le gars mettait des IDC_qqchose, mais j'arrive plus à le retrouver, et qd j'essaie ça me dit argument incorrect...
 
Help plz, mici d'avance :)

n°419305
Konar
Posté le 06-06-2003 à 13:00:32  profilanswer
 

windows est moderne de nos jours, t'as aucun droit sur un processus qui ne t'appartient pas, et ca doit inclure la récupération de certaines données.
 
bon, apres spy++ le fait, donc ca doit etre possible...

n°419322
pilou51
Posté le 06-06-2003 à 13:08:56  profilanswer
 

Vi, peut etre est-ce un problème de droit...
Ben chui pas ds la merde moi.......

n°419342
Konar
Posté le 06-06-2003 à 13:24:26  profilanswer
 

vite fait :
un prog ki recupere le handle du TaskManager, puis recupere un handle sur la PropertySheet actuellement visible (Applications, Processes ou Performance), puis recupere le titre du 1er control fils de cette PropertySheet.
 

Code :
  1. // Get Task Manager
  2. HWND hWndTask = FindWindow(NULL, "Windows Task Manager" );
  3. if (!hWndTask)
  4. return 0;
  5. // Get Child window
  6. HWND hWndTruc = FindWindowEx(hWndTask, NULL, NULL, NULL);
  7. if (!hWndTruc)
  8. return 0;
  9. // Get First control
  10. HWND hWnd = FindWindowEx(hWndTruc, NULL, NULL, NULL);
  11. if (!hWnd)
  12. return 0;
  13. char str[256];
  14. GetWindowText(hWnd, str, 256);
  15. MessageBox(0, str, "truc", 0);


 
tout le truc, avec spy++ c'est de bien reperer l'arborescence du prog ou tu veux recuperer un controle, puis esperer que c'est constant (ke les noms changent pas trop koi), et de faire des FindWindow a la volée.

n°419350
pilou51
Posté le 06-06-2003 à 13:27:20  profilanswer
 

merci bcp, v essayer d'utiliser ça :)

n°419382
pilou51
Posté le 06-06-2003 à 13:50:34  profilanswer
 

Snif, il récup bien les handles sur les contrôles successifs, mais pas leur contenu (la MessageBox est vide) :(((
Je pense que c un problème de droit, car ça marche avec le Gestionnaire de tâches, alors y'a pas de raison :(

n°419383
pilou51
Posté le 06-06-2003 à 13:53:40  profilanswer
 

ça marche pas non plus avec internet explorer ou toutes les fenetres que je peux tester... donc en fait c bizarre que ça marche avec le gestionnaire des tâches :)

n°419552
pilou51
Posté le 06-06-2003 à 15:21:16  profilanswer
 

:bounce: personne n'a d'explication plz ? :)

n°419556
Konar
Posté le 06-06-2003 à 15:22:38  profilanswer
 

pilou51 a écrit :

:bounce: personne n'a d'explication plz ? :)


 
regarde deja quelle fonction retourne une erreur

n°419560
pilou51
Posté le 06-06-2003 à 15:25:21  profilanswer
 

c le GetWindowText() qui lève ça...

n°419568
Konar
Posté le 06-06-2003 à 15:30:14  profilanswer
 

pilou51 a écrit :

c le GetWindowText() qui lève ça...


 
quel type controle tu veux recuperer ?
sur quelle fenetre ?
Essaye GetLastError si GetwindowText retourne 0

n°419581
pilou51
Posté le 06-06-2003 à 15:35:55  profilanswer
 

Avec ce code là j'ai plus d'erreur ( le GetLastError me renvoie 0), mais le GetWindowText renvoie une chaine vide...

Code :
  1. #include "main.h"
  2. int main (void) {
  3.   // Get Task Manager
  4.   HWND hWndTask = FindWindow(NULL,"Alcatel PIMphony Basic" );
  5.   if (!hWndTask)
  6.      return 0;
  7.  
  8.   // Get Child window
  9.   HWND hWndTruc = FindWindowEx(hWndTask, NULL, NULL, NULL);
  10.   if (!hWndTruc)
  11.      printf("child non trouve\n" );
  12.  
  13.   HWND hWnd = FindWindowEx(hWndTruc, NULL, NULL, NULL);
  14. if (!hWnd)
  15.   printf("Premier controle non trouve\n" );
  16. char str[256];
  17. GetWindowText(hWnd, str, 256);
  18. printf("Erreur : %d\n", GetLastError());
  19. MessageBox(0, str, "truc", 0);
  20.   return 0;
  21. }


 
Comment je peux récupérer le handle des autres contrôles avec FindWindowEx stp ? Peut etre que le premier contrôle n'a pas de texte et c pour ça, mais je vois pas comment parcourir les autres...
 
Merci  :jap:
 
EDIT : j'ai viré le premier source en commentaires...


Message édité par pilou51 le 06-06-2003 à 15:36:50
n°419584
pilou51
Posté le 06-06-2003 à 15:38:06  profilanswer
 

En fait, je veux récupérer un numéro de téléphone (donc du texte) sur une zone d'affichage (pas de saisie, je sais pas comment ça s'appelle exactement).

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Récupérer le contenu d'une partie d'une fenetre...

 

Sujets relatifs
[VBA + Access] Comment récupérer la version de tous les formulaires?Récupérer la date système et l'enregistrer dans une base de données
Comment récupérer les numéros de tel entrants dans un programme C++ ?[PHP] Récupérer le nom d un fichier à uploader...
[PHP / JAVASCRIPT] Récupérer des variables d'environnement.[VBA - Access] Récupérer une Date à partir d'une Date Time
récupérer des données dans un fichier excel en javascriptCGI qui fonctionne sous IE, mais qui ne fait qu'écrit le contenu html
est-ce que SDL permet l'affichage de fenetre ?Pb avec une requete: recuperer des valeurs separees par des virgules
Plus de sujets relatifs à : Récupérer le contenu d'une partie d'une fenetre...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR