Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mouse & Keyboard simulation

    1 mars 2019 à 12:20:31

    Salut, je travaille sur un petit projet qui consiste à récolter des données depuis une carte arduino et d'exécuter des commandes windows simple selon les valeurs des capteurs, pour le moment j'arrive à bouger le curseur et de simuler une combinaison de touche comme alt+F4.

    Cursor.Position = new Point(Cursor.Position.X + gy[0] / acc_x, Cursor.Position.Y); // bouger le curseur
    i++;
    if(i>50)
    {
        SendKeys.Send("DOWN"); // Appuie sur le bouton bas du clavier
        i=0;
    }

    Le souci est que par exemple ma petite application ne marche pas quand je lance un jeu vidéo ou une présentation powerpoint, donc ça veut dire que les programmes utilisent directement le pilote de la souris ou du clavier pour intéragir avec (ce que j'ai déduit), du coup est-ce que je dois approfondir mes connaissances ou il y a un moyen plus simple pour remédier à ce problème ?

    • Partager sur Facebook
    • Partager sur Twitter
    "C'est un coup du sort étrange : tout les hommes dont on a ouvert le crâne avaient un cerveau" . Wittgenstein.
      1 mars 2019 à 13:50:45

      Vertinhol a écrit:

      Salut, je travaille sur un petit projet qui consiste à récolter des données depuis une carte arduino et d'exécuter des commandes windows simple selon les valeurs des capteurs, pour le moment j'arrive à bouger le curseur et de simuler une combinaison de touche comme alt+F4.

      Cursor.Position = new Point(Cursor.Position.X + gy[0] / acc_x, Cursor.Position.Y); // bouger le curseur
      i++;
      if(i>50)
      {
          SendKeys.Send("DOWN"); // Appuie sur le bouton bas du clavier
          i=0;
      }

      Le souci est que par exemple ma petite application ne marche pas quand je lance un jeu vidéo ou une présentation powerpoint, donc ça veut dire que les programmes utilisent directement le pilote de la souris ou du clavier pour intéragir avec (ce que j'ai déduit), du coup est-ce que je dois approfondir mes connaissances ou il y a un moyen plus simple pour remédier à ce problème ?

      Je pense que c'est parce que la fenêtre de ton programme n'est pas au premier plan, tu as essayé de le mettre en topmost ou autre ? 

      • Partager sur Facebook
      • Partager sur Twitter
        1 mars 2019 à 19:23:20

        >tu as essayé de le mettre en topmost ou autre ?

        Laisses tomber, avec les jeux, c'est le genre de truc qui va tout mettre dans le décor.

        @Vertinhol, les primitives que tu utilises sont très limitées, comme tu t'en rends compte.

        Quand on programme, généralement, on ne passe pas par de la simulation de touche clavier mais on utilise l'API du système qui correspond à l'action voulue.

        "Alt F4" n'est pas une action, fermé une fenêtre est une action :

        https://docs.microsoft.com/fr-fr/dotnet/api/system.windows.window.close?view=netframework-4.7.2

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          8 mars 2019 à 13:08:04

          Merci pour vos réponses ça m'a bien aidé, est-ce que vous pouvez m'expliquer comment je peux créer un eventhandler car la fonction Timer n'est pas assez rapide.
          • Partager sur Facebook
          • Partager sur Twitter
          "C'est un coup du sort étrange : tout les hommes dont on a ouvert le crâne avaient un cerveau" . Wittgenstein.
            11 mars 2019 à 10:10:43

            Windows n'est pas un OS temps-réel.

            Il y a de chance que l'usage d'un simple timer ne suffise pas.

            C'est quoi la finalité de votre machin ?

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              11 mars 2019 à 14:13:33

              bacelar a écrit:

              Windows n'est pas un OS temps-réel.

              Il y a de chance que l'usage d'un simple timer ne suffise pas.

              C'est quoi la finalité de votre machin ?


              je veux collecter des données de ma carte arduino et les afficher sous forme de courbe, j'ai réussi à supprimer la fonction Timer en créant une classe qui reboucle tant que je n'ai pas appuyé sur le bouton
              private void loop()
              {
                  /* code à répéter*/
                  if(!button)
                  {
                      loop();
                  }
              }
              Le problème c'est que le bouton d'arrêt et d'autres outils ne fonctionnent plus xD, je pense qu'il faut ajouter un truc pour mettre de la priorité
              • Partager sur Facebook
              • Partager sur Twitter
              "C'est un coup du sort étrange : tout les hommes dont on a ouvert le crâne avaient un cerveau" . Wittgenstein.
                11 mars 2019 à 20:28:25

                Vertinhol a écrit:

                bacelar a écrit:

                Windows n'est pas un OS temps-réel.

                Il y a de chance que l'usage d'un simple timer ne suffise pas.

                C'est quoi la finalité de votre machin ?


                je veux collecter des données de ma carte arduino et les afficher sous forme de courbe, j'ai réussi à supprimer la fonction Timer en créant une classe qui reboucle tant que je n'ai pas appuyé sur le bouton

                private void loop()
                {
                    /* code à répéter*/
                    if(!button)
                    {
                        loop();
                    }
                }

                Le problème c'est que le bouton d'arrêt et d'autres outils ne fonctionnent plus xD, je pense qu'il faut ajouter un truc pour mettre de la priorité

                Lance la boucle dans un nouveau thread

                • Partager sur Facebook
                • Partager sur Twitter
                  11 mars 2019 à 22:09:41

                  NextrieSH a écrit:

                  Vertinhol a écrit:

                  bacelar a écrit:

                  Windows n'est pas un OS temps-réel.

                  Il y a de chance que l'usage d'un simple timer ne suffise pas.

                  C'est quoi la finalité de votre machin ?


                  je veux collecter des données de ma carte arduino et les afficher sous forme de courbe, j'ai réussi à supprimer la fonction Timer en créant une classe qui reboucle tant que je n'ai pas appuyé sur le bouton

                  private void loop()
                  {
                      /* code à répéter*/
                      if(!button)
                      {
                          loop();
                      }
                  }

                  Le problème c'est que le bouton d'arrêt et d'autres outils ne fonctionnent plus xD, je pense qu'il faut ajouter un truc pour mettre de la priorité

                  Lance la boucle dans un nouveau thread

                  Merci pour le tuyau je pense que ça va être chaud xD 

                  • Partager sur Facebook
                  • Partager sur Twitter
                  "C'est un coup du sort étrange : tout les hommes dont on a ouvert le crâne avaient un cerveau" . Wittgenstein.
                    12 mars 2019 à 10:44:31

                    Les threads est une solution logique, mais je trouve le PO un peu "tendre" pour ça.

                    Le "problème" à résoudre ne me parait pas nécessiter de ces "rocket sciences".

                    C'est de l'affichage de données simple non ?

                    Votre arduino, il balance les informations sur un port série/COM ou un port USB mappé sur un port COM, non ?

                    Il suffit de lire ces informations comme depuis un fichier car l'OS se charge de la bufferisation.

                    De la lecture non bloquante et régulière sur ce fichier mappant le port COM et le tour est joué, tout à fait intégrable dans une boucle de message classique Windows, sans thread.

                    S'il faut "demander" à l'arduino les informations, mais qu'une dérive de quelques millisecondes n'est pas un problème, ce qui très généralement le cas, l'usage de la boucle à message reste largement plus simple.

                    Mais je ne ne vois pas le lien avec le sujet initial.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                    Mouse & Keyboard simulation

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    • Editeur
                    • Markdown