Global shortcut
Posted: Wed Feb 08, 2012 7:33 am
I use a globale shortcut for my program. (ALT-C)
Have any where a sample?
Thanks
Michael
Have any where a sample?
Thanks
Michael
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
AddKeyboardShortcut(#Your_window, #PB_Shortcut_ALT | #PB_ShortCut_C, #Related_Menu_Event_ID)
Code: Select all
RegisterHotKey_(WindowID(Window), HotkeyID, fsModifiers, Keys)
Code: Select all
; Converted from cheshirekow's C-Code:
; http://lists.freedesktop.org/archives/xorg/2010-October/051373.html
EnableExplicit
#ControlMask = 1 << 2
#GrabModeAsync = 1
#KeyPress = 2
#KeyPressMask = 1
#ShiftMask = 1
#XK_K = $004B
ImportC "-lX11"
XCloseDisplay(*Display)
XDefaultRootWindow(*Display)
XGrabKey(*Display, KeyCode.I, Modifiers.I, GrabWindow.I, OwnerEvents.i, PointerMode.I, KeyboardMode.I)
XKeysymToKeycode(*Display, KeySym.I)
XNextEvent(*Display, *XEvent)
XOpenDisplay(*Display)
XSelectInput(*Display, Window.I, EventMask.I)
XUngrabKey(*Display, KeyCode.I, Modifiers.I, GrabWindow.I)
EndImport
ImportC "-lxcb" : EndImport
ImportC "-lXau" : EndImport
ImportC "-lXdmcp" : EndImport
Structure XEvent
EventType.I
SendEvent.I
*Display
EventWindow.I
RootWindow.I
ChildWindow.I
Time.I
x.I
y.I
x_root.I
y_root.I
Mask.I
KeyCode.I
SameScreen.I
EndStructure
Define *Display
Define Event.XEvent
Define KeyCode.I
Define RootWindow.I
*Display = XOpenDisplay(0)
If *Display
RootWindow = XDefaultRootWindow(*Display)
If RootWindow
KeyCode = XKeysymToKeycode(*Display, #XK_K)
XGrabKey(*Display, KeyCode, #ControlMask | #ShiftMask, RootWindow, #False, #GrabModeAsync, #GrabModeAsync)
XSelectInput(*Display, RootWindow, #KeyPressMask)
Repeat
XNextEvent(*Display, @Event)
If Event\EventType = #KeyPress
MessageRequester("Info", "Global Hotkey <Ctrl> + <Shift> + <K> detected and removed!")
XUngrabKey(*Display, KeyCode, #ControlMask | #ShiftMask, RootWindow)
Break
EndIf
ForEver
XCloseDisplay(*Display)
EndIf
EndIf
You should always report your Linux distribution, desktop environment and whether you are using a 32 bit (x86) or 64 bit (x64) distribution.vwidmer wrote:Anyone have an updated version of this? Doesnt seem to work for me.
Code: Select all
; Converted from cheshirekow's C-Code:
; http://lists.freedesktop.org/archives/xorg/2010-October/051373.html
EnableExplicit
#ControlMask = 1 << 2
#GrabModeAsync = 1
#KeyPress = 2
#KeyPressMask = 1
#ShiftMask = 1
#XK_K = $004B
ImportC "-lX11"
XCloseDisplay(*Display)
XDefaultRootWindow(*Display)
XGrabKey(*Display, KeyCode.L, Modifiers.L, GrabWindow.I, OwnerEvents.L,
PointerMode.L, KeyboardMode.L)
XKeysymToKeycode(*Display, KeySym.L) ; KeySyms are 29-bit integer values
; identifying characters or functions
; associated with each key
XNextEvent(*Display, *XEvent)
XOpenDisplay(*Display)
XSelectInput(*Display, Window.I, EventMask.I)
XUngrabKey(*Display, KeyCode.L, Modifiers.L, GrabWindow.I)
EndImport
ImportC "-lxcb" : EndImport
ImportC "-lXau" : EndImport
ImportC "-lXdmcp" : EndImport
Structure XEvent
StructureUnion
type.L
*XAnyEvent
*XKeyEvent
*XButtonEvent
*XMotionEvent
*XCrossingEvent
*XFocusChangeEvent
*XExposeEvent
*XGraphicsExposeEvent
*XNoExposeEvent
*XVisibilityEvent
*XCreateWindowEvent
*XDestroyWindowEvent
*XUnmapEvent
*XMapEvent
*XMapRequestEvent
*XReparentEvent
*XConfigureEvent
*XGravityEvent
*XResizeRequestEvent
*XConfigureRequestEvent
*XCirculateEvent
*XCirculateRequestEvent
*XPropertyEvent
*XSelectionClearEvent
*XSelectionRequestEvent
*XSelectionEvent
*XColormapEvent
*XClientMessageEvent
*XMappingEvent
*XErrorEvent
*XKeymapEvent
*XGenericEvent
*XGenericEventCookie
pad.L[24]
EndStructureUnion
EndStructure
Define *Display
Define Event.XEvent
Define KeyCode.L
Define RootWindow.I
*Display = XOpenDisplay(0)
If *Display
RootWindow = XDefaultRootWindow(*Display)
If RootWindow
KeyCode = XKeysymToKeycode(*Display, #XK_K)
XGrabKey(*Display, KeyCode, #ControlMask | #ShiftMask, RootWindow, #False,
#GrabModeAsync, #GrabModeAsync)
XSelectInput(*Display, RootWindow, #KeyPressMask)
MessageRequester("Info", "Global Hotkey <Ctrl> + <Shift> + <K> is enabled!")
Repeat
XNextEvent(*Display, @Event)
Select Event\type
Case #KeyPress
MessageRequester("Info", "Global Hotkey <Ctrl> + <Shift> + <K> detected and removed!")
XUngrabKey(*Display, KeyCode, #ControlMask | #ShiftMask, RootWindow)
Break
EndSelect
ForEver
XCloseDisplay(*Display)
EndIf
EndIf
Code: Select all
; Converted from cheshirekow's C-Code:
; http://lists.freedesktop.org/archives/xorg/2010-October/051373.html
;http://www.purebasic.fr/english/viewtopic.php?f=15&t=49107&hilit=global+shortcut
EnableExplicit
#ControlMask = 1 << 2
#GrabModeAsync = 1
#KeyPress = 2
#KeyPressMask = 1
#ShiftMask = 1
#XK_K = $004B
ImportC "-lX11"
XCloseDisplay(*Display)
XDefaultRootWindow(*Display)
XGrabKey(*Display, KeyCode.I, Modifiers.I, GrabWindow.I, OwnerEvents.i, PointerMode.I, KeyboardMode.I)
XKeysymToKeycode(*Display, KeySym.I)
XNextEvent(*Display, *XEvent)
XOpenDisplay(*Display)
XSelectInput(*Display, Window.I, EventMask.I)
XUngrabKey(*Display, KeyCode.I, Modifiers.I, GrabWindow.I)
EndImport
ImportC "-lxcb" : EndImport
ImportC "-lXau" : EndImport
ImportC "-lXdmcp" : EndImport
Structure XEvent
EventType.I
SendEvent.I
*Display
EventWindow.I
RootWindow.I
ChildWindow.I
Time.I
x.I
y.I
x_root.I
y_root.I
Mask.I
KeyCode.I
SameScreen.I
EndStructure
Define *Display
Define Event.XEvent
Define KeyCode.I
Define RootWindow.I
*Display = XOpenDisplay(0)
If *Display
RootWindow = XDefaultRootWindow(*Display)
If RootWindow
KeyCode = XKeysymToKeycode(*Display, #XK_K)
XGrabKey(*Display, KeyCode, #ControlMask | #ShiftMask, RootWindow, #False, #GrabModeAsync, #GrabModeAsync)
XSelectInput(*Display, RootWindow, #KeyPressMask)
Repeat
XNextEvent(*Display, @Event)
Debug Event\EventType
If Event\EventType = #KeyPress
MessageRequester("Info", "Global Hotkey <Ctrl> + <Shift> + <K> detected and removed!")
XUngrabKey(*Display, KeyCode, #ControlMask | #ShiftMask, RootWindow)
Break
EndIf
ForEver
XCloseDisplay(*Display)
EndIf
EndIf
Code: Select all
140454020513794
140454020513795
Code: Select all
Repeat
XNextEvent(*Display, @Event)
Debug Event\EventType
If Event\EventType = #KeyPress
MessageRequester("Info", "Global Hotkey <Ctrl> + <Shift> + <K> detected and removed!")
XUngrabKey(*Display, KeyCode, #ControlMask | #ShiftMask, RootWindow)
Break
EndIf
ForEver