Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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.

share|improve this question
    
Have you tried modifying HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoWinKeys ? Your question said you changed the one in HKCU. Create the key if it isn't present, reboot, and see if it has any effect. –  Zac B Aug 18 '12 at 20:15

3 Answers 3

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.

share|improve this answer
    
Slightly related: I found this thread "RegisterHotkey - list?" that has some info which is interesting and maybe could help find where the hotkey is set. If I understand correctly on Vista (and Win7 I assume) there is a _gphkHashTable kernel function that you could use to get a lists of registered hotkeys. Googling for it only finds some Chinese sites - I guess only some guys in China like playing with this. ;-) –  Qtax Aug 14 '12 at 6:14
    
It is possible, but you would have to install a hook to get at the information, then write and install a driver to load early in the boot process to patch the code in memory to avoid patching the file on disk. –  Synetech Aug 14 '12 at 6:38

There's at least two tools to do this.

The first is Microsoft Keyboard Layout Creator

enter image description here

The second is KeyTweak

enter image description here

For more information on a related question: Program to re-program my keyboard?

share|improve this answer
1  
How does remapping keys help one unbind the hotkeys in question? How does this answer the question? –  Qtax Aug 13 '12 at 6:00
    
The only thing you could do with this 'solution' is to remap the keyboard to not have a windows key, replacing it with some other scan code, then map that key. NOT a good solution, as anything that tries to use the Win key for anything would be unusable. –  Michael Kohne Apr 30 '13 at 11:33
    
Just guessing here, but you could theoretically create a fake WinKey, register your handler to get all related event, and just rethrow the events with the real windows key. That would provide you a way to customize any mapping related to WinKey as you wish... Though, dunno if possible... –  Vajk Hermecz Nov 26 '13 at 18:07

AutoHotkey can override and do anything you like with the Windows shortcut keys.
See this documentation : Overriding or Disabling Hotkeys.

AutoHotkey can also do its actions conditional on the current window or process, in effect binding the keys differently to different processes. See for example Activating and manipulating windows.

For more information about AutoHotkey see :

Tutorial and Overview
AutoHotkey Documentation

share|improve this answer
1  
They clearly said they didn’t want to use AutoHotkey. Unless you know of a way to have AHK allow other programs to bind these keys, then I don’t see how it applies to the question. –  Synetech Aug 13 '12 at 6:34
    
You can hook the hotkeys in AutoHotkey so that they do nothing or perform some action in AHK, but this does not enable you to bind these hotkeys in any other application, which was the question. (This is why I stated in the question that AHK answers are not of much interest.) –  Qtax Aug 13 '12 at 6:43
    
@Qtax: The per-window/process key binding of AutoHotkey seemed to me like a solution. Why doesn't it work for you? –  harrymc Aug 13 '12 at 8:04
1  
@harrymc, because if for example, he wanted to have Winamp use Win+Left to rewind, there is no way to have AutoHotkey do that. I suppose you could fake it by having Winamp use a different key, say Win+A to rewind, and then writing an AHK script that detects when that key is pressed while the Winamp window is active and then send Winamp Win+A, but that is pointless because the whole point to global hotkeys is to have them work no matter what window is active. –  Synetech Aug 13 '12 at 18:22
1  
@Qtax: I don't know of a better solution. My apologies if I presumed the lack of knowledge regarding AHK on your part. –  harrymc Aug 14 '12 at 5:34

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.