IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

comment récupérer du texte non selectionnable et non copiable d'une application windows?


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut comment récupérer du texte non selectionnable et non copiable d'une application windows?
    Bonjour à la communauté,

    Je vous ecris car je suis confronté à une tache répétitive abrutissante que je souhaiterai automatiser (plus ou moins…).

    Je dois régulièrement extraire des données à partir du logiciel Tecdoc vers une table excel. Malheureusement pour moi, je dois faire cela de facon manuelle.

    Ma tache consiste à saisir une référence dans un zone de texte, lancer une recherche, puis recopier le résultat qui s’affiche sous forme d’une table qui ressemble à une sorte de ListView deroulant ou Combobox (cf image ci-jointe). Le souci est que cette ListView est non-selectionnable et non copiable dans le presse papier. Je dois donc naviguer entre les deux fenetres et recopier les lignes une a une…. Sachant que pour une référence je peux avoir jusqu’à 300 lignes de résutats et que j’ai plus de 3000 références à traiter, je me vois coincer.

    Cependant, j’ai eu l’occasion de solutionner un problème similaire dans le passé, en faisant une application VB6 qui automatisait des recherches de facon barbare entre un fichier Excel et la fameuse ERP SAP. L’application copiait la référence dans une cellule excel, la collait dans le champs de recherche SAP, et simulait des clics en fonction des coordonnées des boutons sur l’ecran etc… J’eu connu un certain succes avec cette methode empirique qui utilisait tout de meme des API telles que GetWindowText (pour synchroniser les deux applications a partir des message de la barre de message, sur des messages tels que ‘Terminé’). Qui dit API dit egalement handle et tout ce qui va avec.

    Je me retrouve donc aujourd’hui avec quelques connaissance pour aborder mon problème, convaincu que je peux récupérer le contenu de cette « Combobox » avec des API telles que GetWindowText, ControlContentSaver ou en trouvant les chaines de caractères utilisée par TecDoc grace à des applications comme ProcessExplorer, afin d’aller lire directement les infos dans les variables contenant les informations affichées à l’ecran…. Mais en utilisant une application telle que GetWindowText ou ControlContentSaver que je joints dans les pieces attachées (il ne s’agit pas de l’API GetWindowText mais bien d’un petit executable que j’ai trouvé sur le net et qui semble en revanche utilisé GetWindowText), il semble que l’utilisation de l’API GetWindowText soit infructueuse pour beaucoup de sous fenetres dans la fenetre de TecDoc. Comment faire alors si GetWindowText (l’API) ne me permet pas de récupérer le texte d’une fenetre à partir de son handle ?

    L’autre solution serait d’ouvrir directement les fichiers de la base de donnée de type transbase nommés rfile000.000, rfile000.001 etc… Mais je ne connais pas encore tout le vocabulaire, les termes techniques/technologie qui me permettrait de commencer des recherches sur forum pour creuser cette piste…. Il semble qu’il soit possible d’extraire directement des données avec un logiciel tel que SSIS qui utilise des « connections » via ODBC or OLE DB. Pourriez vous m’orienter vers des tutos ou cours pour comprendre ces techniques svp ?

    Merci d’avance pour votre aide ,
    Cordialement,
    Roland
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Tu devrais arriver à tes fins par UI Automation (Seven) ou MSAA (XP,Seven).
    A l'aide des fonctions d'énumération (ex. AccessibleChildren pour MSAA), tu peux recréer une aborescence complête du contenu de la fiche, retrouver les données ayant le rôle ROLE_SYSTEM_CELL (les cellules) et en extraire le texte.

    Il existe l'utilitaire UISpy qui te permettra déjà de voir la structure et ce qui est récupérable.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci Andnotor!
    Je buche MSAA et reviens vous donner des nouvelles de l'avancement.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Zut, impossible de fair fonctionner UISPy sur mon pc. Au lancement ,j'ai un message d'erreur suivant: UISPy a rencontré un problème et doit etre fermé.
    Je tourne sous windows XP pro 5.1 SP2. Y'a t il un logiciel equivalent autre que snoop? J'ai egalement essayé avec snoop et j'obtiens le meme bug.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bon AndNotor je n'ai pas réussi à faire fonctionner UI SPY car il plante sur mon pc au lancement de l'application. La meme avec snoop.

    En revanche, j'ai télécharger le logiciel SysExporter, qui permet d'afficher du texte affiché dans des boutons de la page et bon nombre d'éléments sauf cette fameuse liste visible sur l'impression d'écran... Décidément c'est pas gagné.

    Par contre en lisant la fiche technique de SysExporter, il est dit que les limitation rencontrées par celui ci sont les suivantes:

    SysExporter peut exporter des données a partir de la plupart des controles tels que les combo boxes, list boxes, tree-view, et list-view mais pas pour tous. En effet, il ya certaines applications qui utilisent ces controles pour afficher les données, mais ces données ne sont pas stochées dans le controle. Ces données sont stochées à un autre emplacement de la mémoire de l'ordinateur. Dans ce cas de figure SysExporter n'est pas capable récupérer les données.

    Comment puis je faire pour savoir l'origine de ces données? Est il possible de faire un log file qui trace les requetes de l'application vers des fichiers externes (ces fameux rfile000.000 etc...)

    S'il vous plait aidez moi.

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Je crains que le chmilblick n'avance pas plus avec ma réponse.

    Si je vois bien c'est une cochonnerie d'appli SAP, on a ça au boulot... certains tableau ne peuvent en effet pas être copiés...

    J'ai essayé avec vbscript intégré à SAP mais sans succès. Il faudrait déjà connaitre de quel type est ton tableau, de quel composant il s'agit. Les tableau SAP sont apparemment souvent fait à base de composants liés à une base de donnée ce qui rend plus délicat la récupération de son contenu lorsqu'il n'est pas possible de le faire à la main...

    J'ai fini par m'en sortir car il me fallait juste récupérer le contenu d'une colonne contenant des chiffres de 5 ou 6 caractères, j'avais récupéré une appli en open source qui permettaient de sélectionner un composant d'une page pour avoir son handle (via les API sans doute), ensuite je faisais une capture du hdc pour finalement "lire" graphiquement les caractères...

    Comme précisé au début, j'avais peu de données à récupérer... dans ton cas l'affaire me semble vouée à l’échec avec cette méthode. Si toute fois tu étais intéressé, je mettrais le code à disposition, il est écrit sur Delphi.

    Initialement (dans ton autre fil) tu avais possibilité de trouver ces données sur un site internet ce qui me semble être moins fastidieux, à toi de voir.

    Je suis le fil au cas ou une réponse apparaisse car je suis également intéressé

    Bon courage

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bonsoir,

    Qwazerty, il ne s'agit pas de SAP mais c'est vrai que le thème graphique de l'application evoque SAP.

    J'ai avancé un peu dans mes recherches et il semble qu'un procédé existe pour cela qu'on appelle en anglais "DLL injection" et qui permet de "court circuiter" des API lorsque le WM_GETTEXT ne fonctionne pas, afin de récupérer et meme semble t il modifier du texte affiché dans n'importe quelle fenetre windows.

    Voici le lien pour ceux que ca pourrait intéresser:
    http://www.codingthewheel.com/archiv...ne-poker-bot-7

    Merci pour ta réponse Qwazerty.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Hey!!!
    Bon près moult recherche j'ai enfin trouvé ma solution à l'aide de mots clés tels que "text grab", "capture text", "scrape text", de fil en aiguille je suis arrivé à trouver des applications toute faite certes payantes (50 dollars avec 30 jours d'essai sans limitation, pas mal).

    Alors vu que je suis pressé par le temps j'opte pour wintask+ SNAGIT. Deux outils ultra puissants pour automatiser des taches sur windows et sur le web (wintask) et pour capturer n'importe quelles données et les envoyer vers des applis variées (toute la suite office dont excel, etc....)

    Pour moi ces applications sont la preuves que les techniques de programmation pour capturer n'importe quel texte non selectionnable ni copiable existe! Et entre autre le detournement d'API telles que ExtTextOut et DravText allié à de l'injection de dll....

    A bon entendeur.

    Problème résolu! Merci a AndNotOr (clin d'oeil a Bool) et a Qwazerty pour leur contribution!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 25
    Dernier message: 15/12/2010, 14h49
  2. Réponses: 3
    Dernier message: 11/05/2006, 17h47
  3. [C# 1.1] Comment récupérer du texte entre des mots connus ?
    Par foolsky dans le forum Windows Mobile
    Réponses: 8
    Dernier message: 26/04/2006, 14h15
  4. comment récupérer du texte formatté
    Par david06600 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 20/02/2006, 17h12
  5. [JTabbedPane] Onglet non selectionnable et non supprimable
    Par seiryujay dans le forum Composants
    Réponses: 3
    Dernier message: 12/09/2005, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo