none
Contrôler plusieurs applications par un programme C# RRS feed

  • Question

  • Je désire développer une application qui contrôle d'autres applications en C#.  Mon souhait est de pouvoir prendre des décisions sophistiqués entre programmes.

    J'aimerais trouver de l'aide sur le Web pour ce genre de programmation afin de ne pas partir à zéro.

    J'ai les restrictions et permissions suivantes:

    Je veux être en mesure de capturer visuellement un programme et d'analyser le résultat avec des images précapturés

    J'ai le contrôle de la machine Windows 7 sur lequel les applications roulent.  Donc je doit désactiver les sécurités nécessaires.

    Les applications cibles sont commerciales sans accès aux sources.

    Suggestions de documentation?


    Luc Saucier


    mercredi 8 février 2012 16:41

Réponses

Toutes les réponses

  • Bonjour,

    Qu'appellez vous plus précisement par "Je veux être en mesure de capturer visuellement un programme et d'analyser le résultat avec des images précapturés".

    Vous souhaitez faire des captures d'écran sur une application en cours d'exécution ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5

    mercredi 8 février 2012 17:52
    Modérateur
  • Bonjour,

    Généralement on prend le contrôle des applications tierces en exploitant le modèle de programmation objet qu'elles exposent.

    Il devrait être également possible de manipuler l'interface utilisateur et de prendre des captures (mais généralement c'est plutôt pour vérifier que le rendu est le même qu'une image de référence après modifications de ses propres applis).

    Quel est le but de cette comparaison d'images au delà de juste savoir si elles sont identiques ou non ?

    Je pense que le mieux serait d'expliquer l'objectif final (par exemple comparer des données entre applications ?) indépendamment de la façon dont vous pensez résoudre le problème (en capturant et comparant des images plutôt que les données elle-même). Connaître les applications concernées pourrait aussi aider.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    jeudi 9 février 2012 10:12
    Modérateur
  • Je désire être en mesure de capturer visuellement (image) le résultat d'une application pour être en mesure de comparer avec une image prédéfini.  Un exemple serait de capturer la couleur d'une affichage me permettant de savoir si une machine est fonctionnelle (couleur verte) ou pas (couleur rouge).  Je ne peux programmer les applications cibles puisque certains de ces programmes sont hors de mon contrôle ou les accéder à travers des API.  Mon but est d'automatiser le travail d'un opérateur pour seulement ressortir sur un écran les éléments importants et effectuer des actions automatisable en cas de problème pour diminuer l'aspect humain.  Donc la capture partielle d'un écran est aussi un avantage.

    Je préfère être en mesure de capturer si possibles les images de vieux programmes Dos roulant sur Windows 7 même si la vitesse semble être problématique.  Mais la plupart des programmes cibles sont sur Windows.  La partie Dos serait du bonbon.

    Je veux voir aussi à quelle vitesse la capture peut se faire.  Plus rapide la capture se fera, meilleure sera la qualité de la réponse.

    Note: Merci pour votre temps sur plusieurs de mes questions.


    Luc Saucier


    jeudi 9 février 2012 14:09
  • Le but principal est de simuler un testeur humain plutôt que faire des tests avec des API qui pourrait fausser le résultat.  Il est possible que malgré le bon fonctionnement de l'interface informatique, le programme pourrait dévier visuellement des spécifications donnés.

    C'est un projet dont je veux examiner la faisabilité et je désire garder toutes les options ouvertes avec la possibilité de captures d'écrans.  Je n'ai pas un programme cible en tête pour le moment à part les produits que je développe.  J'ai plusieurs produits développés avec Visual Studio 2010 mais aussi je veux pouvoir tester visuellement les résultats d'un projet XBox à travers XNA et sa capture d'écran.

    Voir aussi ma réponse précédente pour plus de détails.


    Luc Saucier



    jeudi 9 février 2012 14:24
  • En supposant que le problème concerne la capture voir par exemple http://msdn.microsoft.com/fr-fr/library/system.drawing.graphics.copyfromscreen.aspx. Si l'on veut juste lire des couleurs cela devrait pouvoir coller après la communication va sans doute être un peu fruste si on veut récupérer des données précises (ou il faut faire un OCR sur l'image etc...)

    Après je comprends que cela peut être suffisant pour rapport à remplacer ces applis par une nouvelle appli qui discuterait directement avec les machines concernées...

    Pour les applis DOS, il serait peut-être possible de récupérer les caractères affichés via peut-être http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx (ReadConsoleOutput peut-être).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    jeudi 9 février 2012 17:44
    Modérateur
  • J'aimerais trouver aussi de la documentation pour envoyer des clicks de souris ou des touches de clavier à une autre application.

    Suggestions?


    Luc Saucier

    jeudi 9 février 2012 19:36
  • Vori http://msdn.microsoft.com/fr-fr/library/system.windows.forms.sendkeys.aspx ou en descendant plus bas http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx et il y a l'équivalent pour le clavier (mais je ne trouve pas à l'instant si sendkeys ne suffit pas). J'avais remarqué aussi pour les applis Windows, http://msdn.microsoft.com/en-us/library/ms747327.aspx (UII Automation) qui permettrait d'inspecter l'interface d'une autre appli et de manipuler directement ses contrôles (invoquer le click sur le bouton d'une appli tierce après avoir cherché le bouton par son nom par exemple).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 10 février 2012 09:20
    Modérateur