我正在用c#编写一个应用程序来锁定或冻结所有程序,直到用户在应用程序的文本框中输入一个值并单击“确定”。
该应用程序的目的是让人们输入他们的时间。
据我所知,您可以将其设置为最高,但他们可以通过任务管理器结束应用程序,所以我被困在这里..
formName.TopMost = true;
任何帮助将不胜感激
答案 0 :(得分:2)
是的,这是正确的。 Windows操作系统允许一次运行多个程序。你所经历的完全是设计。
如果我没记错的话,TopMost
属性仅适用于您流程中的窗口,正如您所提到的,这一切都无关紧要:用户仍然可以使用任务管理器终止您的应用程序。
没有合法的解决办法。这不是一个“限制”,它是一个功能。任何阻止自己被任务管理器关闭的应用程序都会危险地密切关注我们称之为恶意软件的软件类别。没有什么好事可以从这样的追求中产生。
相关阅读:The arms race between programs and users
也许一个好的折衷解决方案是让你的窗口/表单实际上最顶层并禁用“关闭”按钮,以便用户知道他们不应该尝试关闭它。这几乎总是足以阻止那些没有决定以任何必要的方式结束你的申请的用户,这就是你应该关注的所有内容。
请参阅示例代码here,了解如何通过设置WS_EX_TOPMOST
标记或切换HWND_TOPMOST
来使窗口/表单始终显示在其他正在运行的应用程序之上。
我也已经写了一个详细的答案here,关于通过设置CS_NOCLOSE
班级风格来正确禁用“关闭”按钮。