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();
--------------------编程问答--------------------
正确。其实就是设置组策略。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楼的思路其实也算是正确实现的,在打开的时候就kill掉~~~
至于楼主的实现,大致思路就是在当前软件中把ctrl+alt+delete事件设置成热键 优先截获 然后执行自己定义的逻辑就可以了呀~~~ --------------------编程问答-------------------- 学习一下 --------------------编程问答-------------------- http://hi.baidu.com/libinguest/blog/item/a2574508a46a56960a7b82a2.html --------------------编程问答-------------------- mark --------------------编程问答--------------------
这个真行的。。。
我试过啦。。。 --------------------编程问答-------------------- 调用注册表API,禁止对应参数就行
补充:.NET技术 , C#