Globale Hotkeys

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Globale Hotkeys

Beitrag von deify »

hi leute! für eine musikplayersteuerung wollte ich mir globale hotkeys erstellen! diese sollen vom nutzer nahezu frei wählbar sein, da ich dass nur mit dem shortcutgadget nicht geschafft habe, habe ich ein bisschen gebastelt!

die hotkeys werden nicht erkannt oder der hotkeylistener will einfach nicht funktionieren hoffe ihr könnt mir helfen!

Code: Alles auswählen

EnableExplicit

Enumeration
  #pause_play
  #next
  #prev
  #stop
EndEnumeration

Global quit = 0

Procedure hotkeySelecter(x)
  Protected combobox,shortcut,button,close
  
  #MOD_NOREPEAT = $4000
  If OpenWindow(#PB_Any, 100, 200, 170, 25, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    combobox = ComboBoxGadget(#PB_Any,0,0,50,25)
    AddGadgetItem(combobox,0,"Ctrl")
    AddGadgetItem(combobox,1,"Alt")
    AddGadgetItem(combobox,2,"Shift")
    SetGadgetState(combobox,0)
    shortcut = ShortcutGadget(#PB_Any,50,0,50,25,#VK_1)
    button = ButtonGadget(#PB_Any,100,0,70,25,"Add Hotkey")
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          close=1
          quit = 1
        Case #PB_Event_Gadget
          Select EventGadget()
            Case shortcut
              If  GetGadgetState(shortcut) < $8 Or GetGadgetState(shortcut) > $91
                SetGadgetState(shortcut,#VK_1)
              EndIf
            Case button
              Select GetGadgetState(combobox)
                Case 0
                  RegisterHotKey_(#Null,#next,#MOD_CONTROL|#MOD_NOREPEAT,GetGadgetState(shortcut))
                Case 1
                  RegisterHotKey_(#Null,#next,#MOD_ALT|#MOD_NOREPEAT,GetGadgetState(shortcut))
                Case 2
                  RegisterHotKey_(#Null,#next,#MOD_SHIFT|#MOD_NOREPEAT,GetGadgetState(shortcut))
              EndSelect
              Debug "hotkey added"
          EndSelect
      EndSelect
    Until close Or quit
  EndIf
EndProcedure

Procedure shortcutListener(dummy)
  Global getmessage.msg
  
  Repeat
    If GetMessage_(getmessage,#Null, 0, 0) <> 0
      If getmessage\message = #WM_HOTKEY
        MessageRequester("","")
        Select getmessage\wParam
          Case #prev
          Case #pause_play
          Case #stop
          Case #next
            MessageRequester("","NEXT")
        EndSelect
      EndIf
    EndIf
    Delay(1)
  Until quit
EndProcedure

CreateThread(@shortcutListener(),0)
hotkeySelecter(0)
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Globale Hotkeys

Beitrag von Kiffi »

deify hat geschrieben:da ich dass nur mit dem shortcutgadget nicht geschafft habe [...]
wo gab es denn da konkret ein Problem?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Globale Hotkeys

Beitrag von HeX0R »

[ot]
Oh Mann, seit wann gibts denn ein ShortcutGadget?
Ich hab das immer von Hand zusammengebastelt...
Bild
[/ot]
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Globale Hotkeys

Beitrag von RSBasic »

@HeX0R
Schon lange :mrgreen:
Version 4.40 (1. Dezember 2009) hat geschrieben:[...]
- Hinzugefügt: ShortcutGadget(), StatusBarProgress()
[...]
Wenn ein neues PB-Update veröffentlicht wurde, lese ich immer zuerst die Änderungen (Changelog).
Solltest du auch machen :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Re: Globale Hotkeys

Beitrag von deify »

das problem ist, dass der thread zur überprüfung nicht auf die hotkeys reagiert bzw die hotkeys nicht funktioniern...

ich weiß es leider nicht genau, da es einfach nur nicht fubnktioniert und ich eb en kein problem finde... dachte ihr seht vielleicht einen kritischen fehler oder ihr könnt mir so weiterhelfen (:

mfg deify
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Re: Globale Hotkeys

Beitrag von deify »

keiner ne idee was falsch sein könnte?

der code sollte eigentlich bei jedem laufen! blos wie gesagt ich finde den fehler nicht (:

mfg deify
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Globale Hotkeys

Beitrag von Kiffi »

deify hat geschrieben:keiner ne idee was falsch sein könnte?
ich persönlich würde die Hotkeys nicht in einem Thread abfragen,
sondern in der Haupt-Eventschleife. Bin momentan mit Linux
unterwegs, so dass ich das nicht ausprobieren kann.

Versuch mal, ob es hiermit besser funktioniert:

http://www.purebasic.fr/german/viewtopi ... 31#p199931

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Re: Globale Hotkeys

Beitrag von deify »

also so gesehen habe ich keine mainschleife! das mainprogramm besitzt kein window, das fenster wird ledigleich in einem thread verwendet, da es nur eine steuerung für den mediaplayer ist. das eigentliche programm liest daten aus einem spiel und wertet diese aus (killtracking usw.)
daher habe ich eben noch einen thread erstellt, der die möglichkeit bietet die hotkeys zu initialisieren! aber leider funktioniert das insofern nicht, dass die hotkeys anscheinend nicht initialisiert werden, wenn sie in einem thread gestartet werden );
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Antworten