[C++] Obtention du contenu de la fenêtre active

Obtention du contenu de la fenêtre active [C++] - Programmation

Marsh Posté le 31-03-2001 à 08:15:31    

Je voudrais faire un exe qui récupère périodiquement le contenu texte de la fenêtre active, que ce soit une fenêtre Word, notepad, excel, IE, etc. Savez-vous comment faire ça ? Je suis bon en C++ mais je débute en Windows. Faut-il regarder du côté des MFC ou du Windows SDK ?
 
Merci d'avanc

Reply

Marsh Posté le 31-03-2001 à 08:15:31   

Reply

Marsh Posté le 31-03-2001 à 09:54:49    

Heu à mon avis il faut récupérer un pointeur sur le controle en question mais ca doit pas être évident.
J'ai déjà vu un exemple d'un programme qui écrivait dans le notepad grace à un pointeur sur le controle d'édition du notepad ...
Il y a peut être une autre solution moins barge :))
 
Flying

 

[edit]--Message édité par Flying--[/edit]

Reply

Marsh Posté le 31-03-2001 à 21:16:43    

Chaque controle sous windows ( zone de texte ,liste ,arbre , bouton , etc ...) possède un handle(ce que tu appelle le pointeur) PUBLIC à toutes les applications. C'est avec ce handle et quelques fonctions windows ( SetWindoText , etc ...) que l'on peut manipuler les fenetres. Ainsi , si tu arrives à récupérer le handle de word ou notepad ( enfin je veux dire le handle de la zone de texte puisque c'est ca qui t'interesse), tu peux, par le biais des fonctions win32, manipuler à volonté ces fenetres , tu peux les redimensionner , les cacher, changer les propriétés ( ex : le controle qui sert à taper un mot de passe et qui fait apparaitre des '*'  à la place de ce qu'on tape , bah la plupart du temps c'est une editbox , il suffit de récupérer son handle et de changer la propriété password !) .
 
Le plus "dur" , c'est de récupérer ce handle. Tu peux tres facilement en utilisant le programme spy++ fourni avec visual studio mais c'est une opération manuelle. Sinon , il existe des fonctions windows du genre GetWindowFromPoint() qui permet de retourner le handle de la fenetre sous le pointeur de souris.
 
Malheureusement, la routine qui permettra de faire ca sera ecrite dans un programme, et cette fonction ne fonctionnera que si ce programme est actif, autrement dit, tu ne pourrais t'en servir que si ton programme avait la main ( pas interessant puisque tu veux le handle du controle actif).
 
Neanmoins, il existe un moyen d'avoir un programme en tache de fond toujours actif mais actuellement je ne sais pas comment faire . D'ailleurs si quelqu'un sait ce serait bien de dire comment faire !! ( ca doit pas etre bien dur, le tout c'est que l'application doit récupérer les messages souris meme si elle n'est pas active  genre le message WM_NCMOUSEMOVE mais chui pas sur que c'est celui la !).

Reply

Marsh Posté le 01-04-2001 à 13:39:52    

Si j'ai bien compris, il s'agit de trouver un programme qui espionne tout ce que tape ou lit un utilisateur...
Pour trapper le clavier, c'est pas compliqué: un Windows Hook que tu ajoute à la fenêtre que tu veux étudier.
Pour connaitre la fenêtre active, Windows te l'indique par une fonction de base.
Par contre pour savoir ce que lit l'utilisateur, tout dépends de la méthode d'affichage employée.
En pratique on ne se complique pas autant, et on a juste beoin de faire un snapshot (avec une solution du genre de Norton pcAnywhere, qui permet de prendre le contrôle d'un PC à distance ou surveiller ce qui s'y passe...)

Reply

Marsh Posté le 02-04-2001 à 09:58:54    

Merci. Bon d'après ce qu'on m'a dit jusqu'à présent, le pb est que le ctrl de chaque fenêtre est différent suivant l'appli et que donc il faudra faire un cas particulier pour chaque appli (word, etc.)
 
Pour ce qui est du pb de ne pas choper la propre fenêtre du pg comme fenêtre active, je pense qu'il suffit d'en rendre uneautre active et de passer par un thread avec un timer qui testera régulièrement la fenêtre active en tâche de fond.
 
Bon je vais voir...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed