Récupérer le contenu d'une partie d'une fenetre... - C++ - Programmation
Marsh Posté le 05-06-2003 à 18:09:36
pilou51 a écrit : Salut, |
euhhhh...
[edit]
Capture d'écran + ocr?
Marsh Posté le 05-06-2003 à 18:10:34
me dis pas que spa possible
Edit : erf oui ste bonne idée hum, qq'un d'autre ?
Marsh Posté le 05-06-2003 à 18:17:37
pilou51 a écrit : Salut, |
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.
Marsh Posté le 05-06-2003 à 18:40:04
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 ...
Marsh Posté le 05-06-2003 à 19:08:47
gnoof a écrit : Utilises déjà un utilitaire comme spy++ ( visual c++ ) pour en savoir plus sur la fenêtre en question. |
FindWindow() aussi, apres tu recuperes le control en question et voila
Marsh Posté le 06-06-2003 à 08:14:07
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
Marsh Posté le 06-06-2003 à 08:40:45
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 ?)...
Marsh Posté le 06-06-2003 à 09:13:22
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 :
|
apres tout ce que tu fais c :
Code :
|
si qqun a plus fin je suis preneur
Marsh Posté le 06-06-2003 à 09:35:15
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 :
|
à 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
Marsh Posté le 06-06-2003 à 09:55:24
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
Marsh Posté le 06-06-2003 à 10:00:43
euh désolé
tu veux dire GetDlgItemText ? ça renvoit un UINT et je vois pas bien comment afficher le résultat après
Marsh Posté le 06-06-2003 à 10:04:13
Mais merdalafin, quand on sait pas comment on utilise une fonction on cherche un peu par soit meme, bordel de cul
http://msdn.microsoft.com/library/ [...] emtext.asp
La
On va pas te la tenir tout le tps hein ?
Marsh Posté le 06-06-2003 à 10:05:22
pilou51 a écrit : euh désolé |
Citation : |
Marsh Posté le 06-06-2003 à 10:07:31
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...
Marsh Posté le 06-06-2003 à 10:28:53
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 :
|
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
Marsh Posté le 06-06-2003 à 10:31:28
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
Marsh Posté le 06-06-2003 à 10:32:05
pourquoi tu vas de 0 à 10...? Tu es sûr d'avoir 10 items seulement dans ta fenêtre?
Marsh Posté le 06-06-2003 à 10:33:12
j'ai essayé avec 100 et ça n'affiche rien ensuite non plus. Là j'ai réduit uniquement pour la visibilité.
Marsh Posté le 06-06-2003 à 10:35:52
chrisbk a écrit : il lit pas mes reponses |
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) |
Marsh Posté le 06-06-2003 à 10:37:10
arf si on me tend des pièges en +...
J'ai changé en fenetre, mais c pareil, "pas de texte trouvé"...
Marsh Posté le 06-06-2003 à 10:38:27
pilou51 a écrit : arf si on me tend des pièges en +... |
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)
Marsh Posté le 06-06-2003 à 10:39:51
pilou51 a écrit : arf si on me tend des pièges en +... |
Tu as re-augmenté i?
[edit]
Grillaid, encore...
Marsh Posté le 06-06-2003 à 10:42:24
j'en suis à 1 000 000 et toujours rien
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...
Marsh Posté le 06-06-2003 à 10:56:18
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é
Marsh Posté le 06-06-2003 à 12:58:00
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
Marsh Posté le 06-06-2003 à 13:00:32
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...
Marsh Posté le 06-06-2003 à 13:08:56
Vi, peut etre est-ce un problème de droit...
Ben chui pas ds la merde moi.......
Marsh Posté le 06-06-2003 à 13:24:26
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 :
|
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.
Marsh Posté le 06-06-2003 à 13:50:34
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
Marsh Posté le 06-06-2003 à 13:53:40
ç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
Marsh Posté le 06-06-2003 à 15:22:38
ReplyMarsh Posté le 06-06-2003 à 15:30:14
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
Marsh Posté le 06-06-2003 à 15:35:55
Avec ce code là j'ai plus d'erreur ( le GetLastError me renvoie 0), mais le GetWindowText renvoie une chaine vide...
Code :
|
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
EDIT : j'ai viré le premier source en commentaires...
Marsh Posté le 06-06-2003 à 15:38:06
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).
Marsh Posté le 05-06-2003 à 18:08:46
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