Disable (unbind) default Win+Arrows hotkeys to make them usable in other applications

On Windows 7 I'd like to unbind the default Win+Up/Down/Left/Right so that these can be bound directly* in other applications. How can this be done?

These hotkeys can easily be disabled by:

  1. Going to Ease of Access Center,
  2. selecting Make the keyboard easier to use, and
  3. Checking Prevent windows from being automatically arranged when moved to the edge of the screen:

    Setting

But even when using this setting and having the hotkeys disabled (they do nothing) the hotkeys still can't be bound in other applications.


I have tried the following ways and none of these work:

  1. Making the above change in Ease of Access Center
  2. Enabling policy Turn off Windows+X hotkeys, which is the same as setting: HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoWinKeys to 1. (With this setting alone the hotkeys in question still work as usual.)
  3. Disabling the windows key as described in KB216893 by setting System\CurrentControlSet\Control\Keyboard Layout\Scancode Map. This disables the windows key completely so that it cannot be bound or used anywhere.
  4. Enabling policy Turn off Windows Mobility Center


Some googling revealed this post:

the Win+Arrow key combinations are one of several (along with Win+P, Win+U and Win+L) that are somehow “super-registered/reserved” in Windows 7. I’ve been trying to track down where and when they get reserved, but have so far come up empty. I’ve also tried various tricks to reserved them before Windows has a chance, but so far nothing works. These key combos are just locked to Windows at a deep, intrinsic level whether or not you actually use them.

This guy didn't find a way, but maybe some of you know more. Maybe there is some dll/exe we can easily patch. ;-)

*) I'd like to avoid using other tools such as AutoHotKey to hook the hotkey and remap it to something else that can be bound in common applications.


Solution 1:

This guy didn't find a way, but maybe some of you know more.

Not likely. I have been trying to find a way to prevent Windows Vista+ from hogging hotkeys since they came out.

The fact is, that unlike most Windows hotkeys that can be disabled with the NoWinKeys setting, there are several that are not registered via Windows Explorer. Instead, the higher- (lower-?) level CSRSS registers several hotkeys early in the boot process, so not only can you not register them first, but there is no setting to not use them. These are the keys are specially handled:

Win + P
Win + L
Win + U
Win + G
Win + X
Ctrl + Shift + Esc
Ctrl + Alt + Del

They can be overridden by certain programs like AutoHotkey, but not in the way that you are looking for (allowing programs to register them globally).

Maybe there is some dll/exe we can easily patch. ;-)

That is also quite unlikely. It would require hacking core components of Windows and even if the location where the hotkeys are registered were found and patched, it would mean that you would have to prevent security software from viewing the patch as an infection and make sure to reapply the patch after every Windows update.


You can try the Windows Hotkey Explorer which uses Windows hooks to determine the source of global hotkeys. Unfortunately it only shows these special combos as being reserved by System, meaning that they are loaded by the Windows core. What’s even more interesting with WHE is that it says the same thing for these keys even in Windows XP where they are not used. This implies that they are not actually being read like the other ones, and instead of hard-coded, which unfortuantely means that even with low-level Windows hooks, WHE cannot directly access them. This makes it especially unlikely that any sort of easy patch, driver, etc. can be made to stop them from being bound.


Sadly, the best, most effective solution would be to leave Microsoft feedback and hope they change it in a future update, but that rarely if ever works.

In my case, I simply gave in and changed my XMPlay hotkeys to use the arrow keys on the numeric keypad instead.