Seite 1 von 1

Tastenkombination mit getasynckeystate erfassen

Verfasst: 17.10.2012 16:00
von Sunny
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?

Re: Tastenkombination mit getasynckeystate erfassen

Verfasst: 17.10.2012 16:03
von RSBasic
Fürs Einstellen einer benutzerdefinierten Tastenkombination vom Benutzer: ShortcutGadget()

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

Verfasst: 17.10.2012 16:06
von Sunny
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?

Re: Tastenkombination mit getasynckeystate erfassen

Verfasst: 20.10.2012 09:46
von Mr.L
Du kannst z.B. die Windows API "RegisterHotKey" verwenden und
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