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

我一直在做一个付款/现金登记申请。 我们需要通过使用Alt + Esc,Ctrl + Alt + Del或Alt + Tab等组合来防止用户退出应用程序,我们将为退出提供单独的自定义热键。 该应用程序将是全屏幕,没有任何closuresbutton。 我已经做了全屏没有交叉button的部分,但坚持禁用低系统级别的热键。 我如何在C#中做到这一点? 任何帮助或替代方法(即设置用户组权限,以防止星形菜单/任务pipe理器或任何其他替代scheme来实现目标)赞赏。

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

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

然而,有一些技巧,经常被病毒作者使用,这里有一些(不是广泛的):

  • 禁止所有的系统热键是相对微不足道的,但Ctrl-Alt-Del不在其中。 用示例应用程序查找这个优秀的代码项目文章 。
  • 建立一个DLL并注入其他对系统至关重要的进程。 容易做到,但要确保将应用程序从.NET移植到独立的C ++或其他语言,您不希望系统进程依赖于加载的.NET版本。
  • 代替dll的建议,你可以创建一个类似于这样的库的外壳扩展的东西,它允许你继续使用.NET。 这并不意味着这种事情,但它迫使用户杀死explorer.exe来摆脱你的应用程序。
  • 创建一个可以与桌面交互的服务。 通过正常手段来限制服务的权利,这基本上同样禁止用户通过你提到的方式杀死你的应用程序。
  • 显然,你应该取消任何WM_CLOSEWM_EXITWM_KILL消息,只需继续“生活”。
  • 使用哨兵应用程序,这是大多数病毒扫描程序使用的:如果你杀死一个进程,哨兵将重新启动它。 如果你杀了哨兵,它应该由主应用程序重新启动。 不好的行为,但工程。

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