使用 win32 API 功能启用/禁用任务管理器,而不是通过 Windows 注册表

Posted

技术标签:

【中文标题】使用 win32 API 功能启用/禁用任务管理器,而不是通过 Windows 注册表【英文标题】:Enable/disable task manager using win32 API function, not by windows registry 【发布时间】:2016-03-25 05:19:04 【问题描述】:

目前在用 C# 开发的 Windows 应用程序中,我通过设置以下注册表值来禁用 Task manageruser switching option

禁用任务管理器:

HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableTaskMgr1

禁用(隐藏)用户切换:

HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\HideFastUserSwitching 值 1

但在 Windows 7 机器上测试此 Windows 应用程序时,登录用户不在Administrators 组中,但遇到访问权限问题,这里是异常文本:

12/16/2015 12:11:24 PM:访问注册表项 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System' 被拒绝。 :Win32Error(0,0)

后来我检查通过regedit手动添加子键DisableTaskMgr,我收到Access is Denied的相同消息。

在应用程序清单文件中,我通过设置启用了requestedExecutionLevel<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />。我还尝试通过Run as Administrator运行应用程序exe。

如果我将该用户添加到 Administrators 组中,则不会遇到任何问题。

那么,是否可以通过使用user32.dll 中的 win32 API 函数来启用/禁用任务管理器和隐藏用户切换? 或通过vc++提供任何解决方案?

业务需求:

嗯,这是一个考试软件应用程序,我们希望限制考生使用任何其他应用程序(网络浏览器、文件浏览器等),并在考试时终止该应用程序。所以我们已经从开始菜单选项以及 ctrl+alt+del 菜单(屏幕)中阻止了任务管理器,我们还想从 ctrl+alt+del 菜单中删除switch user 选项。

【问题讨论】:

希望没有 @codroipo :(..甚至在 vc++ 中没有解决方案? 我的一个古怪而丑陋的想法是禁用键盘上的某些键或在启动时自动关闭 TaskManager。但我对这个想法和这个建议不太满意:/ 问自己一个有用的问题:“如何防止病毒做同样的事情?” blogs.msdn.microsoft.com/oldnewthing/20040216-00/?p=40603 - 顺便说一句,您将始终需要管理员权限才能做您想做的事情,因为“Windows 已决定让用户控制自己的程序和数据”(同一来源)。 有一些方法可以在 XP 及更高版本中执行 Koisk 应用程序。你只需要去实际做一些研究。 【参考方案1】:

尝试使用此应用程序禁用 taskmgr

Ultimate Windows Tweaker v2.2 for Windows 7

【讨论】:

谢谢!但我不能使用第三方应用程序。

以上是关于使用 win32 API 功能启用/禁用任务管理器,而不是通过 Windows 注册表的主要内容,如果未能解决你的问题,请参考以下文章

Win32 API 函数以编程方式启用/禁用设备

通过 Win32 API 或 NVidia API 启用/禁用多个显示器?

使用 VBS 禁用/启用任务管理器

win10开机自动打开上次程序

Win7系统任务管理器被禁用的解决方法系统天地

Win7系统任务管理器被禁用的解决方法系统天地