Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

Geschrieben

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]

Geschrieben

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]

Geschrieben

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? ;)

Geschrieben
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 :D

Danke:)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...