C PC-Tasten auswerten

downbaesher

Cadet 3rd Year
Registriert
Mai 2011
Beiträge
49
Hallo zusammen,

ich benötige für ein Programm eine Tastatur-Auswertung.


Bisher hab ich die kbhit()-Funktion in Verbindung mit einem getch genutzt, ich möchte das ganze jetzt jedoch ausbauen.


Neue Anforderungen:

1. Ich muss auf das Loslassen einer Taste reagieren können
2. 2 gleichzeitig gedrückte Tasten sollten genauso ausgewertet werden können, als wäre nur 1 Taste gedrückt.



Ich bin bei meiner bisherigen Recherche auf die Funktion "GetKeyboardState()" gestoßen, die man anscheinend mit einem Feld auswerten kann und dabei den Zustand jeder Taste prüfen kann.
Ich habe allerdings nicht herausgefunden, ob man mit dieser Funktion auch in C arbeiten kann.


Wenn jemand eine einfachere bzw. komplett andere Lösung weiß, bin ich natürlich auch dankbar! :)
 
downbaesher schrieb:
Ich bin bei meiner bisherigen Recherche auf die Funktion "GetKeyboardState()" gestoßen, die man anscheinend mit einem Feld auswerten kann und dabei den Zustand jeder Taste prüfen kann.
Ich habe allerdings nicht herausgefunden, ob man mit dieser Funktion auch in C arbeiten kann.
Das ist eine Windows Funktion, die funktioniert nur unter Windows. Wenn du also auf einem Windows OS arbeitest kannst du GetKeyboardState() verwenden. Bevor man eine Funktion verwendet liest man sich aber die Dokumentation durch, für Windows Funktionen ist msdn die richtige Anlaufstelle. Also hier nachlesen: GetKeyboardState()

Gruß
BlackMark
 
Danke!

Ich kann auf der MSDN Seite allerdings auch keinen Hinweise zu C finden, ist auch nur eine C++ Syntax abgebildet.


Bist du Dir sicher, dass diese Funktion mit C funktioniert?
 
Du hast recht, es ist die C++ Syntax abgebildet, jedenfalls sagt das die Code Box in der der Code steht. Das ist aber nicht relevant. Die gesamte Win32 API ist C kompatibel ( und C++ kompatibel, aber das ist für dich egal ).

Diese Funktion funktioniert mit C, C++, C#, Delphi, Assembler, und so weiter. Jede Sprache mit der man DLL's laden und verwenden kann! In C musst du nur den entsprechenden Header inkludieren und gegen die richtige Library linken. Welche das sind steht auf der MSDN Seite. Wenn du das Visual Studio verwendest musst du wahrscheinlich nur den Header inkludieren, weil gegen User32 eigentlich standardmäßig gelinkt wird.

Gruß
BlackMark
 
Danke, die Header-Angabe hab ich gesehen auf der MSDN-Seite.

Sehr gut, dann hab ich schon mal einen Lösungsansatz :)


Einen zweiten hätte ich mir mittlerweile auch schon überlegt, dazu brauche ich aber die "Zykluszeit" von "kbhit()".

Höchstwahrscheinlich wird keiner wissen, was ich damit jetzt meine. Bin draufgekommen, dass man, wenn man mit kbhit arbeitet, eine Verzögerung von ca. 100 ms einbaut. Es kann natürlich auch sein, dass getch() nur alle (~) 100 ms ein Zeichen einliest. Irgendwo ist jedenfalls eine "Totzeit" dabei, wenn man in nachfolgender Form programiert:

Code:
if(kbhit)
{
  taste=getch;   //Taste = char Variable
}
switch(taste)
{
  case 'a': ...
  case 'b': ...
}

Hat da jemand einen Hinweis dazu, bzw. kann mir das erklären?
 
Ich nutz meistens GetAsyncKeyState, kommt aber immer darauf an was du damit vorhast. Hierbei ist halt der Vorteil, dass das Fenster nicht im Vordergrund sein Muss, jedoch muss man die meisten erhaltenen Codes erst "ummappen" auf das Keyboardlayout -> Google suchen.

LG Tigerass
 
Das wird ja alles reichlich kompliziert, trotzdem danke für eure Antworten! ;)
 
Zurück
Oben