1

我正在创建一个剪贴板监视器,它将捕获剪贴板中的更改,然后将剪贴板仅转换为纯文本。因此,这工作正常,但我真的无法弄清楚为什么我的应用程序在提升的应用程序(例如管理员命令提示符或任务管理器)内时不挂接键盘。它只是简单地忽略了我的按键!?

我已经尝试通过这篇文章“手动”使用键盘,如何停止在 C# 中进一步处理全局热键,但现在我正在尝试另一个名为https://github.com/gmamaladze/globalmousekeyhookglobalmousekeyhook的项目 我在这两个中都遇到了同样的问题解决方案。

我的问题是,“如何ALT+H从已提升的应用程序中挂钩并获取应用程序中可见的组合键”?它似乎在其他任何地方都可以正常工作。

此代码或多或少来自以下示例代码globalmousekeyhook

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Gma.System.MouseKeyHook;

namespace WindowsFormsApp1
{

    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

            // Define the global hotkey combination
            var altH = Combination.FromString("Alt+H");

            // 2. Define actions
            Action actionAltH = () => { Console.WriteLine("You Pressed ALT+H"); };

            // 3. Assign actions to key combinations
            var assignment = new Dictionary<Combination, Action>
            {
                {altH, actionAltH}
            };

            // 4. Install listener
            Hook.GlobalEvents().OnCombination(assignment);
        }
    }
}

我的应用程序没有提升 - 它只是在启动时正常运行。

我在这里想念什么?谁能指出我正确的方向?:-)

4

1 回答 1

0

Hans Passant 的评论是正确的!

UAC 提升是为了防止键盘记录而发明的。因此,没有提升权限的应用程序不能挂钩到提升的应用程序是正确的。

如果您以提升的权限运行您的应用程序,它将起作用。

如果您只想挂接一些热键,您可以注册系统范围的热键。请参阅代码项目(VB.net) 上的这篇文章。

您可以在此代码项目文章中找到适用于 Winform 和 WPF 的 C# 示例。也请查看这篇 C# 文章的评论。

于 2020-10-20T00:04:18.733 回答