Tan*_*zio 12 .net c# windows keyboard keyboard-hook
首先,我需要明确表示我对键盘记录没兴趣.
我的应用程序在后台时,我需要一种方法来监控最基本的键盘活动.我不需要知道哪些键,我不需要保存任何数据,我根本不需要或计划隐藏我的应用程序,我只需知道何时按下键并调用方法.
我正在寻找最简单的方法来实现这一目标,我知道合理数量的C#,但没有太复杂,因为我的大部分知识都是自学成才.
我四处寻找一些合适的方法来做这件事,我发现没有什么用处.我发现的是一群人在论坛和深度键盘记录器的源代码上说"不,那是非法的".
如果你们中的任何人可以告诉我实现这一目标的方法,那么我将非常感激.
您可以使用 Nuget 包MouseKeyHook ( GitHub )在后台监视键盘和鼠标活动。
此代码检测何时按下某个键:
private IKeyboardMouseEvents _globalHook;
private void Subscribe()
{
if (_globalHook == null)
{
// Note: for the application hook, use the Hook.AppEvents() instead
_globalHook = Hook.GlobalEvents();
_globalHook.KeyPress += GlobalHookKeyPress;
}
}
private static void GlobalHookKeyPress(object sender, KeyPressEventArgs e)
{
Console.WriteLine("KeyPress: \t{0}", e.KeyChar);
}
private void Unsubscribe()
{
if (_globalHook != null)
{
_globalHook.KeyPress -= GlobalHookKeyPress;
_globalHook.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
您需要拨打电话Subscribe()
才能开始收听和Unsubscribe()
停止收听。显然,您需要进行修改GlobalHookKeyPress()
才能完成有用的工作。
我需要这个功能来编写一个实用程序,当按下任何键(包括 CTRLKeyPress
键)时,该实用程序将打开 Lenovo Thinkpad 上的键盘背光。为此,我必须监视按键按下情况。代码是相同的,除了我们附加到不同的事件......
_globalHook.KeyDown += GlobalHookOnKeyDown;
Run Code Online (Sandbox Code Playgroud)
并且事件处理程序签名不同:
private static void GlobalHookOnKeyDown(object sender, KeyEventArgs e)
{
Console.WriteLine("KeyDown: \t{0}", e.KeyCode);
}
Run Code Online (Sandbox Code Playgroud)
该库还可以检测特定的组合键和序列。例如:
Hook.GlobalEvents().OnCombination(new Dictionary<Combination, Action>
{
{ Combination.TriggeredBy(Keys.A).Control(), () => { Console.WriteLine("You Pressed CTRL+A"); } },
{ Combination.FromString("Shift+Alt+Enter"), () => { Console.WriteLine("You Pressed FULL SCREEN"); } }
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12292 次 |
最近记录: |