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

标签 c# .net windows winforms

我一直在开发收银机/收银机应用程序。我们需要防止用户使用 Alt + Esc、Ctrl + Alt + Del 或 Alt + Tab 等组合退出应用程序,我们将提供一个单独的自定义热键用于退出。该应用程序将全屏显示并且没有任何关闭按钮。我已经完成了全屏无交叉按钮部分,但坚持禁用低系统级热键。我如何在 C# 中执行此操作?感谢任何帮助或替代方法(即设置用户组权限以防止星形菜单/任务管理器或任何其他替代方法来实现目标)。

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

最佳答案

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

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

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

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

关于c# - 防止用户通过系统热键退出 Windows 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082524/

相关文章:

c# - 这是.Net Native 编译和优化中可能存在的错误吗?

c# - 如何使用数据注释验证 IEnumerable<HttpPostedFiles>

c# - 我如何使用linq优化嵌套的for循环

c# - 检查字符串中是否为根域

c# - EF Core 3.1.8 - 迁移错误 - 尚未为此 DbContext 配置数据库提供程序

c# - 对 GridView 行执行操作的最佳方式

c# - MEF 是否需要 .NET 4?

JAVA 从 linux 执行 powershell 脚本

windows - 如何从批处理文件调用Powershell文件

windows - 用于 Subversion Verify 的工具