📅  最后修改于: 2023-12-03 15:42:09.730000             🧑  作者: Mango
当你需要让你的程序监听键盘按键事件时,你可以使用 C# 中的 键盘挂钩
(Keyboard Hook)来实现这个功能。
键盘挂钩是一种机制,它允许你在操作系统接收键盘事件之前捕获这些事件并对它们进行处理。这样可以让你的程序监听键盘输入并采取一些特定的动作。
使用键盘挂钩你可以:
在 C# 中,你可以使用 System.Windows.Forms
命名空间中的 KeyboardHook
类来实现键盘挂钩。下面是一个简单的示例代码:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class KeyboardHook
{
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private const int WM_KEYUP = 0x0101;
private static LowLevelKeyboardProc _proc = HookCallback;
private static IntPtr _hookID = IntPtr.Zero;
public static void Main()
{
_hookID = SetHook(_proc);
Application.Run();
UnhookWindowsHookEx(_hookID);
}
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
using (ProcessModule curModule = curProcess.MainModule)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
}
}
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetModuleHandle(string lpModuleName);
}
这个代码演示了如何监听全局的键盘按键事件,并将按下的按键信息输出到控制台。你可以根据需要修改代码以适应自己的应用场景。
这里介绍的是在 C# 中使用 System.Windows.Forms
命名空间中的 KeyboardHook
类实现键盘挂钩的方法。当然,你也可以使用其他一些库来实现这个功能。但需要注意的是,为了保证安全,操作系统通常会禁止对全局键盘事件进行监听,因此使用键盘挂钩时需要获取管理员权限。