【发布时间】:2020-10-17 15:24:02
【问题描述】:
我正在创建一个剪贴板监视器,它将捕获剪贴板中的更改,然后将剪贴板仅转换为纯文本。因此,这很好用,但我真的无法弄清楚为什么我的应用程序在提升的应用程序(例如管理员命令提示符或任务管理器。它只是简单地忽略了我的按键!?
我曾尝试通过这篇文章“手动”使用键盘,How to stop further processing global hotkeys in C#,但现在我正在尝试另一个名为 globalmousekeyhook、https://github.com/gmamaladze/globalmousekeyhook 的项目
我在两种解决方案中都遇到了同样的问题。
我的问题是,“我如何才能从已提升的应用程序中挂钩并让组合键 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);
}
}
}
我的应用程序没有提升 - 它只是在启动时正常运行。
我在这里缺少什么?谁能指出我正确的方向? :-)
【问题讨论】:
-
阻止这个工作是发明 UAC 提升的确切原因。
-
???这是在其他类似的剪贴板管理器中工作的,具有完全相同的热键设置,所以我一定做错了什么,但我不知道是什么。
-
“我的应用程序没有提升”。好吧,那么您如何期望它挂钩提升的应用程序?您不能将提升的应用程序与未提升的应用程序挂钩,否则未经授权的用户可以观看管理员在同一台计算机中键入的任何内容。这是非常不安全的。
标签: c# visual-studio hook keyboard-events mousekeyhook