Touche d'accès rapide à l'application de la console
Personne ne sait comment utiliser le RegisterHotKey/UnregisterHotKey appels de l'API dans une application console? Je suppose que la mise en place/retrait de la touche de raccourci est le même, mais comment puis-je obtenir de l'appellent en arrière quand la touche a été pressée?
Chaque exemple je vois, c'est pour Winforms, et utilise protected override void WndProc(ref Message m){...}
, qui n'est pas disponible pour moi.
mise à jour: ce que j'ai est en dessous, mais l'événement n'est jamais atteint. J'ai pensé qu'il pourrait être parce que lorsque vous chargez ConsoleShell il ne bloque la poursuite de l'exécution, mais même si j'ai mis SetupHotkey
dans un thread différent, rien ne se passe. Toutes les pensées?
class Program
{
static void Main(string[] args)
{
new Hud().Init(args);
}
}
class Hud
{
int keyHookId;
public void Init(string[] args)
{
SetupHotkey();
InitPowershell(args);
Cleanup();
}
private void Cleanup()
{
HotKeyManager.UnregisterHotKey(keyHookId);
}
private void SetupHotkey()
{
keyHookId = HotKeyManager.RegisterHotKey(Keys.Oemtilde, KeyModifiers.Control);
HotKeyManager.HotKeyPressed += new EventHandler<HotKeyEventArgs>(HotKeyManager_HotKeyPressed);
}
void HotKeyManager_HotKeyPressed(object sender, HotKeyEventArgs e)
{
//never executed
System.IO.File.WriteAllText("c:\\keyPressed.txt", "Hotkey pressed");
}
private static void InitPowershell(string[] args)
{
var config = RunspaceConfiguration.Create();
ConsoleShell.Start(config, "", "", args);
}
}
Vous devez vous connecter pour publier un commentaire.
Ce que vous pouvez faire est de Créer une fenêtre masquée dans votre application Console qui est utilisé pour gérer les raccourcis de notification et de déclencher un événement.
Le code ICI démontre le principal. ICI est un article sur la gestion des messages dans une application Console, à l'aide de ce que vous devriez être en mesure de renforcer HotKeyManager à exécuter dans une Application Console.
La mise à jour suivante à la HotKeyManager crée un thread d'arrière-plan qui exécute la boucle de message et gère les messages windows.
Voici un exemple d'utilisation de HotKeyManager partir d'une application Console
ManualResetEvent
etInterlocked.Increment
ici? Merci!if-else
? exemple:if(Keys.A, KeyModifiers.Alt) {...} etc else
??!Je voulais juste offrir une solution alternative.
J'ai été de répondre à une question pour quelqu'un qui a été à l'aide de ce script et j'ai pensé que cela pourrait aider quelqu'un d'autre qui a de la difficulté à mettre en place une clé globale crochet.
Edit: N'oubliez pas d'ajouter une référence à
System.Windows.Forms
Vous pouvez le faire en sélectionnant
Project
Add Reference
et la vérification deSystem.Windows.Forms
Je suis venu avec une solution basée sur Chris réponse qui utilise WPF au lieu de WinForms:
Pour l'utiliser, vous devez ajouter des références à PresentationFramework.dll et WindowsBase.dll.
Changé le HotKeyManager classe
Classe HotKeyEventArgs:
Et classe: HotKeyEventArgs