How can I determine which process owns a hotkey in Windows?

This works for me in Win10 (and probably all other even vaguely-recent versions of Windows)... also copied here from https://stackoverflow.com/a/43645062/995048 since this page seems to come up first in search results:

One possible way is to use the Visual Studio tool Spy++.

Give this a try:

  1. Run the tool (for me, it's at C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\spyxx_amd64.exe, or use spyxx.exe to monitor 32-bit processes)
  2. In the menu bar, select Spy -> Log messages... (or hit Ctrl + M)
  3. Check All Windows in System in the Additional Windows frame
  4. Switch to the Messages tab
  5. Click the Clear All button
  6. Select WM_HOTKEY in the listbox, or check Keyboard in Message Groups (if you're OK with more potential noise)
  7. Click the OK button
  8. Press the hotkey in question (Win + R, for example)
  9. Select the WM_HOTKEY line in the Messages (All Windows) window, right click, and select Properties... in the context menu
  10. In the Message Properties dialog, click the Window Handle link (this will be the handle for the window that received the message)
  11. Click the Synchronize button on the Window Properties dialog. This will show the window in the main Spy++ window treeview.
  12. On the Window Properties dialog, select the Process tab
  13. Click the Process ID link. This will show you the process (In my Win + R case: EXPLORER)

Caution: If you use Win 8 or later, do not use this utility as it will create some trouble - see comments.

If you are running a Windows earlier than Windows 8, then Windows Hotkey Explorer is probably what you want. This is also mentioned in the StackOverflow question: Find out what process registered a global hotkey? (Windows API).


I've recently wrote a small utility - HotKey Detective - for newer Windows versions (tested on 8.1 and 10). It simply shows what process owns the hotkey when you trigger the keystroke.

As distinct from other known tools, like Hotkey Explorer, my utility doesn't list all hotkeys, because that would involve artificial triggering all of them, and breaking the system in the end. In order to see what process is the guilty one, simply run my utility with administrator privilidges and press the stolen hotkey. That's all.

HotKey Detective's sources and a quick usage manual can be found on GitHub, as well as the binary releases.

enter image description here

This is an early beta, so report any issues if you find them.