ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
444
444
EMPFEHLEN
-
07.11.11 21:38 #1
Hallo
Eine Frage: GetAsyncKeyState möchte ich, dass es erst true liefert wenn ich die Taste losgelassen habe.
Mit Folgendem Code: if( GetAsyncKeyState(VK_CONTROL) &0x1000) habe ich das problem ( in der Reder schliefe) Das wenn ich die taste gedrückt halte es immer wieder ausgeführt wird( die if verzweigung)
Wie löse ich das?
Windows, C++
DankeFehlermeldung bitte!
Google - Dein Freund und Helfer
-
07.11.11 21:43 #2
Hallo,
Bin mir nicht ganz sicher, aber ich würde es mit einer While-Schlaufe versuchen:
if(Gedrückt)
{
while(Gedrückt){}
// Weiterfahren, Taste losgelassen
}
De HandlerPascal-Müller.ch, meine Bilder.
-
Hi
@deHandler: Das ist ja eben das Problem.
Ich vermute mal, die "Reder schliefe" soll noch was machen.
Deine Lösung blockiert alles.
Und noch ein Hinweis auf die Codetags: [cpp]...[/cpp].
@Msvc++:
a) Mach zusätzlich eine Variable, die den letzten bekannten Tastenstatus speichert.
Wenn GetAsyncKeyState "nicht gedrückt" liefert und die Variable aber auf "gedrückt"
steht, ist die Taste gerade losgelassen worden.
b) kA., unter welchen Bedingungen du entwickelst,
aber was wäre mit WM_KEYUP?
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
08.11.11 18:50 #4
Hallo,
Im folgenden Code wird der Programmablauf nicht mehr gesperrt. Die Funktion kann aber nur für eine Taste verwendet werden. (Da nur eine Variable)
Den Code hab ich getestet. sollte also funktionieren.
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#include <windows.h> #include <stdio.h> bool bKPress = false; // Globale Variable, zum Speichern ob beim letzten Durchgang gedrückt wurde bool KeyUp( int vKey) { if( GetAsyncKeyState( vKey ) ) { bKPress = true; } else { if( bKPress ) { bKPress = false; return true; } } return false; } int main() { while(!KeyUp ( VK_CONTROL )) {} // Ja hier wird blockiert, irgendwas muss das // Beispiel auch machen printf("CTRL losgelassen"); system("pause"); }
@sheel, hab nur php-Tags gefunden.Pascal-Müller.ch, meine Bilder.
-
15.11.11 19:28 #5
- Registriert seit
- Mar 2011
- Beiträge
- 15
Hier ist noch ein Beispiel für mehrere Tasten.
In der While - schleife können dann noch sonstige gewünschte Prozesse ausgeführt werden, ohne, dass das Programm blockiert.
Im enum sind auch noch mal die States von GetAsyncKeyState() definiert.
Doku: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#include <windows.h> enum { MAX_KEY = 128, TOGGLE = -32767, NOT_PRESSED = 0 }; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hprev, LPSTR CmdLn, int CmdShow) { short state = 0; int proceed = 1; short key = 0; short keypressed[MAX_KEY]; // initialize it with 0 values while (proceed) //as long as proceed != 0 watch the state of Keys { for (key = 1; key < MAX_KEY; key++) // instead of for loob one specified key can be monitored { state = GetAsyncKeyState(key); if (state <= TOGGLE) { if (keypressed[key] == 0) { //proceed given Key from for loop when first time pressed keypressed[key] = 1; } } else if (state >= NOT_PRESSED) { if (keypressed[key] != 0) { //proceed Key after state TOGGLE has been released keypressed[key] = 0; } } } Sleep(5); } }
Ähnliche Themen
-
Gedrückt-halten- und Loslassen-Funktionen
Von Wiz im Forum Flash PlattformAntworten: 3Letzter Beitrag: 24.10.11, 16:50 -
Tabindex statt Tab-Taste mit Enter-Taste
Von tanjahouse im Forum Javascript & AjaxAntworten: 10Letzter Beitrag: 19.11.09, 10:06 -
Fenster beim loslassen (onRelease) zurücksetzen/bewegen ?!
Von angelikamorgan im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 24.06.08, 20:24 -
Wie auf SWT.Min Ereignis reagieren?
Von Ronin-Jay im Forum JavaAntworten: 2Letzter Beitrag: 20.04.07, 13:58 -
Greifer soll loslassen...
Von redybull im Forum Cinema 4DAntworten: 16Letzter Beitrag: 02.08.04, 11:29





Zitieren

Login






