当前位置:编程学习 > C#/ASP.NET >>

C#中怎么才能禁用掉Ctrl+Alt+Delete键打开的窗体的"任务管理器"按钮

C#中怎么才能禁用掉Ctrl+Alt+Delete键打开的窗体的"任务管理器"按钮 --------------------编程问答-------------------- 吧 Ctrl+Alt+Delete
注册为 程序的热键 
在程序里捕获 事件处理


猜的  不知道行的通不 --------------------编程问答-------------------- RegistryKey hklm = Registry.CurrentUser;
hklm = hklm.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
hklm.SetValue("DisableTaskMgr", 1, RegistryValueKind.DWord);
hklm.Close();
--------------------编程问答--------------------
引用 2 楼 jshi123 的回复:
RegistryKey hklm = Registry.CurrentUser;
hklm = hklm.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
hklm.SetValue("DisableTaskMgr", 1, RegistryValueKind.DWord);
hklm.Cl……

正确。其实就是设置组策略。LZ可以打开组策略,里面有很多可以配置的项目。
找一个注册表跟踪的软件(比如regshot),就可以知道对应的注册表修改是什么。
以后这类问题就不用问了。 --------------------编程问答-------------------- mark.... --------------------编程问答-------------------- 帮忙顶顶了 --------------------编程问答--------------------

禁用任务管理器 
        private void timer1_Tick(object sender, EventArgs e)
        {
            Process[] p = Process.GetProcesses();

            foreach (Process p1 in p)
            {
                try
                {
                    if (p1.ProcessName.ToLower().Trim() == "taskmgr")//这里判断是任务管理器   
                    {
                        p1.Kill();
                        return;
                    }
                }
                catch
                {
                    return;
                }
            }
        }





禁用ALT+F4的用钩子函数
using System;
using System.Windows.Forms;
using System.Text;
using System.Runtime.InteropServices;
using System.Reflection;
using System.IO;

namespace HookLock
{
    public class Hook
    {
        #region 私有变量

        /// <summary>
        /// 键盘钩子句柄
        /// </summary>
        private IntPtr m_pKeyboardHook = IntPtr.Zero;

        /// <summary>
        /// 钩子委托声明
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);

        /// <summary>
        /// 键盘钩子委托实例
        /// </summary>
        /// <remarks>
        /// 不要试图省略此变量,否则将会导致
        /// 激活 CallbackOnCollectedDelegate 托管调试助手 (MDA)。 
        /// 详细请参见MSDN中关于 CallbackOnCollectedDelegate 的描述
        /// </remarks>
        private HookProc m_KeyboardHookProcedure;

        // 底层键盘钩子
        public const int idHook = 13;

