Partage
  • Partager sur Facebook
  • Partager sur Twitter

Macro en parallèle de l'application

Sujet résolu
    4 septembre 2018 à 17:11:01

    Bonjour,

    Je suis débutant et je suis en train de créer une petite application pour m'exercer sur les notions apprises sur ce site.

    Mon appli fait quelques trucs (lit des fichiers txt, récupère des mots et les transforme en variable, utilise ces variables pour lancer des fonctions etc...)

    J'ai programmé plusieurs macros (détecter quand une touche du clavier ou un bouton de souris est pressé, puis lancer des fonctions et/ou mettre à jour des valeurs de variables). Ces macros sont dans un autre script à part. Pour créer une macro je dois : je dois créer une loop infinie où mes instructions sont d'écouter une touche précise et si elle est pressée faire une certaine action.

    Maintenant, comment depuis mon main, lancer cette fonction de mcaro mais ne pas attendre qu'elle se finisse pour continuer mon script ? Sinon j'ai pas fini d'attendre et ça va bloquer le déroulement de mon main et la suite ne se jouera pas. 

    Du coup, si quelqu'un sait comment faire tourner en fond, indéfiniment une fonction (à part si j'actualise ses attributs, ça la redemarre en les prenant en compte), tout en laissant le script mère et les autres s'effectuer ce serait super cool de me le dire ;)

    Merci à vous et bonne journée.

    • Partager sur Facebook
    • Partager sur Twitter
      4 septembre 2018 à 17:20:24

      Lu'!

      Apprenti codeur a écrit:

      Je suis débutant et je suis en train de créer une petite application pour m'exercer sur les notions apprises sur ce site.

      Changes de cours. Il apprend un sacré paquet d'âneries à ne pas faire, en plus de montrer des exemples de code buggés et d'être obsolète (quelques recherches sur le forum t'en diront plus). Prends plutôt le cours de Zeste de Savoir, ou encore le cours de C++ de @gbdivers, même s'il est encore en écriture il ne contient pas ce genre de bavures. Si tu as des problèmes de compréhension sur une partie et que ce n'est pas à cause d'un manque d'étude du cours, tu peux poster ici. Si tu préfères un cours déjà complet, tourne toi vers le C++ Primer de Lippman dans sa dernière édition (en anglais), il sera un poil moins à jour mais c'est un bon cours.

      Concernant ton problème, c'est assez peu précis. Tu utilises quoi pour recevoir tes inputs ? Comment gardes-tu le focus sur ta fenêtre ?

      Note de vocabulaire : tu n'écris pas de script en C++.

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        4 septembre 2018 à 18:17:57

        Pour commencer, merci de ta réponse et de ta réactivité !

        Oui, j'ai lu ça. Du coup j'avais trouvé ce cours : http://guillaume.belz.free.fr/doku.php?id=programmez_avec_le_langage_c.

        Mais en fait je suis retourné sur le cours du zéro parce que je le trouvais plus pédagogue. Je me suis juste rendu compte que j'avais plus envie d'apprendre sur celui ci que l'autre. Je jetterai un oeil sur les autres cours que tu m'as fourni.

        En tout cas, merci de l’avertissement et des liens. C'est sympa ;)

        J'utilise ceci pour surveiller l'état de la touche de déclenchement :

        if (GetAsyncKeyState(0x51))
                {
                    Sendakey();
                }
        
        

        J'utilise ceci pour émuler la frappe de la touche : (même si j'ai encore du mal à trouver comment rester appuyé)

        void Sendakey()
        {
           INPUT ip;
        
           ip.type = INPUT_KEYBOARD;
           ip.ki.wScan = 0;
           ip.ki.time = 0;
           ip.ki.dwExtraInfo = 0;
        
           ip.ki.wVk = 0x12; // Hex code for 'A'
           ip.ki.dwFlags = 0; //Press the key down ?
           SendInput(1, &ip, sizeof(INPUT)); //Use function
        
           Sleep(50); //Sleep so it doesn't spam the key press
        
           ip.ki.dwFlags = KEYEVENTF_KEYUP; //Release the key
           SendInput(1, &ip, sizeof(INPUT)); //Use function
        }

        Par la suite, je passerai en attribut le code virtuel de la touche. Ca par exemple, j'aimerais que ça s'execute en boucle.

        Quand au focus sur la fenêtre... Ben, pour l'instant je suis en mode console et je n'ai défini aucune fenêtre... Du coup, si je crée une boucle infinie : ça fonctionne tout le temps et sur toutes les fenêtres.

        Désolé pour le manque d'info, je ne pensais pas que vous en auriez besoin, je m'attendais plus à une réponse du type : si tu retournes "trucspecial" ton programme principal continue de s’exécuter une fois reçu tandis que ton programme secondaire lui aussi continue sa boucle. 

        -
        Edité par Apprenti codeur 4 septembre 2018 à 18:20:13

        • Partager sur Facebook
        • Partager sur Twitter
          4 septembre 2018 à 19:17:43

          Salut,

          J'ai pas vraiment compris ce que tu essaies de faire mais de ce que j'ai compris, c'est un de ces cas :

           - Soit tu as deux programmes qui sont lancés et le second veut forcer un comportement du premier, il faut que tu utilises de la communication inter-processus (IPC), ça ressemble à de la shared memory, un pipe, l'api de DBus ou des signaux sous Linux, je sais pas comment c'est fait sous Windows, ou bien même une communication IP sur 127.0.0.1

           - Soit ton programme lance un traitement particulier en parallèle lorsqu'il a détecté quelque chose, il s'agit alors du multithreading, où le même programme lance différents traitements en parallèle

          • Partager sur Facebook
          • Partager sur Twitter
          Dream on, Dream on, Dream until your dream comes true
            4 septembre 2018 à 22:23:27

            Salut romantik,

            Effectivement, en parallèle je faisais des recherches et avec les mots clefs "function running background c++" J'ai fini par mettre des mots sur ce que je cherche et c'est exactement ça : le multithreading ! Et j'ai même trouvé un tuto et en français s'il vous plait : https://bousk.developpez.com/cours/multi-thread-mutex/

            Voilà si quelqu'un d'autre en a besoin...

            En tout cas merci beaucoup romantik ! Grace à ce terme je peux maintenant classer ce sujet ! Bye bye ;)

            • Partager sur Facebook
            • Partager sur Twitter

            Macro en parallèle de l'application

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown