Seite 1 von 2
RegisterHotKey_()
Verfasst: 18.11.2005 16:45
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
Re: RegisterHotKey_()
Verfasst: 18.11.2005 16:54
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
Verfasst: 18.11.2005 16:55
von ts-soft
Ja,
Ansonsten nimm doch einfach die GlobalHotKey Lib vom PBOSL, da kannste auch den Source laden

Verfasst: 08.12.2005 21:00
von AND51
Lieber spät als gar nicht: Dankeschön!
Trotzdem würd mich interessieren, was passiert, wenn man die Hotkeys nicht entfernt, bin halt so neugierig...
Verfasst: 30.05.2008 13:06
von marco2007
Bin ich blind oder wurde Globalhotkey aus der PBOSL entfernt?
Verfasst: 30.05.2008 13:11
von Kiffi
@marco2006: kann vielleicht hiermit zusammenhängen?
u. U. kann Thomas oder Daniel was dazu sagen...
Grüße ... Kiffi
Verfasst: 30.05.2008 20:09
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...
Verfasst: 30.05.2008 21:23
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
Verfasst: 30.05.2008 21:32
von marco2007
Case #PB_Event_Hotkey
Select EventwParam()
....muss man erst mal draufkommen.
Herzlichen Dank, Kiffi!

Verfasst: 30.05.2008 21:57
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