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
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
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!"); } }
Bonjour,
j'ai essayé votre code,
il ne marche pas.
j’espère que j'aurai des bonnes réponses
Merci
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".
Bonjour,
Je comprend pas très bien ton code aussi.
Peut-tu m'expliquer ton code s'il-te-plais.
Merci.
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 :
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
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!"); } }
C'est un namespace spécifique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part using System.Threading;
Merci pour toute tes explications.
Je doit maintenant quitter ce forum.
Merci !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager