03. september 2003 - 13:42Der er
5 kommentarer og 1 løsning
Hvordan anvendes GetAsyncKeyState og GetKeyState API-erne
Jeg forsøger -lige p.t. forgæves- at bruge d.o. funktioner til at check om CAPS & NUM er "toggled", ligesom jeg gerne ville kunne skelne mellem 'Alt+a', 'a' og 'A':
#include <windows.h> #include <conio.h>
int main(void) { int key; do { if ((key = getch()) == 0) key = getch() << 8; cprintf("\r\nTast \'%c\' = %04x", (char)key, key); if (GetKeyState(VK_CAPITAL) & 0xFFFF) cprintf(" CAPS er ON."); } while (key != 0x1B); return 0; }
Jeg synes jeg har prøvet alle kombinationer nu, men kan ikke få det til at virke - er der nogen af jer der har et fungerede eksempel. (jeg anvender BCB 4.0)
soreno >> Jeg har faktisk prøvet alle de eksempler man kan finde gennem d.o. link, men ingen af dem virker ! Der er simpelthen INGEN reaktion fra tastaturet.
Jeg er med på at GetKeyState returnerer en short (dvs. 16 bit int), og at det er MSB som er interessant dvs. egentlig 0x8000 - men så burde <state> & 0xFFFF også være true ?!?
Dit eksempel virker også ganske fint hos mig. Dog ville jeg nok ændre linien if (GetKeyState(VK_CAPITAL) & 0xFFFF) Til if (GetKeyState(VK_CAPITAL) & 0x0001)
Idet LSB er 1 hvis tasten er toggled, og det er vel det du vil kontrollere.
MSB er 1 hvis tasten er nede. Hvis du kigger på din CAPS LOCK indicator på keyboardet, kan det lade sig gøre at CAPS LOCK ikke er On, selvom tasten holdes nede.
soreno >> Jeg kører Win98. Du bruger også BCB 4.0 ? driss >> Du har selvfølgelig en pointe der.
Jeg tror lige jeg prøver MVC bare for sjov i morgen, og ser om det går en forskel.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.