c# winform键位锁定工具开发第一步是新建.net 6.0+ windows窗体应用项目keyblocker;第二步在form1添加“锁定esc”和“解锁esc”按钮并绑定click事件;第三步添加public static keyhook类,声明setwindowshookexw等api;第四步定义keyboardproc委托拦截vkcode为0x1b的esc键;第五步通过按钮控制钩子安装/卸载及锁定开关,并确保退出前卸载钩子。

在进行软件测试时,需临时禁用键盘中特定键位(如Esc中断测试、PrintScreen截屏泄露界面、方向键干扰UI焦点),防止误触导致测试流程中断或数据污染。
用C# WinForm开发轻量级键位锁定工具
第一步:新建Windows窗体应用项目,命名为KeyBlocker,目标框架设为.NET 6.0或更高版本。
第二步:在Form1.cs中添加两个按钮——“锁定Esc”和“解锁Esc”,并双击生成Click事件处理函数。
第三步:右键项目→“添加”→“类”,新建KeyHook.cs,粘贴Windows API声明:使用SetWindowsHookExW拦截WH_KEYBOARD_LL低级键盘钩子,配合CallNextHookEx实现过滤逻辑;【必须将该类标记为public static,否则钩子无法全局生效】。
第四步:在KeyHook类中定义全局委托KeyboardProc,判断lParam指向的KBDLLHOOKSTRUCT结构体中vkCode是否等于0x1B(Esc键虚拟码);若匹配且当前处于锁定状态,则返回1阻止消息传递,否则调用CallNextHookEx放行。
第五步:在按钮点击事件中调用KeyHook.Install()或KeyHook.Uninstall(),通过布尔标志控制拦截开关;注意程序退出前必须显式卸载钩子,否则残留钩子会导致系统级键盘失灵。
用AutoHotkey脚本快速禁用单个键
方法一:编写基础脚本禁用PrintScreen键
PrintScreen::return
这行代码直接拦截PrintScreen按键的默认行为,不触发任何动作。保存为disable_ps.ahk,双击运行即可生效。
方法二:禁用组合键并保留单键功能
~Ctrl & Tab::return
~符号表示原键仍可被其他程序捕获,仅拦截Ctrl+Tab组合;若去掉~,则Ctrl和Tab单独按下也会失效——【误删~可能导致Alt+Tab等系统导航失效,务必确认需求再修改】。
通过注册表禁用物理键位(永久性方案)
第一步:按Win+R打开运行框,输入regedit回车,以管理员身份运行注册表编辑器。
第二步:定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout,右键→新建→二进制值,命名为“Scancode Map”。
第三步:双击该值,输入十六进制数据:00000000 00000000 02000000 00003B00 00000000;其中00003B00表示将左Shift键(扫描码3B)映射为无功能键(00),前8字节为头部固定格式。
第四步:重启电脑使注册表修改生效;此操作不可逆,恢复需手动删除Scancode Map项或导入原始备份。











