Hi@all,
Ich habe folgendes Problem.
Ich möchte , bei einem Programm, das nach dem Drücken einer Taste ein Ereignis statt findet.
Der Nutzer soll sich nun mit Hilfe eines ShortcutGadgets aussuchen können, welche Taste das sein soll.
Wenn man nun eine einzelne Taste auswählt, wie z.B. die "A" - Taste ö.Ä. und diesen Wert dann mittels GetGadgetState() abfragt,
dann funktioniert alles einwandfrei. Wenn jetzt allerdings eine Tastenkombination wie z.B. "Strg + A" gewählt wird, dann reagiert der Befehl GetAsyncKeyState_()
nicht auf den von GetGadgetState() zurückgegebenen Wert, was kann ich tun, dass mein Programm wenn nötig auch eine Tastenkombination erkennt und dann dass Ereignis startet?
Tastenkombination mit getasynckeystate erfassen
Re: Tastenkombination mit getasynckeystate erfassen
Fürs Einstellen einer benutzerdefinierten Tastenkombination vom Benutzer: ShortcutGadget()
Und fürs Abfragen:
Und fürs Abfragen:
Code: Alles auswählen
EnableExplicit
Define EventID
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ShortcutGadget(0, 20, 20, 200, 25, #PB_Shortcut_Control|#PB_Shortcut_A)
AddKeyboardShortcut(0, GetGadgetState(0), 1)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Menu
Select EventMenu()
Case 1
Debug "Hallo"
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Re: Tastenkombination mit getasynckeystate erfassen
OK,
erstmal danke für die äußerst schnelle Antwort.
Allerdings habe ich vergessen, zu erwähnen, das die Erfassung des Drückens der Tastenkombi
Systemweit funktionieren soll (nicht nur auf mein Fenster bezogen), daher auch das erwähnte GetAsyncKeyState_().
Gibts da irgend eine Möglichkeit?
erstmal danke für die äußerst schnelle Antwort.
Allerdings habe ich vergessen, zu erwähnen, das die Erfassung des Drückens der Tastenkombi
Systemweit funktionieren soll (nicht nur auf mein Fenster bezogen), daher auch das erwähnte GetAsyncKeyState_().
Gibts da irgend eine Möglichkeit?
Re: Tastenkombination mit getasynckeystate erfassen
Du kannst z.B. die Windows API "RegisterHotKey" verwenden und
die WM_HOTKEY - Message in einem Callback abfragen.
Beispiel mit der Tastenkombination STRG+A
die WM_HOTKEY - Message in einem Callback abfragen.
Beispiel mit der Tastenkombination STRG+A
Code: Alles auswählen
#MOD_NOREPEAT = $4000
Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
If Message = #WM_HOTKEY
Debug "HotKey pressed!"
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,200,200,"Hot Key")
SetWindowCallback(@MyWindowCallback())
If RegisterHotKey_(WindowID(0), 1, #MOD_CONTROL | #MOD_NOREPEAT, #VK_A)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
UnregisterHotKey_(WindowID(0), 1)
EndIf