如何使用 c# 在 windows 中更改屏幕保护程序超时和屏幕保护程序安全

How to change screen saver timeout and screensaverissecure in windows using c#

如何使用 user32.dll 通过 C# 代码为当前用户(或)windows 中的任何其他用户更改屏幕保护程序超时和屏幕保护程序安全,因为我的应用程序是 运行 系统权限在后台进程中。

当我们使用 C# 或脚本更改此注册表的值时 HKEY_CURRENT_USER\Control Panel\Desktop\ScreensaverTimeout 和 HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaverIsSecure 此效果仅在机器重启后显示。

当我们使用具有 SYSTEM 权限的 C# 代码更改注册表值时,这些更改不会影响新值。

Q1:...此效果仅在机器重启后显示:

更新注册表后,您可以调用UpdatePerUserSystemParameters强制Windows从注册表中重新读取配置(以便更新立即生效)。

rundll32.exe user32.dll, UpdatePerUserSystemParameters

Q2:...使用 SYSTEM 权限,这些更改不会影响新值:

您需要在与当前登录用户相同的会话中启动一个 运行 的新进程,并从新进程更新注册表值。 This 是个很好的入门问题。

像这样更改 windows 设置后,您需要使用 WM_SETTINGCHANGE 消息调用 WinApi SendNotifyMessage 给所有 windows。这就是为什么您的设置在重新启动之前不会更新的原因。 (我认为您会发现注销会为该用户实现相同的效果)。

WinAPI https://msdn.microsoft.com/en-us/library/windows/desktop/ms725497%28v=vs.85%29.aspx

C# 包装发送消息 http://www.pinvoke.net/default.aspx/user32.sendnotifymessage