C# 键盘钩子监听示例:获取键盘输入字符
本示例展示如何使用 C# 键盘钩子函数监听键盘输入,获取按键字符。
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class KeyboardHook
{
// 声明键盘钩子函数
private delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
// 定义键盘钩子句柄
private IntPtr hookHandle;
// 键盘钩子函数
private int KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0)
{
// 获取按键码
int keyCode = (int)wParam;
// 获取按键字符
Keys key = (Keys)keyCode;
// 处理键盘事件
// ...
// 输出按键字符
Console.WriteLine(key);
}
// 继续传递钩子信息
return CallNextHookEx(hookHandle, nCode, wParam, lParam);
}
// 安装键盘钩子
public void InstallHook()
{
// 设置钩子函数
HookProc hookProc = KeyboardHookProc;
// 获取当前线程的ID
int threadId = AppDomain.GetCurrentThreadId();
// 安装键盘钩子
hookHandle = SetWindowsHookEx(WH_KEYBOARD_LL, hookProc, IntPtr.Zero, threadId);
}
// 卸载键盘钩子
public void UninstallHook()
{
// 卸载键盘钩子
UnhookWindowsHookEx(hookHandle);
}
// 声明 Win32 API 函数
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, int dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
// 键盘钩子类型
private const int WH_KEYBOARD_LL = 13;
}
注意:
- 此代码仅用于演示目的,不应用于任何非法活动,如窃取或破解密码。
- 使用键盘钩子可能涉及隐私问题,应谨慎使用。
- 在实际应用中,需要进行更全面的安全考虑,确保用户隐私和数据安全。
原文地址: https://www.cveoy.top/t/topic/lKJr 著作权归作者所有。请勿转载和采集!