块控制+ Alt +删除

Blu*_*ver 10 .net c#

我正在用C#做一个在线测验项目.测试客户端是在Windows XP上运行的Windows桌面应用程序.我需要阻止control+ alt+ delete组合键以防止学生最小化/关闭应用程序.

使用PInvoke对我来说没问题.

我知道这肯定是可能的,因为我看到有三个应用程序这样做.它们都是专有的,所以我无法知道它是如何完成的.

Tar*_*mán 26

我发现了一种非常难看的方式(效果很好).如果我独占打开taskmgr.exe,那么当用户按下Ctrl + Alt + Del时没有任何反应.

FileStream fs = new FileStream(System.IO.Path.Combine(Environment.SystemDirectory, "taskmgr.exe"), FileMode.Open, FileAccess.ReadWrite, FileShare.None);
Run Code Online (Sandbox Code Playgroud)

我最喜欢这个解决方案,它没有永久性的影响.例如,如果应用程序被杀死,则Ctrl + Alt + Del将再次运行.

缺点:必须启用欢迎屏幕,否则将弹出Windows安全性而不是Windows尝试打开taskmgr并静默失败.(→如果计算机位于域中,它也将无法工作,因为在域中会禁用"欢迎"屏幕.)

(当然这不适用于Vista或W7.)

  • 伙计......我同时对这个解决方案感到惊讶和震惊.;) 好一个. (2认同)

Ski*_*izz 15

对于Windows XP,正确的方法是创建自己的图形标识和身份验证动态链接库,或简称gina.dll.这是一篇关于它的MSDN文章.此DLL导出一组与Winlogon进程交互的函数,并为登录请求提供用户界面 - Secure Action Sequence事件.主登录请求是ctrl-alt-delete响应.标准gina.dll调用登录屏幕或任务管理器/注销对话框.创建自己的gina并不困难,但它确实需要C/C++编码而不是C#,并且很容易使系统无法启动.这并不能阻止人们在启动时按F8并选择安全启动选项,该选项不会加载自定义gina.dll.

编辑:我还应该说你不需要实现gina需要实现的所有功能,你可以动态加载以前的gina.dll并将你不感兴趣的所有调用传递给旧的gina.dll .

编辑2:这不适用于Vista/Win7,因为他们改变了登录过程的架构.仍然可以在Vista/Win7中禁用ctrl-alt-delete,但它需要一个不同的机制 - 有关于它的MSDN文章.

编辑3:这是一个ZIP文件,其中包含制作gina.dll的源代码.它是使用DevStudio 2005构建的.文件GinaInterface.cpp详细说明了安装新gina.dll库所需的步骤.这将禁用"欢迎"屏幕并将其替换为"按crtl-alt-del"登录对话框.就目前而言,这与标准gina.dll没有区别,所有与gina相关的调用都会传递给原始的gina.dll文件(在Windows\System32文件夹中称为msgina.dll).要禁用ctrl-alt-del键,请更新GinaInterface.cpp中的函数WlxLoggedOnSAS.要在应用程序运行时停止ctrl-alt-del,可以创建一个命名的互斥锁(CreateMutex)并测试它在gina.dll中的存在,如果互斥锁存在则停止ctrl-alt-del.


Mat*_*ren 12

正如其他人提到它很难阻止Ctrl- - Alt,Del因为它是Windows安全的基本组成部分.

然而,你可以阻止什么之后就可以完成Ctrl- Alt- Del已经通过添加以下注册表项推动.

HKEY_CURRENT_USER \软件\微软\的Windows\CurrentVersion \政策\系统

  • DisableTaskMgr
  • DisableChangePassword
  • DisableLockWorkstation

HKEY_CURRENT_USER\SOFTWARE \微软\的Windows\CurrentVersion \政策\ Explorer中

  • NoLogoff

如果你这样做,那么当你推Ctrl- Alt- Del你会得到如下的对话(在XP下):

替代文字

这不是万无一失的,但它会阻止用户做一些基本的事情.

更新:刚刚意识到这也阻止了Ctrl- Shift- Esc我以前没有意识到.


Sul*_*lik 6

您可以预先运行隐藏进程taskmgr.exe

ProcessStartInfo psi = new ProcessStartInfo(System.IO.Path.Combine(Environment.SystemDirectory, "taskmgr.exe"));
psi.RedirectStandardOutput = false;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = true;

processTaskMgr = Process.Start(psi);
Run Code Online (Sandbox Code Playgroud)