C# 锁定键盘,鼠标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using Microsoft.Win32; using System.Diagnostics; namespace WorkHelper { class SysHook { [DllImport( "user32" )] public static extern bool BlockInput( bool isBlock); [DllImport( @"native.dll" , EntryPoint = "FuckSysKey" )] private extern static bool FuckSysKey( bool enAble); public void BlockKeyAndMouse( bool b) { BlockInput(b); FuckSysKey(b); //锁定ctrl+alt+del } public delegate int HookProc( int nCode, int wParam, IntPtr lParam); static int hHook = 0; public const int WH_KEYBOARD_LL = 13; //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。 HookProc KeyBoardHookProcedure; //键盘Hook结构函数 [StructLayout(LayoutKind.Sequential)] public class KeyBoardHookStruct { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; } #region DllImport //设置钩子 [DllImport( "user32.dll" )] public static extern int SetWindowsHookEx( int idHook, HookProc lpfn, IntPtr hInstance, int threadId); [DllImport( "user32.dll" , CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] //抽掉钩子 public static extern bool UnhookWindowsHookEx( int idHook); [DllImport( "user32.dll" )] //调用下一个钩子 public static extern int CallNextHookEx( int idHook, int nCode, int wParam, IntPtr lParam); [DllImport( "kernel32.dll" )] public static extern int GetCurrentThreadId(); [DllImport( "kernel32.dll" )] public static extern IntPtr GetModuleHandle( string name); public void Hook_Start() { // 安装键盘钩子 if (hHook == 0) { KeyBoardHookProcedure = new HookProc(KeyBoardHookProc); //hHook = SetWindowsHookEx(2, // KeyBoardHookProcedure, // GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), GetCurrentThreadId()); hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0); //如果设置钩子失败. if (hHook == 0) { Hook_Clear(); //throw new Exception("设置Hook失败!"); } } } //取消钩子事件 public void Hook_Clear() { bool retKeyboard = true ; if (hHook != 0) { retKeyboard = UnhookWindowsHookEx(hHook); hHook = 0; } //如果去掉钩子失败. if (!retKeyboard) throw new Exception( "UnhookWindowsHookEx failed." ); } //这里可以添加自己想要的信息处理 public static int KeyBoardHookProc( int nCode, int wParam, IntPtr lParam) { if (nCode >= 0) { KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof (KeyBoardHookStruct)); // MessageBox.Show(kbh.vkCode.ToString()); if (kbh.vkCode != 32) { return 1; } } return CallNextHookEx(hHook, nCode, wParam, lParam); } #endregion } } 调用 SysHook h = new SysHook(); h.Hook_Start(); //锁定键盘 h.Hook_Clear(); //解锁 h.BlockKeyAndMouse( true ); //锁定键盘和鼠标,包括任务管理器热键 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架