Seite 1 von 1

Globale Hotkeys

Verfasst: 30.12.2010 18:20
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)

Re: Globale Hotkeys

Verfasst: 30.12.2010 19:18
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

Re: Globale Hotkeys

Verfasst: 30.12.2010 19:31
von HeX0R
[ot]
Oh Mann, seit wann gibts denn ein ShortcutGadget?
Ich hab das immer von Hand zusammengebastelt...
Bild
[/ot]

Re: Globale Hotkeys

Verfasst: 30.12.2010 19:44
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

Re: Globale Hotkeys

Verfasst: 30.12.2010 20:16
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

Re: Globale Hotkeys

Verfasst: 31.12.2010 12:57
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

Re: Globale Hotkeys

Verfasst: 31.12.2010 13:14
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

Re: Globale Hotkeys

Verfasst: 31.12.2010 13:49
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 );