        /// <summary>
        /// 安装钩子
        /// </summary>
        /// <param name="idHook"></param>
        /// <param name="lpfn"></param>
        /// <param name="hInstance"></param>
        /// <param name="threadId"></param>
        /// <returns></returns>
        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn,
            IntPtr pInstance, int threadId);

        /// <summary>
        /// 卸载钩子
        /// </summary>
        /// <param name="idHook"></param>
        /// <returns></returns>
        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern bool UnhookWindowsHookEx(IntPtr pHookHandle);

        /// <summary>
        /// 传递钩子
        /// </summary>
        /// <param name="pHookHandle">是您自己的钩子函数的句柄。用该句柄可以遍历钩子链</param>
        /// <param name="nCode">把传入的参数简单传给CallNextHookEx即可</param>
        /// <param name="wParam">把传入的参数简单传给CallNextHookEx即可</param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern int CallNextHookEx(IntPtr pHookHandle, int nCode,
            Int32 wParam, IntPtr lParam);

        #endregion 私有变量

        #region 私有方法


        /// <summary>
        /// 键盘钩子处理函数
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        /// <remarks>此版本的键盘事件处理不是很好,还有待修正.</remarks>
        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
            //return 1;
            KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG));
            if (m_pKeyboardHook != IntPtr.Zero)
            {
                switch (((Keys)m.vkCode))
                {
                    case Keys.LWin:
                    case Keys.RWin:
                    case Keys.Delete:
                    case Keys.Alt:
                    case Keys.Escape:
                    case Keys.F4:
                    case Keys.Control:
                    case Keys.Tab:
                        return 1;
                }
            }
            return 0;
        }

        #endregion 私有方法

        #region 公共方法

        /// <summary>
        /// 安装钩子
        /// </summary>
        /// <returns></returns>
        public bool InstallHook()
        {
            //IntPtr pInstance = Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().ManifestModule);
            IntPtr pInstance = (IntPtr)4194304;
            if (this.m_pKeyboardHook == IntPtr.Zero)
            {
                this.m_KeyboardHookProcedure = new HookProc(KeyboardHookProc);
                this.m_pKeyboardHook = SetWindowsHookEx(idHook, m_KeyboardHookProcedure, pInstance, 0);
                if (this.m_pKeyboardHook == IntPtr.Zero)
                {
                    this.UnInstallHook();
                    return false;
                }
            }

            return true;
        }

        /// <summary>
        /// 卸载钩子
        /// </summary>
        /// <returns></returns>
        public bool UnInstallHook()
        {
            bool result = true;
            if (this.m_pKeyboardHook != IntPtr.Zero)
            {
                result = (UnhookWindowsHookEx(this.m_pKeyboardHook) && result);
                this.m_pKeyboardHook = IntPtr.Zero;
            }
            return result;
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct KeyMSG
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
        #endregion 公共方法
    }
}


调用方法
 Hook h = new Hook();
 h.InstallHook(); --------------------编程问答-------------------- 点击开始——运行——输入gpedit.msc——打开组策略编辑器。 
然后依次展开用户配置——管理模版——系统——Ctrl+Alt+Del选项,在右侧的窗体中双击“删除任务管理器”,在弹出的窗口中将其配置修改为“已启用”,然后确认退出就可以了。 --------------------编程问答-------------------- 这个其实我做过。用个时间控件。你打开任务管理器的时候就在进程里面把它关了。。。。但我要的不是这个。我要禁用"Ctrl+Alt+Delete"键打开的窗体的那个"任务管理器"这个按钮 --------------------编程问答-------------------- 楼上  最后一句不明白  说清楚点 --------------------编程问答-------------------- 这个图截不下来。。。所以你自己看。。如果在家里用"Ctrl+Alt+Delete"没有打开窗体。请你到网吧去试下 --------------------编程问答--------------------
引用 6 楼 wl076 的回复:
C# code

禁用任务管理器 
        private void timer1_Tick(object sender, EventArgs e)
        {
            Process[] p = Process.GetProcesses();

            foreach (Process p1 in p)
            {
      ……


收藏 --------------------编程问答-------------------- 受益了啦 --------------------编程问答--------------------
引用 8 楼 a573951316 的回复:
这个其实我做过。用个时间控件。你打开任务管理器的时候就在进程里面把它关了。。。。但我要的不是这个。我要禁用"Ctrl+Alt+Delete"键打开的窗体的那个"任务管理器"这个按钮


6楼的思路其实也算是正确实现的,在打开的时候就kill掉~~~

至于楼主的实现,大致思路就是在当前软件中把ctrl+alt+delete事件设置成热键 优先截获 然后执行自己定义的逻辑就可以了呀~~~ --------------------编程问答-------------------- 学习一下 --------------------编程问答-------------------- http://hi.baidu.com/libinguest/blog/item/a2574508a46a56960a7b82a2.html --------------------编程问答-------------------- mark --------------------编程问答--------------------
引用 2 楼 jshi123 的回复:
RegistryKey hklm = Registry.CurrentUser;
hklm = hklm.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
hklm.SetValue("DisableTaskMgr", 1, RegistryValueKind.DWord);
hklm.Cl……

这个真行的。。。
  我试过啦。。。 --------------------编程问答-------------------- 调用注册表API,禁止对应参数就行
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,