替换全局热键

Posted

技术标签:

【中文标题】替换全局热键【英文标题】:Replace global hotkey 【发布时间】:2019-12-07 05:27:01 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

那么如何覆盖或替换热键?

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

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

UnregisterHotKey函数:

释放之前由调用线程注册的热键

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

【讨论】:

以上是关于替换全局热键的主要内容,如果未能解决你的问题,请参考以下文章

全局拦截热键,但保持原始行为

Cocoa NSStatusBar 全局热键

在 golang 中实现全局热键?

使用全局热键调用 powershell 函数

模拟全局热键

WPF中的全局热键?