Tastatur abfragen klappt nicht
-
Eventuell hat eins der Controls den Fokus? Dann kriegt das Child WM_KEYDOWN, nicht der Dialog. Falls du Tasten auch dann empfangen willst, kannst du 'nen Hook setzen:
LRESULT CALLBACK KeyboardHook( int code, WPARAM wpar, LPARAM lpar ) { if ( code < 0 ) return CallNextHookEx( kb_hook, code, wpar, lpar ); if ( code==HC_ACTION && wpar==VK_F1 ) { // Was auch immer du tun willst ... // return!=0 damit der Keypress nicht weiter bearbeitet wird return 1; } return CallNextHookEx( kb_hook, code, wpar, lpar ); } ... kb_hook = SetWindowsHookEx( WH_KEYBOARD, &KeyboardHook, NULL, GetCurrentThreadId() ); ... UnhookWindowsHookEx( kb_hook );
-
danke!! es klappt
-
immer wenn ich F1 drücke, wird mein Code gleich 2 mal ausgelöst auch wenn ich nur ganz kurz drücke. Wie kann ich das ändern?
-
Hi,
case WM_KEYDOWN: switch(wParam) { case VK_F1: if( !bKeyDown ) { bKeyDown = TRUE; Beep(2000, 2000); ShowWindow(hDlg, SW_HIDE); } break; } return TRUE; case WM_KEYUP: switch(wParam) case VK_F1: bKeyDown = FALSE; break; .....Waere jetzt meine spontane Idee.
Peace & Blessed Love C0de4Fun
-
aber bei dem hook gibt es keine cases
-
theking500 schrieb:
immer wenn ich F1 drücke, wird mein Code gleich 2 mal ausgelöst auch wenn ich nur ganz kurz drücke. Wie kann ich das ändern?
Schau dir mal in der MSDN die Beschreibung zu "KeyboardProc" an. Aus dem letzten Bit des lparams kannst du bestimmen, ob die Taste unten oder oben ist (brauchst ja nur auf eins von beiden reagieren)

-
if (code == WM_KEYDOWN && wpar == VK_F1 && lpar == 0)warum funktioniert das so nicht? Dann müsste es doch nur 1 mal aktiviert werden oder?
-
Es kommt nur auf das oberste Bit von lpar an, du fragst mit
==0ja alle Bits ab. Undcodedürfte eigentlich nichts mit WM_KEYDOWN zu tun haben sondern auf HC_ACTION stehen..
PS: http://msdn.microsoft.com/en-us/library/ms644984.aspx
-
und wie komme ich auf das oberste bit

-
if ( lpar & 0x80000000 ) Oberstes Bit gesetzt else Oberstes Bit nicht gesetztWeil 80000000(hex) == 10000000000000000000000000000000(binär)