在所有应用程序中注册全局键盘快捷键

Registering a global keyboard shortcut across all applications

我正在尝试创建一个应用程序,该应用程序将在按下键盘快捷键时处理选定的文本。我使用 this method 的一部分来获取当前选定的文本(而且似乎没有其他方法可以从任何应用程序中获取选定的文本:

string GetSelectedText()
{
    var oldClip = Clipboard.GetText();
    SendKeys.SendWait("^c");
    string selection = Clipboard.GetText();
    Clipboard.SetText(oldClip); // preserve clipboard
    return selection;
}

我的第一个想法是使用系统托盘图标。单击时,图标将使用上述方法获取当前选择,并进行处理。但是,像这样使用剪贴板需要应用程序处于焦点状态,而单击系统托盘图标会使图标处于焦点状态,然后该方法才能运行。

我的下一个想法是使用全局键盘快捷键。我遇到了 this article 关于获取全局热键的问题,它 可以 实际上可以听键盘组合,但只能在一个应用程序中,这不是我想要的 - 我想要在 any 应用程序中收听键盘快捷键。

我已经读过 this article (which came from this answer) 它确实设法在 任何 应用程序中监听按键,但一次只能监听一个按键(例如单个LControl,或 Shift,或 C 等)。

我的问题是:无论焦点是什么应用程序,我如何监听特定的键组合,并执行上面的方法来获取当前选择?

如果有更好的方法来检索当前选择,或者如果可以在应用程序未处于焦点时执行此操作,也感谢解释如何可能的答案;然而,主要重点是监听所有应用程序的键盘组合。

我最终使用了 Chris Dunaway 提到的库,MouseKeyboardLibrary

正如您在他提出的评论线程中看到的那样,它最初对我不起作用。事实证明,由于模块 IntPtr 无效,该库对我不起作用,因此我将库更改为使用 IntPtr.Zero,而之前它使用 Marshal 来获取模块指针,这使它按预期工作。