防止用户通过系统热键退出Windows应用程序

fah*_*san 4 .net c# windows winforms

我一直致力于直销/现金注册申请.我们需要使用Alt + Esc,Ctrl + Alt + Del或Alt + Tab等组合来阻止用户退出应用程序,我们将提供单独的自定义热键进行退出.该应用程序将是全屏的,没有任何关闭按钮.我已经完成了全屏没有交叉按钮部分,但坚持禁用低系统级热键.我如何在C#中执行此操作?我们赞赏任何帮助或替代方法(即设置用户组权限以防止星级菜单/任务管理器或任何其他替代方案来实现目标).

编辑:我们正在使用WinForms.该应用程序将在Windows XP/Vista/7中运行.

Abe*_*bel 5

没有直接的方法可以逃避Windows的标准行为.Windows的用户必须有可能杀死应用程序.如果应用程序不服从,系统将强制终止应用程序.

但是,有一些技巧,通常由病毒编写者使用,这里有一些(不广泛):

  • 不允许使用所有系统热键是相对简单的,但Ctrl-Alt-Del不在其中.使用示例应用程序查找这篇优秀的代码项目文章.
  • 构建DLL并将自己注入对系统至关重要的其他进程中.容易做,但要确保将应用程序从.NET移植到独立的C++或其他语言,您不希望系统进程依赖于加载的.NET版本.
  • 代替dll-suggestion,你可以使用像这样的库来创建类似shell扩展的东西,它允许你继续使用.NET.它并不意味着这种事情,但它迫使用户杀死explorer.exe你的应用程序.
  • 创建可与桌面交互的服务.通过正常方式限制服务的权利,这实际上具有通过您提及的方式禁止用户杀死您的应用程序的相同效果.
  • 很显然,你应该取消所有WM_CLOSE,WM_EXITWM_KILL消息,并简单地继续"活".
  • 使用sentinel应用程序,这是大多数病毒扫描程序使用的:如果您终止一个进程,则Sentinel将重新启动它.如果你杀了哨兵,它应该由主应用程序重新启动.行为不好,但有效.

但是,一般建议:不要这样做.如果需要,允许您的用户可能杀死程序,否则将很难进行任何维护.唯一"支持"的方式是通过服务,您可以允许特殊用户停止服务,并且无法通过任务管理器停止服务.