代码之家  ›  专栏  ›  技术社区  ›  AbyxDev user411313

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

  •  0
  • AbyxDev user411313  · 技术社区  · 7 年前

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

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

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

    我的下一个想法是使用全局键盘快捷键。我遇到了 this article 关于获取全局热键,以及 能够 实际上,听键盘组合,但只在一个应用程序中,这不是我想要的-我想通过 任何 应用程序。

    我已经读过了 this article (来自 this answer )哪一个可以监听 任何 应用程序,但一次只能听一个键(例如单个lcontrol、shift或c等)。

    这里我的问题是:无论什么应用程序处于焦点状态,我如何聆听某个键组合,并执行上面的方法来获得当前的选择?

    如果有更好的方法来检索当前的选择,或者如果在应用程序不在焦点的情况下可以完成选择,那么也可以理解解释如何实现选择的答案;但是,主要焦点是在所有应用程序中侦听键盘组合。

    1 回复  |  直到 7 年前
        1
  •  0
  •   AbyxDev user411313    7 年前

    我最终使用了克里斯·杜纳威提到的图书馆, MouseKeyboardLibrary .

    正如你可能在他提出的评论线索中看到的,最初对我来说不起作用。原来图书馆因为一个无效的模块而对我不起作用 IntPtr ,所以我把图书馆改成了 IntPtr.Zero 以前用过的地方 Marshal 获取模块指针,使其按预期工作。