C#挂机锁(禁用任务管理器,禁用windows键和组合键alt+f4等等)

news/2024/11/28 13:37:46/

话不多说,直接上菜!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace UI
{public partial class Form2 : Form{Util.Hook hook;public Form2(){InitializeComponent();this.FormBorderStyle = FormBorderStyle.None;this.WindowState = FormWindowState.Maximized;this.TopMost = true;hook = new Util.Hook();hook.Start();this.FormClosing += new FormClosingEventHandler(Form2_FormClosing);this.buttonExit.Click += new EventHandler(ButtonExit_Click);    }private void Form2_FormClosing(object sender, FormClosingEventArgs e){hook.Close();}private void ButtonExit_Click(object sender, EventArgs e){Application.Exit();}}
}
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Util
{public class Hook : IDisposable{public delegate int HookProc(int nCode, int wParam, IntPtr lParam);static int hHook = 0;public const int WH_KEYBOARD_LL = 13;HookProc KeyBoardHookProcedure;[StructLayout(LayoutKind.Sequential)]public class KeyBoardHookStruct{public int vkCode;public int scanCode;public int flags;public int time;public int dwExtraInfo;}[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 IntPtr GetModuleHandle(string name);public void Start(){// 安装键盘钩子 if (hHook == 0){KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);//如果设置钩子失败. if (hHook == 0)Close();else{RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);if (key == null)//如果该项不存在的话,则创建该项key = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");key.SetValue("DisableTaskMgr", 1, RegistryValueKind.DWord);key.Close();}}}public void Close(){bool retKeyboard = true;if (hHook != 0){retKeyboard = UnhookWindowsHookEx(hHook);hHook = 0;}//如果去掉钩子失败. //if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);if (key != null){key.DeleteValue("DisableTaskMgr", false);key.Close();}}public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam){if (nCode >= 0){KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));if (kbh.vkCode == 91) // 截获左win(开始菜单键) return 1;if (kbh.vkCode == 92)// 截获右win return 1;if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control) //截获Ctrl+Esc return 1;if (kbh.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+f4 return 1;if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+tab return 1;if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift) //截获Ctrl+Shift+Esc return 1;if (kbh.vkCode == (int)Keys.Space && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+空格 return 1;if (kbh.vkCode == 241)                  //截获F1 return 1; if (kbh.vkCode == (int)Keys.Control && kbh.vkCode == (int)Keys.Alt && kbh.vkCode == (int)Keys.Delete)return 1;if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt + (int)Keys.Delete)      //截获Ctrl+Alt+Delete return 1;if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift)      //截获Ctrl+Shift return 1;}return CallNextHookEx(hHook, nCode, wParam, lParam);}#region IDisposable 成员public void Dispose(){Close();}#endregion}
}

 


http://www.ppmy.cn/news/360278.html

相关文章

Matlab实现决策树算法(附上完整仿真源码)

决策树是一种常见的机器学习算法,它可以用于分类和回归问题。在本文中,我们将介绍如何使用Matlab实现决策树算法。 文章目录 1. 数据预处理2. 构建决策树模型3. 测试模型4. 可视化决策树5. 总结6. 完整仿真源码下载 1. 数据预处理 在使用决策树算法之前…

【大学计算机技术】第二章 测试3

文章目录 选择题 选择题 用MP3或MIDI表示同一首小提琴乐曲时,前者的数据量比后者小得多。 A. 正确 B. 错误 正确答案: B MPEG-4的目标是支持在各种网络条件下交互式的多媒体应用,主要侧重于对多媒体信息内容的访问。 A. 正确 B. 错误 正确答…

理光Ricoh Pro 907EX 一体机驱动

理光Ricoh Pro 907EX 一体机驱动是官方提供的一款一体机驱动,本站收集提供高速下载,用于解决一体机与电脑连接不了,无法正常使用的问题,本动适用于:Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统。…

解决Mac连接RIOCH(理光)打印机无法打印问题

所使用的打印机型号:RICOH Aficio MP C4502A 与官方技术人员联系说 Mac不支持打印彩色的内容,只能打印黑白;Windows是可以打印彩色的…(只能默默说句fuck the printer) 连接方式如下: 第一步:…

理光 java,理光打印机驱动安装步骤,以及如何设置打印机的IP地址

一、删除正在使用的端口 如果新安装一个打印机的时候,提示端口正在使用,使用如下方法删除正在使用的端口。 打开:开始-设置-打印机和传真 右键打开 在空白的地方右键-服务器属性-端口 选择你要删除的端口就行了 二、为打印机设置ip打印机在连…

打印机接无线共享服务器出现乱码,Ricoh理光复印机网络打印机出乱码的解决办法...

Ricoh理光复印机网络打印机出乱码,原因只有一种:打印机驱动安装错误,重新下载正确的驱动安装即可。 驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。 驱…

win11 idea shift+F6快捷键失效问题

1.结论 win11微软输入发最新版问题,使用以前版本即可 2.排查问题过程 最近一直没用shiftF6,当今天要使用时候,突然发现失效了,开始了以下排查过程 2.1 软件快捷键冲突 刚开始以为和其他软件或diea内部快捷键冲突,做了…

AntDB存储技术——水平动态扩展技术

数据库集群安装完成后,其数据存储容量是预先规划并确定的。随着时间的推移以及业务量的增加,数据库集群中的可用存储空间不断减少,面临数据存储容量扩充的需求。 通过增加数据节点,扩充集群数据容量,必然需要对已有数…