Guybrush Threepwood Geschrieben 3. August 2004 Geschrieben 3. August 2004 Wie stelle ich innerhalb meiner KeyboardProc fest ob Strg+Q gedrückt wurde? Zitieren
Klotzkopp Geschrieben 4. August 2004 Geschrieben 4. August 2004 Du könntest mit GetAsyncKeyState den Zustand der Strg-Taste prüfen, jedesmal, wenn im Hook ein Q ankommt. Alternativ kannst du den Zustand der Strg-Taste im Hook "verfolgen". Zusätzlich solltest du den Zustand der Umschalt- und Alt-Tasten berücksichtigen, falls du nicht auch bei Umschalt-Strg-Q usw. reagieren willst. Zitieren
Guybrush Threepwood Geschrieben 4. August 2004 Autor Geschrieben 4. August 2004 So in der Art hab ichs versucht, also wenn in wParam ein Q drin steht und GetAsyncKeyState sagt das Strg gedrückt ist. Allerdings hat das nicht hingehauen weil die Keyboardproc so immer 2 mal aufgerufen wurde: Das Erste mal wenn ich Strg gedrückt habe und das Zweite mal bei Q. Zitieren
Klotzkopp Geschrieben 4. August 2004 Geschrieben 4. August 2004 Allerdings hat das nicht hingehauen weil die Keyboardproc so immer 2 mal aufgerufen wurde: Das Erste mal wenn ich Strg gedrückt habe und das Zweite mal bei Q. Das ist ja auch zu erwarten. Ich verstehe nicht, wo da das Problem liegt. Zitieren
Guybrush Threepwood Geschrieben 4. August 2004 Autor Geschrieben 4. August 2004 Klar ist das zu erwarten:) Das Problem ist doch das es keinen Aufruf von Keyboardproc mit Strg+Q gibt, sondern nur mit Strg oder Q. Ich kann so also nur feststellen ob eine der beiden Tasten gedrückt wurde und nicht ob beide zusammen gedrückt wurden. Zitieren
Klotzkopp Geschrieben 4. August 2004 Geschrieben 4. August 2004 Aber du kannst doch, wie gesagt, mit GetAsyncKeyState testen, ob die Strg-Taste gerade gedrückt ist, wenn ein Q in deiner Keyboardproc aufschlägt. Zitieren
Guybrush Threepwood Geschrieben 4. August 2004 Autor Geschrieben 4. August 2004 Hab ich, wie gesagt probiert, ging aber nicht. Vielleicht war aber auch einfach nur was falsch, aber ich denke das es so theoretisch gehen müsste: if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode)) { if (GetAsyncKeyState(VK_CONTROL) && wParam == 'q') { //... } } [/PHP] Zitieren
Klotzkopp Geschrieben 4. August 2004 Geschrieben 4. August 2004 1. Der Virtual Key Code für die Q-Taste entspricht dem ASCII-Code des großen Q. 2. Der Rückgabewert von GetAsyncKeyState ist nicht einfach nur 0 oder != 0, sondern trägt zwei Informationen im MSB und LSB. Für den aktuellen Zustand ist das MSB entscheidend, also: if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode)) { if ((GetAsyncKeyState(VK_CONTROL) [b]& 0x8000[/b]) && wParam == '[b]Q[/B]') { //... } } [/CODE] Zitieren
Guybrush Threepwood Geschrieben 4. August 2004 Autor Geschrieben 4. August 2004 So gehts, danke Aber kannst du mir die Bitverknüpfung mal erklären, das hab ich noch nie kapiert: GetAsyncKeyState(VK_CONTROL) & 0x8000 [/PHP] Zitieren
Klotzkopp Geschrieben 4. August 2004 Geschrieben 4. August 2004 Das ist doch das gleiche, was du mit dem LPARAM machst: Durch die Und-Verknüpfung werden alle Bits, die in der so genannten Maske (hier: 0x8000) nicht gesetzt sind, ausgeblendet. Nur die Bits, die in der Maske und im Vergleichswert gesetzt sind, kommen durch. GetAsyncKeyState gibt einen SHORT zurück, das ist ein 16-Bit-Wert. 0x8000 ist dual 1000 0000 0000 0000, also werden alle Bits bis auf das höchstwertige ausgeblendet. Im höchstwertigen Bit speichert GetAsyncKeyState den aktuellen Zustand der Taste. Alles klar? Zitieren
Guybrush Threepwood Geschrieben 4. August 2004 Autor Geschrieben 4. August 2004 Das ist doch das gleiche, was du mit dem LPARAM machst: Das ist nur kopiert :floet: Durch die Und-Verknüpfung werden alle Bits, die in der so genannten Maske (hier: 0x8000) nicht gesetzt sind, ausgeblendet. Nur die Bits, die in der Maske und im Vergleichswert gesetzt sind, kommen durch. GetAsyncKeyState gibt einen SHORT zurück, das ist ein 16-Bit-Wert. 0x8000 ist dual 1000 0000 0000 0000, also werden alle Bits bis auf das höchstwertige ausgeblendet. Im höchstwertigen Bit speichert GetAsyncKeyState den aktuellen Zustand der Taste. Alles klar? So langsam ergibt alles Sinn Danke:) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.