Ich möchte gerne überprüfen ob 2 Tasten gleichzeitig gedrückt wurden.
if(e.KeyCode==Keys.Up&&e.KeyCode!=Keys.A)
So geht es leider nicht aber wie sonst?
PS:Habe schon in der API und hier gesucht aber nix gefunden X(
Hier mal ein Beispiel, was Alt + F4 unterdrückt.
private void Form_KeyDown( object sender, KeyEventArgs e )
{
if( e.KeyData == ( Keys.Alt | Keys.F4 ) )
e.Handled = true;
}
--> Verschoben nach Windows Forms.
Hallo alf468!
Leider geht das mit den Tasten nicht.
Es gibt da aber eine Möglichkeit dies zu überprüfen:
if(e.KeyCode==Keys.Up || e.KeyCode!=Keys.A)
{
bool validate = false;
if (e.KeyCode==Keys.Up)
{
// Überprüfe nun das Zeichen im Tastaturpuffer, welches direkt nach dem "UP"
// gefolgt ist und vergleiche es mit "A"
if (XXX = "A")
{ validate = true; }
}
else
{
// Überprüfe nun das Zeichen im Tastaturpuffer, welches direkt nach dem "A"
// gefolgt ist und vergleiche es mit "UP"
if (XXX = "UP")
{ validate = true; }
}
if (validate)
{
// tu was du willst
}
}
Wie man den tastaturpuffer abruft, hab ich keine Ahnung!
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Das ist mir klar nur wie geht das wenn ich A+S drücke?
Edit:
norman_timo werde dein Tipp mal probieren
Hast Du meinen Post gesehen und mal versucht Alt durch A und F4 durch S zu ersetzen?
Original von Noodles
Hast Du meinen Post gesehen und mal versucht Alt durch A und F4 durch S zu ersetzen?
Ja und das geht nicht
Problem ist, dass das Drücken von A das Event schon ausgelöst wird, und glaub mir, Du schaffst es nicht diese Tasten wirklich GLEICHZEITIG zu drücken, und selbst wenn Dir das gelingt, arbeitet die Tastatur die Tasten mit einer Priorität ab, und nur einer gewinnt.
Shift, Control oder ähnliche Tasten bilden Sonderfunktionen, die eine Tastatureingabe verändern!
Hoffe jetzt ist es klar?
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Ich wollte eigentlich testen ob es möglich ist ein Label über die Forum zu "jagen".
Hoch,runter,rechts,links ist kein Problem aber wenn ich es nun schräg laufen lassen will ? Dazu muss der Anwender ja 2 Tasten gleichzeit drücken 🤔
@Timo Was meinst du mit Tastaturpuffer ?
Jede Tastatureingabe wird in einem Puffer landen, damit keine Taste nicht registriert wird.
Das soll heißen, wenn Du z.B. einen Rechenintensiven Prozess hast, und dann versuchst nebenher im Notepad einen Text zu schreiben, dann kann es vorkommen, dass Deine Eingaben "nachlaufen", also erst nach einer Sekunde auf einen Rutsch als Buchstaben auf dem Bildschirm erscheinen.
Das Bedeutet, dass alle Tastatureingaben irgendwo zwischengespeichert werden, und eine Applikation sie Schritt für Schritt abrufen muss.
Diese Zwischenspeicherung ist hier der Tastaturpuffer.
Aber wie gesagt, ich weiß leider nicht, wie man in .NET auf diesen zugreifen kann (vielleicht sowas wie Key x = Key.GetNextKey(); oder so etwas in der Art...)
Hast Du das damit verstanden?
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
GetAsyncKeyState() aus user32.dll:
[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(Keys vKey);
Allerdings muss man hier jeden Key einzeln prüfen.... Keys ist eine Aufzählung aus System.Windows.Forms.
Tendenziell ist wohl auch nicht jede Kombination von Tasten möglich, hängt von der Tastatur ab.
Hallo zusammen,
Thread nur überflogen, ich hoffe der Vorschlag kam noch nicht:
Das geht auch mit .NET-Mitteln. Man muss einfach selber mitrechnen. Zwei boolsche Variablen, für jeden Key eine. In KeyDown setzt man die entsprechende Variable auf true, in KeyUp auf false. Sind am Ende von KeyDown beide Variablen true, sind gerade beide Tasten gedrückt.
Ich halte das auch für die einzige sinnvolle Lösung. Das mit dem TatstaturPuffer ist nicht zielführend. Im hier beschriebenen Sinne (also GetNextKey o.ä.) würde sowas nur bei Konsolenanwendungen funktionierten. Bei Windows-Forms-Anwendungen gibt es in diesem Sinne keinen Tastaturpuffer, sondern eben nur Tastatur-Ereignisse.
herbivore