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 :

Lancement Binaire Par Pression De Touche


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 64
    Points : 24
    Points
    24
    Par défaut 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
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    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 «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 64
    Points : 24
    Points
    24
    Par défaut
    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 chevronné
    Avatar de emixam16
    Homme Profil pro
    Chercheur en sécurité
    Inscrit en
    Juin 2013
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chercheur en sécurité

    Informations forums :
    Inscription : Juin 2013
    Messages : 333
    Points : 1 828
    Points
    1 828
    Par défaut
    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
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 64
    Points : 24
    Points
    24
    Par défaut
    Salut emixam16, merci pour ta réponse, je regarde tout ça !!

Discussions similaires

  1. Lancement Binaire Par Pression De Touche (Langage C)
    Par .....1..... dans le forum Windows
    Réponses: 5
    Dernier message: 19/08/2019, 13h19
  2. lancement application par une touche
    Par 83stef dans le forum Java ME
    Réponses: 2
    Dernier message: 15/10/2008, 21h51
  3. Réponses: 1
    Dernier message: 09/02/2007, 09h50
  4. Réponses: 3
    Dernier message: 25/09/2006, 20h35
  5. Réponses: 10
    Dernier message: 01/12/2003, 23h17

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