RegisterHotKey_()

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

RegisterHotKey_()

Beitrag von AND51 »

Hallo!

Ich habe eine leicht verständliche Seite gefunden, auf der RegisterHotkeys_() gut erklärt wird:
http://www.christianroessler.net/content/37/
Hier Google's Cacheversion, falls der Link nicht funktioniert: http://66.249.93.104/search?q=cache:3Z1 ... lr=lang_de

Der Link oben dient anderen Usern, die Fragen zu "globalen Tastenkombinationen" oder Ähnlichem haben.

Meine Frage ist allerdings:
Ich habe woanders gelesen, dass diese Hotkeys vor Beenden des (eigenen) Programms deregistriert werden müssen. Muss das sein? Und wie macht man das?

MfG, AND51
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: RegisterHotKey_()

Beitrag von Kiffi »

> Ich habe eine leicht verständliche Seite gefunden, auf der
> RegisterHotkeys_() gut erklärt wird:

noch einfacher wird's mit der GlobalHotkeys-Lib aus dem PBOSL-Paket :-)

> Ich habe woanders gelesen, dass diese Hotkeys vor Beenden des
> (eigenen) Programms deregistriert werden müssen. Muss das sein?

keine Ahnung. Aber schaden tut's mit Sicherheit nicht, wenn man vor
Programmende aufräumt.

> Und wie macht man das?

Mit RemoveHotkey() ;-)

Grüße ... Kiffi
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ja,

Code: Alles auswählen

UnregisterHotKey_(WindowID(Window), HotkeyID)
Ansonsten nimm doch einfach die GlobalHotKey Lib vom PBOSL, da kannste auch den Source laden :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Lieber spät als gar nicht: Dankeschön! :allright:

Trotzdem würd mich interessieren, was passiert, wenn man die Hotkeys nicht entfernt, bin halt so neugierig...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Bin ich blind oder wurde Globalhotkey aus der PBOSL entfernt?
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@marco2006: kann vielleicht hiermit zusammenhängen?
http://pbosl.purearea.net/index.php?site=News hat geschrieben:25-May-2006: Deleted some libraries which don't work anymore with PureBasic v4.0
u. U. kann Thomas oder Daniel was dazu sagen...

Grüße ... Kiffi
a²+b²=mc²
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Hi,

ich habe mal wieder geklaut...
Was muss ich machen, damit CRTL+Y immer reagiert und die Gadgets trotzdem funktionstüchtig bleiben?
Thread?

Das da muss wohl irgendwo rein? In der Repeat-Schleife wird`s problematisch, oder?

Code: Alles auswählen

GetMessage_(@Msg, 0, 0, 0) 
  If MSG\message = #WM_HOTKEY 
    Select MSG\wParam 
       Case hk1 
         MessageRequester("ok", "ok")
      EndSelect 
  EndIf
Hier der Restcode:

Code: Alles auswählen

Procedure HotKey(Key, Modifiers) 
  Static ID 
  If RegisterHotKey_(0, ID, Modifiers, Key) = 0 
    ProcedureReturn -1 
  EndIf 
  ID+1 
  ProcedureReturn ID-1 
EndProcedure 

Msg.MSG 

hk1=HotKey(#VK_Y,#MOD_CONTROL) 

If OpenWindow(0, 200, 200, 600, 300, "Test!") And CreateGadgetList(WindowID(0))
  StringGadget(0, 10,10,80,20, "")
  StringGadget(1, 10,50,80,20, "")
EndIf

Repeat
  event=WaitWindowEvent()
  
Until event=#WM_CLOSE
Hat jemand eine Idee?

lg
Marco

PS: Code von Mistrel geklaut...
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

marco2006 hat geschrieben:Hat jemand eine Idee?

Code: Alles auswählen

#PB_Event_Hotkey = 786

Repeat
  
  event=WaitWindowEvent()
  
  Select event
    Case #PB_Event_Hotkey 
      Select EventwParam()
        Case hk1
           MessageRequester("ok", "ok") 
      EndSelect
  EndSelect
  
Until event=#WM_CLOSE
Grüße ... Kiffi
a²+b²=mc²
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Case #PB_Event_Hotkey
Select EventwParam()
....muss man erst mal draufkommen.

Herzlichen Dank, Kiffi! :allright:
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

kein Problem, marco2006.

Ich habe den Source der GlobalHotKey-Lib nebst Beispiel
noch auf meiner Platte gefunden:

Code: Alles auswählen

; GlobalHotkeys library
; By Gansta93
; procedure AddHotkey
;{
ProcedureDLL AddHotkey(Window, fsModifiers, Keys, HotkeyID) ; Create a new global hotkey HotkeyID in specified Window.
  ProcedureReturn RegisterHotKey_(WindowID(Window), HotkeyID, fsModifiers, Keys)
EndProcedure

ProcedureCDLL AddHotkey_DEBUG(Window, fsModifiers, Keys, HotkeyID)
  If IsWindow(Window) = 0
    ; TB_DebugError("Specified Window is invalid.")
  EndIf
EndProcedure
;}

; Procedure RemoveHotkey
;{
ProcedureDLL RemoveHotkey(Window, HotkeyID) ; Remove Specified HotkeyID in Window.
  ProcedureReturn UnregisterHotKey_(WindowID(Window), HotkeyID)
EndProcedure

ProcedureCDLL RemoveHotkey_DEBUG(Window, HotkeyID)
  If IsWindow(Window) = 0
    ; TB_DebugError("Specified Window is invalid.")
  EndIf
EndProcedure
;}

; Sample (angepasst an PB4.x)

#PB_Event_Hotkey = 786 

If OpenWindow(0, 0, 0, 200, 200, "Global hotkeys", #PB_Window_ScreenCentered | #PB_Window_TitleBar | #PB_Window_SystemMenu) And CreateStatusBar(0, WindowID(0))
  StatusBarText(0, 0, "Type Alt+A or Alt+B")
  ; We create the hotkeys, and display an error box if it is impossible to create one or the two.
  If AddHotkey(0, #MOD_ALT, #PB_Shortcut_A, 0) = 0
    MessageRequester("Error", "Cannot create hotkey 0.")
  ElseIf AddHotkey(0, #MOD_ALT, #PB_Shortcut_B, 1) = 0
    MessageRequester("Error", "Cannot create hotkey 1.")
  EndIf
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Hotkey ; If an hotkey was called
        Select EventwParam() ; For know what hotkey was called, no documentation on PureBasic for this function.
          Case 0 ; Hotkey with ID 0 (Alt+A)
            MessageRequester("Info", "Hotkey 0!")
          Case 1 ; Hotkey with ID 1 (Alt + B)
            MessageRequester("Info", "Hotkey 1!")
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
    Delay(1)
  ForEver
  ; Now we remove the hotkeys.
  RemoveHotkey(0, 0)
  RemoveHotkey(0, 1)
EndIf
End
a²+b²=mc²
Antworten