Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Tasten gleichzeitig drücken

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.09.2003, 09:06 Uhr
~Dirk22
Gast


Hallo,

ich lese gerade den Petzold und bin beim Kapitel Tastatur. Es ist sehr interessant, was er darüber schreibt, und auch insgesamt finde ich dieses Buch sehr lohnenswert bisher. Nun würde mich allerdings interessieren, wie ich auf eine Benutzereingabe reagieren kann, bei der Tasten gleichzeitig gedrückt werden. Zum Beispiel möchte ich auf eine Eingabe reagieren, bei der die Taste A und B gleichzeitig gedrückt ist. Falls die Tasten hintereinander gedrückt werden, soll nicht darauf reagiert werden. Es soll wirklich nur darauf reagiert werden, wenn der Benutzer die Tasten gleichzeitig drückt.
Wie mache ich so etwas?

Mein eigener Ansatz sieht folgendermassen aus:
Es ist im Prinzip nicht möglich für Windows dass zwei Tasten genau zur selben Zeit gedrückt werden. Entweder wird die Nachricht für das a oder das b zuerst in der Systemwarteschlange sein. Wenn ich nun mit Hilfe von GetMessageTime den Abstand zwischen den beiden Nachrichten ermittle und dieser sehr gering ist, dann kann ich davon ausgehen, dass der Benutzer die Tasten gleichzeitig gedrückt hat. Und nur dann werde ich darauf reagieren.

Ist dieser Ansatz vom Prinzip her richtig oder falsch? Oder gibt es eine andere Möglichkeit? Ein Beispiel mit etwas Code, wie man auf gleichzeitige Tastendrücke reagiert wäre super.

Vielen Dank im Voraus

Dirk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.09.2003, 11:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du kannst den Status aller Tasten gleichzeitig abfragen (GetKeyboardState) Der Funktion übergibst du ein BOOL[256] Array. Dann kannste in diesem Array genau abfragen welche Tasten gleichzeitig gedrückt sind.

Ansonsten wäre deine Möglichkeit auch nicht schlecht
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.09.2003, 16:31 Uhr
Oliver
S2-Pixelgeneral


Oder falls du Speicher sparen willst kannst du es auch so machen:


C++:

if(GetKeyState(VK_deineTaste1)<0&&GetKeyState(VK_deineTaste2)<0)
machedasunddas;




Das sogenannte "BOOL" Array (int besser gesagt) würde ja 1024 Byte fressen .
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.09.2003, 16:50 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ich denke mal das deine Lösung ab 4 Tasten gleichzeitig SEHR inperformant werden wird
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.09.2003, 17:32 Uhr
Oliver
S2-Pixelgeneral


Ja, aber ich denke bei 2 Tasten ist der Speicher ein bisschen verschwendet
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: