以编程方式禁用 Taskmanager (ctrl+alt+del)
Programmatically disable Taskmanager (ctrl+alt+del )
我目前正在开发一个应用程序来更轻松地配置 Win10 物联网机器。
想象一下,一个用户使用自定义 shell 并且禁用了几乎所有预定义的快捷方式,因此他只能使用生产应用程序。
但是,为了切换用户和配置系统,"Win+L" 必须保持启用状态。
现在,在出现的 "Win+L" 屏幕中,他仍然会找到进入 Taskmanager 的选项(这是不需要的)。
管理员可以使用 gpedit 并更改计算机上的 ctrl+alt+del 选项来防止这种情况发生。
这正是我想要做的。
Programmatically disabling Taskmanager using c#
非常接近,但是此注册表项仅适用于当前登录的用户,在我的例子中是管理员,因为配置工具需要管理权限(UWF 过滤器等。可以配置)。
如果我在 LocalMachine 而不是 CurrentUser 中尝试相同的操作,注册表条目会按预期创建,但它根本没有任何效果。
预先感谢您的帮助。
我找到了实现我想要的方法:
public void SetTaskManager(bool enable)
{
// Load settings of desired user via UserName property
using (PowerShell PowerShellInstance = PowerShell.Create())
{
var command = Properties.Settings.Default.LoadRegistryOfUser;
command = command.Replace("USERNAME", UserName);
PowerShellInstance.AddScript(command);
var res = PowerShellInstance.Invoke();
}
// Create the key and entry for the registry or delete it if
// enable == true
RegistryKey objRegistryKey = Registry.Users.CreateSubKey(
UserName + @"\Software\Microsoft\Windows\CurrentVersion\Policies\System");
if (enable && objRegistryKey.GetValue("DisableTaskMgr") != null)
objRegistryKey.DeleteValue("DisableTaskMgr");
else
objRegistryKey.SetValue("DisableTaskMgr", "1", RegistryValueKind.DWord);
objRegistryKey.Close();
// Close the registry of the user, otherwise he cant log on
using (PowerShell PowerShellInstance = PowerShell.Create())
{
var command = Properties.Settings.Default.CloseRegistryOfUser;
command = command.Replace("USERNAME", UserName);
PowerShellInstance.AddScript(command);
var res = PowerShellInstance.Invoke();
}
}
脚本:
LoadRegistryOfUser:
注册加载 HKU\USERNAME C:\users\USERNAME\NTUSER.DAT
关闭用户注册:
reg 卸载 HKU\USERNAME
它有点老套,但这是我目前找到的唯一方法。
希望这有帮助。
我目前正在开发一个应用程序来更轻松地配置 Win10 物联网机器。 想象一下,一个用户使用自定义 shell 并且禁用了几乎所有预定义的快捷方式,因此他只能使用生产应用程序。 但是,为了切换用户和配置系统,"Win+L" 必须保持启用状态。 现在,在出现的 "Win+L" 屏幕中,他仍然会找到进入 Taskmanager 的选项(这是不需要的)。 管理员可以使用 gpedit 并更改计算机上的 ctrl+alt+del 选项来防止这种情况发生。 这正是我想要做的。
Programmatically disabling Taskmanager using c#
非常接近,但是此注册表项仅适用于当前登录的用户,在我的例子中是管理员,因为配置工具需要管理权限(UWF 过滤器等。可以配置)。
如果我在 LocalMachine 而不是 CurrentUser 中尝试相同的操作,注册表条目会按预期创建,但它根本没有任何效果。
预先感谢您的帮助。
我找到了实现我想要的方法:
public void SetTaskManager(bool enable)
{
// Load settings of desired user via UserName property
using (PowerShell PowerShellInstance = PowerShell.Create())
{
var command = Properties.Settings.Default.LoadRegistryOfUser;
command = command.Replace("USERNAME", UserName);
PowerShellInstance.AddScript(command);
var res = PowerShellInstance.Invoke();
}
// Create the key and entry for the registry or delete it if
// enable == true
RegistryKey objRegistryKey = Registry.Users.CreateSubKey(
UserName + @"\Software\Microsoft\Windows\CurrentVersion\Policies\System");
if (enable && objRegistryKey.GetValue("DisableTaskMgr") != null)
objRegistryKey.DeleteValue("DisableTaskMgr");
else
objRegistryKey.SetValue("DisableTaskMgr", "1", RegistryValueKind.DWord);
objRegistryKey.Close();
// Close the registry of the user, otherwise he cant log on
using (PowerShell PowerShellInstance = PowerShell.Create())
{
var command = Properties.Settings.Default.CloseRegistryOfUser;
command = command.Replace("USERNAME", UserName);
PowerShellInstance.AddScript(command);
var res = PowerShellInstance.Invoke();
}
}
脚本:
LoadRegistryOfUser: 注册加载 HKU\USERNAME C:\users\USERNAME\NTUSER.DAT
关闭用户注册: reg 卸载 HKU\USERNAME
它有点老套,但这是我目前找到的唯一方法。 希望这有帮助。