【问题标题】:Prevent users from quitting a windows application via system hotkeys防止用户通过系统热键退出 Windows 应用程序
【发布时间】:2011-10-28 07:01:20
【问题描述】:

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

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

【问题讨论】:

  • 您使用的是 WinForms 还是 WPF?
  • @Philipp Schmid:更新了问题,抱歉,我早该提的。
  • 这个问题来自一个在支持 POS 系统的战壕中的人 - 当事情锁定并且除了硬启动之外没有其他方法可以关闭它时,您的支持人员将如何处理问题?我见过的每个在 XP/Vista/Win7 上运行的 POS 系统都有一种使用任务管理器关闭程序的方法,这是有原因的。如果您的应用完全锁定,它将无法响应您的热键。
  • Kiosk 模式不允许 ctrl-alt-del 或 alt-tab。
  • @downvoters:我不认为你应该对答案投反对票,因为用户要求的东西通常是一个坏主意。教育人们并向他们展示其他途径是件好事。在这种情况下投反对票是没有建设性的。

标签: c# .net windows winforms


【解决方案1】:

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

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

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

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

【讨论】:

  • 好的,我们可以从应用程序端阻止除 Ctrl+Alt+Del 之外的所有内容吗?无论如何,我支持保持 Ctrl+Alt+Del 以备不时之需。
  • @ShutterBug:很难禁止 alt-tab 和其他系统键,但如果你愿意(使用系统范围的钩子),你可以。杀死 explorer.exe 并仅运行您的应用程序更容易。这样 alt-tab 不能做任何事情,并且任务管理器很难找到(除非通过 Ctrl-Alt-Del)。
  • @ShutterBug:另请参阅我关于如何通过代码禁止系统范围热键的编辑。
  • @joshua:确实,除非您像某些(商业)库那样采取特殊措施。但是键盘钩子与外壳扩展无关,它们不相关。
猜你喜欢
  • 2011-05-10
  • 2016-02-10
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多