Tastenkombination mit getasynckeystate erfassen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Tastenkombination mit getasynckeystate erfassen

Beitrag 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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Tastenkombination mit getasynckeystate erfassen

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Re: Tastenkombination mit getasynckeystate erfassen

Beitrag 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?
Mr.L
Beiträge: 51
Registriert: 05.02.2011 21:04

Re: Tastenkombination mit getasynckeystate erfassen

Beitrag 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
Antworten