How to disable only some Windows 10 global shortuts to use them in third-party applications?
1. Briefly
I want to disable only some Windows 10 default global hotkeys, to use this hotkeys for run Sublime Text commands.
2. Detail
I have Windows 32-bit 10.0.14393. In Windows 10 we have many native hotkeys.
1. I want to disable
For example, I want to disable custom hotkeys, Win+K, Win+H and Ctrl+Win+P.
2. I don't want to disable
But, for example, I don't want to disable Win+D and Win+R hotkeys. I often use these hotkeys.
3. Sublime Text keymap part
{
"keys": ["super+k"],
"command": "paste"
},
3. Did not help
1. AutoHotkey Override
My code:
#k::return
Win+K global hotkey is disabled for me, but my Sublime Text command paste
doesn't run too.
2. AutoHotkey overwrite global Windows hotkeys to hotkey of application
My code:
#IfWinActive ahk_class PX_WINDOW_CLASS
$#2::ControlSend, ahk_parent, % SubStr(A_ThisHotkey, 2)
#IfWinActive
It is worked for me, but I have bugs, for example:
For other hotkeys I have bugs too. It would be nice if someone will improve this code.
3. SharpKeys
SharpKeys program can disable or reassign Win key, but I don't want this.
4. gpedit.msc
I can disable some default hotkeys, but:
- I can not disable (using gpedit.msc), for example, Win+K, Win+H and Ctrl+Win+P.
- I can disable Win+D and Win+R, but I want to use this hotkeys.
5. Simple disable key
I download Simple disable key → I disable Win+K in program → I restart Windows → Win+K is not disabled for me.
6. DisabledHotkeys parameter in Windows Registry
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
I create string parameter DisableHotkeys
with value KHPE
.
Win+E, for example, is disabled for me, but
- Win+P, Win+K and Win+H are not disabled.
- This method is not for disabling, for example, Ctrl+Win+P and Ctrl+Win+F4.
4. Do not offer
- Please, don't offer solutions to disable all global shortcuts with Win key, not custom;
- Please, don't offer AutoHotkey shortcuts redirect to other shortcuts.
Solution 1:
You could use Autohotkey for remap any hotkey to send another hotkey using Send command:
#k::
Send {WIN up}
Send {k up}
Send ^+p
return
After this pressing Win+K will send a Ctrl+Shift+P which will show Command Palette in Sublime Text, you can use this way to override any hotkey to send another hotkey, set it to something like Ctrl+Shift+F3 and assign that hotkey to Sublime Text's paste(in keybindings) and then use Win+K to send that Ctrl+Shift+F3 to Sublime Text which will call paste.
AutoHotkey script:
#k::
Send {WIN up}
Send {K up}
Send !^+{F3}
return
Sublime Text keybindings:
{ "keys": ["ctrl+alt+shift+f3"], "command": "paste" }
Edit:
Seen your Please, don't offer AutoHotkey shortcuts redirect to other shortcuts.
why not? Above example works even for Win+R:
#r::
Send {WIN up}
Send {r up}
Send !^+{F3}
return
Text successfully pasted through Win+R in Sublime Text.
Edit 2:
If you really like to assign real hotkeys you could disable all Win+{KEY}
hotkeys, and then create your hotkeys which will do same as default Win+{Key}
hotkeys, and for another hotkeys assign your own actions.
For example for Win+R:
explorer.exe Shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
Works, but for some hotkey its hard to find how to call their actions.
Solution 2:
I also searched for a way to prevent Windows 10 from opening it's own Clipboard when pressing Win+V because I want to assign Ditto to it. I finally got it working in Win10 (20H2).
To free Win+V (and probably other hotkeys too)
-
Open regedit
-
Navigate to the key
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
-
Right-click and select
New > Expandable String Value
from the context menu. (this is essential as the normal "string value" doesn't work) -
Name it DisabledHotkeys
-
Add the character of the hotkey(s) you want to release. In my case I simply added V to the value. see screenshot
- Log out (via Startmenu) and back in
Now I could assing Win + V to Ditto without getting an error message.