×

# C# Hook键盘消息和禁用一些功能

hqy hqy 发表于2026-04-08 17:05:46 浏览10 评论0

抢沙发发表评论

# C# Hook键盘消息和禁用一些功能

C# Hook键盘消息和禁用一些功能,达到锁屏的效果

C#
internal class ScreenLock    {        Hook hook = new Hook();        public async Task<object> Lock(dynamic p)        {            hook.Start();            //Hook.tagMSG msg = new Hook.tagMSG();            //while (Hook.GetMessage(ref msg, 0, 0, 0) > 0)            //{            //    if (!isStart)            //    {            //        break;            //    }            //}            return 1;        }        public async Task<object> UnLock(dynamic p)        {            hook.Dispose();            return 1;        }    }    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(null), 0);                //如果设置钩子失败.                 if (hHook == 0)                    Close();                else                {                    try                    {                        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.SetValue("DisableLockWorkstation", 1, RegistryValueKind.DWord);                        //切换用户                        key.SetValue("HideFastUserSwitching", 1, RegistryValueKind.DWord);                        //修改密码                        key.SetValue("DisableChangePassword", 1, RegistryValueKind.DWord);                        key.Close();                        //注销                        RegistryKey zxKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", true);                        if (zxKey == null)                            zxKey = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer");                        zxKey.SetValue("NoLogOff", 1, RegistryValueKind.DWord);                        zxKey.Close();                    }                    catch (Exception)                    {                    }                }            }        }        public void Close()        {            bool retKeyboard = true;            if (hHook != 0)            {                retKeyboard = UnhookWindowsHookEx(hHook);                hHook = 0;            }            //如果去掉钩子失败.             //if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");            try            {                RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);                if (key != null)                {                    key.DeleteValue("DisableTaskMgr", false);                    key.DeleteValue("DisableLockWorkstation", false);                    key.DeleteValue("HideFastUserSwitching", false);                    key.DeleteValue("DisableChangePassword", false);                    key.Close();                }                RegistryKey zxKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", true);                if (zxKey != null)                {                    zxKey.DeleteValue("NoLogOff", false);                    zxKey.Close();                }            }            catch (Exception)            {            }        }        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();        }        public struct tagMSG        {            public int hwnd;            public uint message;            public int wParam;            public long lParam;            public uint time;            public int pt;        }        [DllImport("user32.dll")]        public static extern int GetMessage(ref tagMSG lpMsg, int a, int hwnd, int wMsgFilterMax);        #endregion    }


打赏

本文链接:https://kinber.cn/post/6420.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客