Globaler Hotkey in der Konsolenanwendung
Posted: 13 Jan 2025, 12:02
Weiß jemand, wie man die API-Aufrufe RegisterHotKey/UnregisterHotKey in einer Konsolenanwendung verwendet? Ich gehe davon aus, dass das Einrichten/Entfernen des Hotkeys dasselbe ist, aber wie erhalte ich den Rückruf, wenn die Taste gedrückt wurde?
Jedes Beispiel, das ich sehe, ist für Winforms und verwendet protected override void WndProc(ref Message m){...}, das nicht verfügbar ist Ich.
Update: Was ich habe, ist unten, aber das Ereignis wird nie getroffen. Ich dachte, es könnte daran liegen, dass beim Laden von ConsoleShell die weitere Ausführung blockiert wird, aber selbst wenn ich SetupHotkey in einen anderen Thread einfüge, passiert nichts. Irgendwelche Gedanken?
Jedes Beispiel, das ich sehe, ist für Winforms und verwendet protected override void WndProc(ref Message m){...}, das nicht verfügbar ist Ich.
Update: Was ich habe, ist unten, aber das Ereignis wird nie getroffen. Ich dachte, es könnte daran liegen, dass beim Laden von ConsoleShell die weitere Ausführung blockiert wird, aber selbst wenn ich SetupHotkey in einen anderen Thread einfüge, passiert nichts. Irgendwelche Gedanken?
Code: Select all
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(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);
}
}