【问题标题】:How to change screen saver timeout and screensaverissecure in windows using c#如何使用c#在windows中更改屏幕保护程序超时和screensaverissecure
【发布时间】:2015-01-31 13:24:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# system screensaver


    【解决方案1】:

    Q1:...这个效果只有在机器重启后才会出现:

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

    rundll32.exe user32.dll, UpdatePerUserSystemParameters
    

    Q2:...具有 SYSTEM 权限的这些更改不会对新值产生影响:

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

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多