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

C++ Discussion :

Automation Informatique pour une application.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut Automation Informatique pour une application.
    Bonjour à tous,

    Je ne sais pas vraiment ou poster ce sujet, mais étant donné que je souhaite réaliser cela en C++, pourquoi pas....

    Je cherche à créer un système d'automation, pour ceux qui ne savent pas:
    http://fr.wikipedia.org/wiki/Automation

    Le but est de récupérer sous forme de données, les manipulations que l'user fait sur n'importe quelle application Informatique via le clavier/souris. (Attention, ce n'est pas qu'un simple logiciel de capture de touches ou autre...)

    Le problème pour moi est de savoir si le fait de récupérer les coordonnées des déplacements de la souris ou encore les touches du clavier insérées par l'user suffit t-il pour créer un sytème d'automation solide ?
    Sachant qu'il doit être possible de récupérer une valeur absolue, par exemple si l'user augmente le volume à "10", je dois pouvoir récupérer la valeur "10" sans bidouiller le logiciel propriétaire ! C'est donc une véritable problématique et je n'y connais pas grand chose.

    Je viens également ici pour récolter vos idées et le maximum d'informations sur le domaine de "l'automation", merci à ceux qui savent !

    A+

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je ne connais pas grand chose au domaine de l'automation, mais c'est intéressant et j'ai eu l'occasion d'y réfléchir à plusieurs reprises.

    Tout d'abord, je ne vois pas comment il serait possible de faire un système d'automation indépendant du logiciel cible. Pour que le système d'automation soit fiable, il doit connaître l'état du logiciel au moment de chaque action. Par exemple, lors d'un clic gauche, si on a que la position de la souris au moment du clic, on doit savoir quelle est la fenêtre active, sa position, létat de ses scrolls, quel menu est ouvert, etc., pour savoir quel bouton a été cliqué. La seule solution solide est savoir l'action qu'à généré le clic sur le bouton, ou éventuellement que l'action enregistrée pour l'automation soit du type: "clic sur bouton + identifiant du bouton".
    Ce qui sous-entend que le système d'automation doit être intégré dans le programme, il ne peut pas en être indépendant.
    Après, théoriquement c'est peut-être possible (tout est possible en informatique) mais à mon avis, 3 ans de thèse ne suffirait pas à en dresser ne serait-ce qu'une base théorique.

    Les systèmes d'automation que je connais sont:
    1. Celui de Reason (logiciel de création musicale développé par PropellerHeads)
    2. Le système de visualisation de parties pour les jeux warcraft3 et starcrat2 développés par Blizzard.
    Dans chacun de ces cas, je ne vois le début d'un commencement envisageable d'une solution permettant le développement d'un outil externe permettant l'automatisation de ces deux programmes.

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Après réflexion, j'irai même plus loin en fait: pour pouvoir mettre en place un système d'automation fiable, il faut que le logiciel cible présente une architecture qui le permet, ce qui n'est généralement pas le cas.
    Plus précisément, il faut que le logiciel cible ait une architecture basée sur des actions (ou au moins qu'il propose ce paradigme et l'implémente correctement). Autement dit, il faut que le logiciel cible permette de traduire chaque action de l'utilisateur en une Action (voir D.P. Command), afin de pouvoir les enregistrer, mais aussi de pouvoir les injecter après coup.

  4. #4
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par r0d Voir le message
    Après réflexion, j'irai même plus loin en fait: pour pouvoir mettre en place un système d'automation fiable, il faut que le logiciel cible présente une architecture qui le permet, ce qui n'est généralement pas le cas.
    Je plussoie ceci.
    J'ai déjà réalisé plusieurs fois des automates basés sur des captures d'écran/souris/clavier, et il faut t'attendre à des erreurs (90% de succès c'est pas mal).

    Après ça dépend ce que tu veux faire, le temps que tu y passes et les compétences en traitement de signal que tu as.

    Ça dépend aussi du problème : il se trouve que parfois les 10% d'erreur ne te gênent pas. J'illustre : j'avais par exemple programmé un "joueur" de jeu vidéo qui passait sa journée à miner des rochers (à cliquer sur des rochers sur l'écran).

    Parfois il cliquait à coté de rochers, ce qui faisait qu'il se déplaçait inutilement.

    Parfois il ne trouvait pas de rocher (la lumière avait changé ou il y avait trop d'autres joueurs à l'écran), ce qui fait qu'il ne faisait rien et au bout d'un moment le jeu déconnectait.

    Pour résoudre cela, j'ai programmé une fonction qui lui permettait de lire la mini-carte et de détecter s'il s'était trop éloigné, et une autre qui lui permettait de regarder s'il s'était déconnecté.

    Après, il se trouve que ces fonctions avaient elles aussi 10% d'erreur, ce qui faisait que sur un temps assez long mon robot finissait toujours par se retrouver dans une situation que je n'avais pas prévu. Mais ce temps était souvent supérieur à trois jours, ce qui fait qu'en le recadrant à la main tous les soir, j'avais un résultat acceptable.

    [HORS SUJET]Pour info : l'objectif de ce projet était de prouver que les MMORPG nous prennent vraiment pour des débiles puisque les ordinateurs peuvent jouer à notre place. Et même si c'est dans un cas très précis (de l'artisanat dans un jeu en particulier), la démonstration a marché puisque j'ai monté un mineur à haut niveau en trois mois sans jamais cliquer moi-même sur un rocher (hors de la très longue phase de mise au point). Si mon compte existe encore, je dois avoir un stock de minerais absolument hallucinant.[/HORS SUJET]

    Pour "comment faire", il se trouve que j'ai rédigé un post là-dessus hier, je t'y renvoi.

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Moi ce qui me fait peur dans cette histoire c'est ce que j'ai mis en gras ci-après:
    Citation Envoyé par katcha95 Voir le message
    Le but est de récupérer sous forme de données, les manipulations que l'user fait sur n'importe quelle application Informatique via le clavier/souris. (Attention, ce n'est pas qu'un simple logiciel de capture de touches ou autre...)
    Car effectivement, on puet faire de l'automation pour un programme précis, et si on a droit à une marge d'erreur, c'est parfaitement faisable, et de différentes façons. Il doit même y être possible, modulo le système d'exploitation, d'intercepter les événements au niveau de l'OS et de s'en sortir avec ça. Mais faire un outil aussi générique, là je ne vois pas.

  6. #6
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Tu as raison : tout les automates que j'ai pu croiser ou écrire avaient toujours besoin que j'aie les mains dedans pour fonctionner.

    Mais je suppose que dans un cas simple, on peut prévoir plusieurs cas. Par exemple, on doit pouvoir faire un programme qui manipule n'importe quelle calculatrice, en comptant sur le fait que les boutons sont tous plus ou moins de la même forme et que les chiffres aussi... m'enfin y'aura toujours une calculatrice qui échappera aux algos de détection.

    Autre élément : il n'est pas toujours possible (ou pas toujours facile) de récupérer l'image à l'écran ou les données souris/clavier. Et cela peut beaucoup changer d'un programme à un autre. En particulier, dès qu'on aborde des choses comme les jeux 3D en plein écran.

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Salut !

    Je vois que les discussions ont bien décollées ! Merci pour les remarques ca peut aider. Je voudrais revenir sur le logiciel Reason de PropellerHeads, je l'utilise également et mon projet concerne aussi un logiciel de M.A.O !

    Question pour rOd: Prenons un autre exemple, celui de FL Studio, comment ce séquenceur de musique parvient t-il à enregistrer des automations sur n'importe quel VST ? Il travaille avec les coordonnées de la souris et insertion clavier ?

    Remarque pour Feriaman: Le projet de la calculatrice est possible, mais je voudrais éviter "La vision par ordinateur", tu sais les algorithmes d'analyse de pixels, de formes etc ... trop lourd pour mon type d'application qui consomme déjà assez de CPU !

    A+

  8. #8
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Citation Envoyé par katcha95 Voir le message
    je voudrais éviter "La vision par ordinateur", tu sais les algorithmes d'analyse de pixels, de formes etc ...
    On est donc bien d'accord.

    Il ne te reste plus qu'à espérer comme dit r0d que les programmes que tu veux contrôler aient prévus de l'être.

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par katcha95 Voir le message
    Je voudrais revenir sur le logiciel Reason de PropellerHeads
    Beni soit le programmeur qui a put lire les sources de Reason. Il parait que c'est absolument génial (dans son sens éthymologique: ça tient du génie).

    Citation Envoyé par katcha95 Voir le message
    Prenons un autre exemple, celui de FL Studio, comment ce séquenceur de musique parvient t-il à enregistrer des automations sur n'importe quel VST ? Il travaille avec les coordonnées de la souris et insertion clavier ?
    Plusieurs choses:

    1. Première remarque juste pour s'assurer de savoir de quoi on parle ici. FL n'est pas qu'un simple séquenceur. Il fait beaucoup d'autres choses.
    Le séquenceur est un truc en général assez bête: c'est une bête liste|pile d'événement. Ces événements sont dépilés de façon séquentielle et exécutés par une tierce partie.

    2. Je n'en sais rien, car je n'ai pas vu le source de FL, mais je suis à peu près certain que son système d'automation a un accès direct au séquenceur: ce qui est enregistré, ce ne sont pas les actions de l'utilisateur, mais les événements qui sont ajoutés au séquenceur. De même que pour la lecture de l'automation, ce sont des événements qui sont directement ajoutés au séquenceur, et non pas les actions de l'utilisateur qui sont simulées.

    Au pire, ce ne sera pas directement le séquenceur qui sera attaqué, mais peut-être le médiateur qui transforme les actions de l'utilisateur en événement. J'a vu ça sur l'architecture d'un générateur audio écrit en LISP: un médiateur qui récupère les événements clavier/souris/réseau, en fonction du contexte, il crée des Actions (ensuite ces Actions générent des événements). Ce système a de gros avantages, dont celui de rendre super facile les communications entre les divers modules (réseau, IHM, plug-ins, automation, etc.), en basant toutes ces communications sur ces Actions (il n'y a QUE des actions qui sont échangées entre chaque modules).

    3. Si mes souvenirs sont bons, FL offre une interface pour écrire des plug-ins VST. Et même s'il ne le fait pas, je pense qu'il serait bon pour toi de jeter un coup d'oeil à l'architecture VST, et surtout à son système de communication avec le master. Ça pourra te donner une idée de comment fonctionnent ces logiciels de MAO.

  10. #10
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 148
    Par défaut
    Bien, qui à lu les codes source de Reason, ca m'intéresse moi !!!

    Et dans ce cas là comment fonctionne l'automation sur Reason ? Enregistrement des actions users directement dans le séquenceur aussi ?

    A+

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

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. [Executable]creation d'un batch pour une application
    Par tarik75 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/08/2005, 15h33
  3. [Tomcat] définir un port pour une application
    Par Mrlud dans le forum Tomcat et TomEE
    Réponses: 10
    Dernier message: 14/06/2005, 17h33
  4. [Compilation] A quel moment pour une application ?
    Par Rick1602 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/03/2004, 20h36

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