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

时间:2011-08-16 17:42:14

标签: c# .net windows winforms

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

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

1 个答案:

答案 0 :(得分:5)

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

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

  • 禁止所有系统热键相对简单,但Ctrl-Alt-Del不在其中。使用示例应用程序查找this excellent code-project article
  • 构建DLL并将自己注入对系统至关重要的其他进程中。容易做,但要确保将应用程序从.NET移植到独立的C ++或其他语言,您不希望系统进程依赖于加载的.NET版本。
  • 代替dll-suggestion,你可以创建类似shell扩展with a library like this one的东西,它允许你继续使用.NET。它并不适用于此类事情,但它会强制用户杀死explorer.exe以删除您的应用程序。
  • 创建可与桌面交互的服务。通过正常手段限制服务的权利,这实际上与通过您提及的方式禁止用户杀死您的应用程序具有相同的效果。
  • 显然,您应该取消任何WM_CLOSEWM_EXITWM_KILL消息,然后继续“生活”。
  • 使用sentinel应用程序,这是大多数病毒扫描程序使用的:如果您终止一个进程,则Sentinel将重新启动它。如果你杀了哨兵,它应该由主应用程序重新启动。行为不好,但有效。

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