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 :

créer raccourci clavier pour une application console


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 21
    Points : 26
    Points
    26
    Par défaut créer raccourci clavier pour une application console


    Bonjour,

    Je cherche à créer des raccourcis au clavier pour une application console .

    Pourriez vous me mettre sur une piste afin que je puisse réaliser cela ?

    J'espère que j'aurai des réponses.
    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Points : 279
    Points
    279
    Par défaut
    La console n'a pas de hotkey.

    Tu peux toujours faire un thread qui loop sur Console.ReadKey() mais dans ce cas, tu ne pourra pas avoir de Console.ReadLine() ou Console.Read().
    Sauf si tu gère l'arrêt de ce thread et que tu le passe en read au moment voulu.

    Le thread te permettra uniquement d'écrire sur ta console ou d'exécuter du code en même temps que tu reste en écoute des hotkey mais pas d'écouter des infos et du texte.

    Je te donne un petit exemple simple pour illustrer :
    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
    private static bool continu = true;
    static void Main(string[] args) {
    	Thread t = new Thread(ThreadExec);
    	t.Start();
    	while (continu) {
    		ConsoleKeyInfo cki = Console.ReadKey(true);
    		if (cki.KeyChar == 'q') {
    			continu = false;
    		}
    		Console.WriteLine(cki.KeyChar);
    	}
    	Console.WriteLine("terminé");
    	Console.ReadLine();
    }
    private static void ThreadExec() {
    	while (continu) {
    		Thread.Sleep(2000);
    		Console.WriteLine("exécution du thread!");
    	}
    }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    j'ai essayé votre code,
    il ne marche pas.

    j’espère que j'aurai des bonnes réponses
    Merci

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Points : 279
    Points
    279
    Par défaut
    J'ai dis que c'était un exemple simple pour illustrer pas un code utilisable, c'est à toi de l'adapter à ce que tu veux en faire.

    Après il fonctionne très bien mais il faut rajouter les bons using et autre.
    Et il permet de récupérer la dernière clé dans le code que j'ai montré je ne fais que quitter en appuiant sur "q".

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Je comprend pas très bien ton code aussi .

    Peut-tu m'expliquer ton code s'il-te-plais.

    Merci.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Points : 279
    Points
    279
    Par défaut
    oui bien sûre.

    Alors déjà une petite explication de base sur les thread.
    Un thread te permet d'exécuter de manière parallèle et asynchrone du code.
    En gros, ton programme est un thread en lui-même et le fait de créer un thread dedans te permet de faire exécuter du code en simultané.

    En temps normal, le code va s'exécuter dans l'ordrede haut en bas, mais avec un thread lancé, la partie de code qui se trouve dans le thread s'exécutera en parallèle de la suite de ton code.

    Le thread prend le nom d'une méthode en paramètre et c'est cette méthode qui sera exécutée en parallèle.

    en gros, ça nous permet dans ce cas d'exécuter deux boucles en même temps.

    Pourquoi avoir besoin de deux boucles?
    Et bien parce que le Console.ReadKey() va mettre en attente l'exécution du code tant que tu n'as pas rentré une clé, et donc tant que tu n'appuie pas sur une touche le reste du code ne continuera pas à s'exécuter.

    Pour les hotkey, le but c'est de pouvoir les presser n'importe quand, ce qui veut dire qu'il faut qu'il y ait une partie en attente de ta hotkey, et une autre qui continue l'exécution de ton code (le thread dans ce cas).

    L'exemple que j'ai donné n'est pas utilisable en tant que tel parce qu'il ne fait rien en particulier à part écrire sur la console et attendre des hotkey en parallèle, mais il te montre le principe de son utilisation.

    Après, comme j'ai dit, le fait de te mettre en mode ReadKey() te met en attente de la prochaine clé.
    Tu ne peux donc pas faire de Console.Read() ou de Console.ReadLine() parce que ces méthodes ont le même fonctionnement que ReadKey(), ils vont mettre ton code en attente de la prochaine ligne de text et rentrer en conflit avec le Console.ReadKey().

    La seule solution que tu as si tu veux demander à l'utilisateur de rentrer des informations, c'est de désactiver temporairement le Console.ReadKey() et de passer en Console.ReadLine() mais c'est plus compliqué.
    C'est pour ça que dans mon exemple j'ai juste simulé l'exécution de code et non pas la lecture de texte dans la console.

    Sinon sache juste que la manière dont tu as répondu dans le poste qui suivait n'était pas adéquate.

    Sur ce forum nous somme bénévoles et ici pour aider les gens mais en aucun cas nous n'avons d'obligations de faire quoi que se soit.
    Nous ne somme pas non plus ici pour faire le code des autres mais pour leur donner les "outils" pour le faire.
    Si tu dis espérer avoir de bonnes réponses, alors qu'en plus le code de la personne fonctionne, mais que tu ne comprend pas comment l'utiliser, les gens ne t'aideront pas.
    Si tu ne comprend pas un code, demande simplement et il y a plein de gens qui t'aideront (soit en te donnant des tuto, soit en t'expliquant comme je viens de le faire).

    Sinon je te remet le code avec quelque commentaires :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    // je déclare une variable qui servira à faire une boucle tant qu'elle est à true
    private static bool continu = true;
    static void Main(string[] args) {
    	// ici je créé un thread (qui permet l'exécution parallèle de code)
    	// Le thread prend en paramètre la méthode qu'il doit exécuter en parallèle.
    	Thread t = new Thread(ThreadExec);
    	t.Start(); // je lance le thread.
    	// la je boucle tant que continue est à true.
    	while (continu) {
    		// Ici je met en attente d'une "Key" (touche ou combinaison de touches (CTRL+..., ALT+...)
    		ConsoleKeyInfo cki = Console.ReadKey(true);
    		// Quand une Key est pressée je vérifie si la touche est 'q'
    		if (cki.KeyChar == 'q') {
    			// si la touche est 'q' je met mon continue à false pour qu'il sorte de la boucle
    			// et qu'il arrete l'exécution du thread qui utilise aussi une boucle avec continu.
    			continu = false;
    		}
    		// à chaque Key j'écris sur la console la touche pressée.
    		Console.WriteLine(cki.KeyChar);
    	}
    	// j'écris terminé et je lis la prochaine clé pour pas que l'application se ferme tout de suite.
    	Console.WriteLine("terminé");
    	Console.ReadLine();
    }
     
    // ça, c'est la méthode qui est lancée par le thread et qui s'exécutera en parallèle de l'autre partie du code.
    private static void ThreadExec() {
    	// elle boucle aussi tant que continu est à true.
    	while (continu) {
    		// je simule l'exécution d'un code en mettant en pause pendant 2 secondes à chaque boucle.
    		Thread.Sleep(2000);
    		// et j'écris un message pour que tu puisse voir que le code s'exécute en parallèle.
    		Console.WriteLine("exécution du thread!");
    	}
    }
    Et encore un détail, pour utiliser les thread, tu dois ajouter un using tout en haut de ton code avec les autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Threading;
    C'est un namespace spécifique.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 21
    Points : 26
    Points
    26
    Par défaut
    Merci pour toute tes explications .
    Je doit maintenant quitter ce forum.

    Merci !

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

Discussions similaires

  1. Créer un GUI pour une application console compilée
    Par z4k4r14 dans le forum API, COM et SDKs
    Réponses: 11
    Dernier message: 19/03/2012, 22h15
  2. raccourcis clavier dans une application web
    Par Issam dans le forum ASP.NET
    Réponses: 6
    Dernier message: 08/09/2008, 16h11
  3. faire un GUI pour une application console
    Par Truth dans le forum C++Builder
    Réponses: 4
    Dernier message: 27/02/2008, 15h05
  4. Réponses: 1
    Dernier message: 18/06/2007, 16h10
  5. Créer un patch pour une application
    Par oneTime dans le forum Windows
    Réponses: 7
    Dernier message: 17/02/2007, 22h28

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