Global hotkey in PyKDE4 or PyQT4 - pyqt4

How do set a global (system wide) keyboard shortcut, i.e. a shortcut that can be activated when any windows are in focus?
I'm implementing a window switcher and need to bind a keystroke to some some function.
I can see that KGlobalAccel might be useful, but a concrete example would be great. I'm not worried about blatting any current systemwide global hotkeys.

Related

Global hotkeys for specific application with python3 on windows

I'm writing a script to control a specific application with hotkeys. I divided my task into three tasks:
monitor for global keys,
match pressed global hotkeys to keys to be sent,
send keys to specific application.
Let's say i want to send Ctrl+A to Notepad.exe when i press Ctrl+F3 from anywhere. It's important that the application (notepad in this case) i want to control will not be in focus before i press hotkeys and after it.
I suppose task 3 is about to work with pywinauto and it's keyboard.SendKeys. Task 2 is not difficult. But i have no idea how to monitor (in cycle? depending on keyboard events?) for global hotkeys.

Dyalog APL - Disabling APL symbol input

I recently obtained a personal licence for Dyalog APL and started using it (I'm switching over from APLX). I really like it, but whenever I'm not using the IDE, the APL symbol keybindings persist. For example, if I try to undo something in another application by hitting CTRL-Z, I'll instead get ⊂ and the undo will not go through. Similarly, attempting to use CTRL-S to save a document will result in me typing ⌈ instead of saving. The only way I've been able to resolve this is by restarting my computer.
How can I disable APL symbol input after the IDE is either not in focus or has been closed? If there's no way to do that, is it possible to map the symbol shortcut to ALT instead of CTRL? ALT is used far less often than CTRL for shortcuts, so I could live with that.
I'm using Windows 8.1 64 bit and the 64 bit version of Dyalog APL with a US keyboard.
If you want to use AltGr (right side Alt) to enter APL symbols while keeping a normal US layout or an almost normal UK layout, you can use my keyboard layout instead of the IDE. This avoids almost all clashes with other applications, so you can keep the keyboard active at all times and forget about mode switching.
Dyalog uses a standard Windows mechanism called "IME" (Input Method Editor) to enable input of APL-Characters. The advantage is that this enables you to use APL-Symbols anywhere - but obviously there is a 2nd side to that.
The "challenge" in your setup is only to change the IME back from APL to regular text-mode and this does not need a reboot. Pls check this article for more info on IME: https://www.google.de/amp/www.thewindowsclub.com/input-method-editors-windows/amp
(Sorry, I'm using W10, so I rather refer you to that article than giving wrong info... BTW, the advantage of W10 is that the IME will be default work in application-mode, so you can go to WinWord there and use default hotkeys w/o switching IME.)
Edit: For those using W10 (and probably W11) that article is out of date. The Languages settings are no longer in the Control Panel and are now in Settings. Go to Time and Language>Keyboard>"Input language hot keys" and change the Key sequence for "Between input languages". The "Switch Keyboard Layout" shortcut will be the one that toggles between keyboard layouts (I have Shift+LeftAlt toggling between Dyalog and US). You can also see which keyboard you are using on the taskbar by adjusting "Language bar options" on the same Settings page.

Programmatically remove global keyboard shortcuts

Is it possible to programmatically (gtk specific [or event xcb methods]) to list the global keyboard shortcuts collection?
I want to test if any of them are using the "Print Screen" key and if it is, I want to unset it.
On Ubuntu we see these shortcuts here:
Other flavors also have global keyboard shortcuts, for instance opensuse:

Can I assign custom keyboard shortcuts for menu items in applications on Ubuntu?

OSX allows user to add custom keyboard shortcuts for menu items. For instance you can define a custom keyboard shortcut for "Copy" and it will work for every application that has a menu item called Copy.
Is there a way to do this for GTK and/or KDE applications?
For KDE applications, it is possible for common keyboard shortcuts. To do this, open systemsettings and navigate to Standard Keyboard Shortcuts.
For example, here I change the shortcut for "activate next tab" to Ctrl-Tab (for consistency with Firefox):
This changes the shortcut in most tabbed KDE applications as well as tabbed dialog boxes. You can specify up to 2 alternative shortcuts for each action.
However, this only works for common shortcuts; you can't globally specify shortcuts for arbitrary menu-item captions.
I don't think GNOME applications have any such feature. You have to change the shortcuts individually (for each application). (Generally KDE is more customizable.)
Is there a way to set an absolute keyboard shortcut for an arbitrary menu item name that will be honored by any GTK+ application?
No.
Can you set a different global shortcut for Cut/Copy/Paste?
I suspect so. I didn't do the reading, but here's two promising links: making keyboard shortcuts in linux as uniform as the mac and change default/preference keyboard shortcuts like copy & paste
You can of course modify GTK+ applications to tweak their shortcuts. In the case of a GTK+ application whose GUI was designed with Glade, e.g. virt-manager, this could be ridiculously trivial.
I suggest you to take a look at xbindkeys and xdotool. Those are the automation tools which can help you to simulate certain keystrokes with customized shortcut.
By this means, though you don't really modify the original shortcuts, but you can still make your desired key combinations functional.

Hooking softkeys on Windows?

My laptop has a mysterious "AV Now" button on it, which would usually launch Samsung's "AVStation Now" application. I don't have this application installed, so I'd like to get this button to do something else.
So (and this question can be generalised to any keyboard with softbuttons on it), how would I go about writing a Windows program (C++ or C#) to:
Figure out what pressing this button does. Is it a custom USB HID device, or is it just an obscure key combination?
Install a global hook for this button, so that I could get it to do something useful.
I'd like to get this button to do something else.
If you don't insist on writing the program yourself, you can remap keys: These extra buttons are mostly just obscure key combinations, and in WinXP and above it is possible to remap just about any button on the keyboard to any other by modifying a registry setting at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
There exists a frontend utility to do this for you: check out SharpKeys. You select the key to remap from, key to remap to, write to registry and reboot. (Writing the keymap into the registry requires administrative privileges, as the keyboard mapping is global for all users.)

Resources