C # Pfeil Tasteneingabe für eine Konsolen-App

8

Ich habe eine einfache Konsolen-App in C # geschrieben. Ich möchte in der Lage sein, Pfeiltasten zu drücken, damit ich dem Benutzer erlauben kann zu steuern. Wie erkenne ich Keydown / Keyup-Ereignisse mit einer Konsolen-App?

All mein Google hat zu Informationen über Windows Forms geführt. Ich habe keine GUI. Dies ist eine Konsolen-App (um einen Roboter über eine serielle Schnittstelle zu steuern).

Ich habe Funktionen geschrieben, um diese Ereignisse zu behandeln, aber ich habe keine Ahnung, wie man sich registriert, um die Ereignisse tatsächlich zu empfangen:

%Vor%

Das ist wahrscheinlich eine wirklich grundlegende Frage, aber ich bin ziemlich neu in C #, und ich brauchte diese Art von Eingabe nie zuvor.

Update: Viele schlagen vor, dass ich System.Console.ReadKey(true).Key verwende. Dies wird nicht helfen. Ich muss den Moment wissen, in dem eine Taste gedrückt wird, wenn sie losgelassen wird, mit Unterstützung für mehrere Tasten, die gleichzeitig gedrückt werden. Außerdem ist ReadKey ein blockierender Aufruf - was bedeutet, dass das Programm anhält und auf das Drücken einer Taste wartet.

Update: Es scheint, dass die einzige Möglichkeit, dies zu tun, die Verwendung von Windows Forms ist. Das ist ärgerlich, da ich es nicht auf einem kopflosen System verwenden kann. Die Eingabe einer Formular-GUI für Tastatureingaben ist ... dumm.

Aber für die Nachwelt, hier ist meine Lösung. Ich habe ein neues Formular-Projekt in meiner .sln erstellt:

%Vor%

Beachten Sie, dass, wenn Sie eine Taste gedrückt halten, KeyDown mehrmals aufgerufen wird und KeyUp nur einmal aufgerufen wird (wenn Sie es freigeben). Sie müssen also wiederholt wiederholte KeyDown-Anrufe behandeln.

    
Tim 04.12.2010, 00:52
quelle

6 Antworten

14

Ein bisschen spät, aber hier ist, wie Sie auf den Tastaturstatus in einer Konsolenanwendung zugreifen können.

Beachten Sie, dass es nicht der gesamte verwaltete Code ist, da GetKeyState aus User32.dll importiert werden.

%Vor%     
Ergwun 22.07.2011, 07:04
quelle
4
%Vor%

oder ein anderes Beispiel, nur für Ihren Fall:

%Vor%     
The Smallest 04.12.2010 00:57
quelle
2
%Vor%

Sie könnten das in eine Drehung versetzen, etwa so:

%Vor%     
Rushyo 04.12.2010 01:00
quelle
0

Beispielcode:

%Vor%     
BrokenGlass 04.12.2010 00:58
quelle
0

Sie können dies tun

%Vor%     
Sagiv Oulu 15.12.2013 22:48
quelle
0

Ich habe das gleiche Problem, das Sie und ich hier gefunden haben, einen interessanten Beitrag mit Aufgaben. Der ursprüngliche Beitrag kann hier gefunden werden: C # -Konsolenanwendung - Wie funktioniert das? Ich lese immer Eingaben von der Konsole?

Ich muss einen PWM-Ausgang über einen Raspberry GPIO emulieren (mit Mono C #), um eine LCD-Hintergrundbeleuchtung zu testen. Mit zwei einfachen Tasten wollte ich das Tastverhältnis ändern (hoch / runter) und eine extra Taste um das Programm anzuhalten.

Ich habe das versucht (Variablen):

%Vor%

Hauptprogramm:

%Vor%

Wenn das Tastverhältnis erhöht werden muss, bewirkt das Drücken der Taste "W", dass die Hauptaufgabe die Tastverhältnisvariable (Tastverhältnis) ändert; das Gleiche mit "S" Taste zu dekrementieren. Das Programm endet, wenn die Taste 'X' gedrückt wird.

    
Hagen 18.01.2017 05:21
quelle