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

  1. #1
    Membre à l'essai
    Lancement Binaire Par Pression De Touche
    Bonjour à tous,

    Je poste à nouveau mon sujet dans la section de programmation appropriée afin, je l'espère, de bénéficier de quelques pistes supplémentaires. Voici mon premier sujet, dans la partie Windows : https://www.developpez.net/forums/d1...che-langage-c/

    En fait, je souhaite programmer un binaire qui tournerait en tâche de fond et qui n'exécuterait sa fonction principale que lors de la pression d'une combinaison de touches particulières. L'un des membres du forum m'a suggéré de faire un tour dans les API Windows, notamment en farfouillant un peu dans les résultats de recherche du terme ' GetMessage '. Ce que j'ai fait Malheureusement j'ai un peu l'impression de vagabonder ne pleine jungle : je ne parviens pas du tout à identifier par quoi commencer, et surtout qu'elles peuvent être les fonctions que je pourrais utiliser dans mon code. J'ai bien identifié l'ensemble de fonctions à importer (windows.h qui inclut notamment winuser.h et winbase.h), malheureusement je ne vois pas quoi faire de plus...

    Si quelqu'un pouvait m'aiguiller un peu plus précisément, je lui en serait reconnaissant.

    Apluss' et merci '

    Note : s'agissant de programmation système, est-ce que vous me conseillez de travailler sur VM - pour éviter les bêtises éventuelles - ?

  2. #2
    Expert éminent sénior
    Bonjour
    Citation Envoyé par .....1..... Voir le message
    Note : s'agissant de programmation système, est-ce que vous me conseillez de travailler sur VM - pour éviter les bêtises éventuelles - ?
    Oui certainement (perso j'ai 7 VM différentes dans différents OS). Mais ce n'est pas pour éviter les bêtises (encore que ça y aide) mais surtout pour pouvoir tester dans différentes configs et pouvoir revenir à zéro si besoin (j'ai une sauvegarde de mes VDI à l'état "os vierge")...

    Sinon pour ta question principale, désolé je programme pas sous zindow.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  3. #3
    Membre à l'essai
    Hello, merci pour ta réponse.

    Ça marche, à l'occasion j'installerai de quoi coder sur l'une de mes VMs.

    J'ai jeté un œil à ton tuto sur la programmation Shell : c'est un sacré boulot !! Comme je suis obligé de bosser sur Linux, je vais le suivre tranquillement le temps de trouver une idée de programme C à écrire pour Debian Car le seul truc que je trouve sont les tuto's et exercices " classiques habituels "...

    Apluss'

    Edit : je viens de voir ton billet sur le jeu de la fourmi, ça à l'air sympa aussi

  4. #4
    Membre expérimenté
    Bonjour,

    Pour compléter la réponse de Sve@r,la façon la plus esthétique de répondre à ton problème est d'utiliser l'interception driver. http://www.oblita.com/interception.html

    Ce driver te permet très simplement de faire ce que tu veux et bien plus.

    Voici l'exemple de base:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <interception.h>
    #include "utils.h"
     
    enum ScanCode
    {
        SCANCODE_X   = 0x2D,
        SCANCODE_Y   = 0x15,
        SCANCODE_ESC = 0x01
    };
    int main()
    {
        InterceptionContext context;
        InterceptionDevice device;
        InterceptionKeyStroke stroke;
        raise_process_priority();
        context = interception_create_context();
        interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP);
        while(interception_receive(context, device = interception_wait(context), (InterceptionStroke *)&stroke, 1) > 0)
        {
            if(stroke.code == SCANCODE_X) stroke.code = SCANCODE_Y;
            interception_send(context, device, (InterceptionStroke *)&stroke, 1);
            if(stroke.code == SCANCODE_ESC) break;
        }
        interception_destroy_context(context);
        return 0;
    }


    Dans cet exemple, si tu écris x au clavier, il va être intercepté et remplacé par un y. Mais à la place d'envoyer un y tu peux juste executer un programme (voir _execve sous windows).

    Pour info, tu peux aussi t'en sortir avec autohotkeys. Mais c'est clairement mieux d'utiliser le driver d'interception!

    Bonne programmation.

  5. #5
    Membre à l'essai
    Salut emixam16, merci pour ta réponse, je regarde tout ça !!