替换全局热键

Replace global hotkey

我有一个位于托盘中的应用程序,我想定义几个热键来触发我的程序中的事件。

我从@AaronLS 在这个问题中的出色回答中找到了灵感:Set global hotkeys using C#

如果我注册一个已被另一个应用程序定义的热键 RegisterHotKey 将 return false 并且不注册它。那么如何覆盖或替换热键呢?

So how can I override or replace a hot key?

从表面上看,你不能。那是设计使然。想象一下,如果程序可以随意劫持其他程序的热键——那可不是一件愉快的事。

The Win32 UnregisterHotKey function 要求调用者是使用 RegisterHotKey 注册的同一线程,这使得另一个程序无法注销另一个程序的热键:

UnregisterHotKey function:

Frees a hot key previously registered by the calling thread.

可以做的是使用 Win32 将代码注入远程进程(假设您自己的进程有权执行此操作)然后在该进程的 UI 线程然后调用 UnregisterHotKey - 但这是另一个问题。