在所有应用程序中注册全局键盘快捷键
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
来获取模块指针,这使它按预期工作。
我正在尝试创建一个应用程序,该应用程序将在按下键盘快捷键时处理选定的文本。我使用 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
来获取模块指针,这使它按预期工作。