正如@ HopelessN00b所提到的,您可能想要更改组策略,因为它适用于“远程”笔记本电脑.您需要调用Loopback Policy Processing,因为屏幕保护程序设置是每个用户,而不是每台计算机.环回策略处理允许您将用户设置应用于计算机,而不管登录的用户如何.
不幸的是,这个功能让很多人感到困惑.它有几种不同的“模式”(合并与替换),使其更加混乱.对于您的应用程序,您可以创建一个GPO链接到一个hyhothetical“Remote Laptop Comptuers”OU,它在“计算机配置”部分的“合并”模式下启用环回策略处理,并在其“用户配置”部分设置屏幕保护程序任何你想要的属性.当下一台机器重新启动时(因为从非环回切换到环回需要重启 – 后台策略刷新不会启用它),您将看到机器开始从这个新GPO中获取屏幕保护设置.
编写某种hackish客户端服务程序以进入用户的注册表并切换组策略屏幕保护程序限制值(因为用户因注册表权限无法自行执行),我认为你陷入困境您将不得不选择较小的邪恶并禁用笔记本电脑上的用户的屏幕保护程序限制,使用某些第三方“鼠标摇杆”或键盘模拟软件,或只是告诉用户住在一起的情况它.
编辑:
有许多第三方程序可以做你正在寻找的东西,但只有内置的OS组件做一些“优雅”.
这里有一个小的VBScript程序,适合wscript.exe执行(意味着你可以将这个w / Group Policy Preferences直接部署到计算机的“Startup”文件夹中),它应该可以做你正在寻找的东西,假设你的域名的DNS名称无法在网络外部解析. (如果能够在外部解决,坦白说,你得到了你应得的.)
此脚本位于轮询循环中,使用nslookup解析USERDNSDOMAIN环境变量中指定的域.它每10秒轮询一次,但您可以通过更改Const POLL_DELAY行来修改它. (再次执行自身的奇怪回转是必要的,因为如果只通过wscript.exe执行,每个轮询间隔会短暂出现一个窗口 – 根本不是一件好事.)
当域名未解析时,“F15”键被“按下”,导致足够的活动,Windows将不会激活屏幕保护程序.
此脚本在Windows 8.1 x64上进行了测试,并且域用户具有应用于其中的组策略对象,其中包含管理模板设置:
>启用屏幕保护程序 – 已启用
>防止更改桌面背景 – 已启用
>防止更改屏幕保护程序 – 已启用
>密码保护屏幕保护程序 – 已启用
>屏幕保护程序超时 – 启用 – 30秒
>强制特定的屏幕保护程序 – 启用 – scrnsave.scr
我的测试方法如下:
>将名为ss.vbs的程序放入计算机的“Startup”文件夹中
>以应用了上述组策略设置的用户身份登录计算机
>确认在30秒不活动后屏幕保护程序启动
>解锁机器
>断开计算机的网络接口卡
>确认在几分钟不活动后屏幕保护程序未启动
>重新连接计算机的网络接口卡
>确认在30秒不活动后屏幕保护程序启动
>注销以验证脚本是否“挂起”或以其他方式干扰注销过程
在Windows 8.1 x64计算机上,脚本正在执行我想要的操作.
Option Explicit ' Delay,in seconds,between attempts to resolve the domain name ' and pressing the "F15" key. Const POLL_DELAY = 10 Dim objShell Set objShell = WScript.CreateObject("WScript.Shell") Dim objExec Dim intFound If UCase(Right(WScript.Fullname,11)) = "WSCRIPT.EXE" Then While 1 intFound = objShell.Run("cscript.exe """ & WScript.ScriptFullName & """",True) If intFound = 255 Then objShell.SendKeys("{F15}") WScript.Sleep(POLL_DELAY * 1000) Wend Else Set objExec = objShell.Exec("nslookup " & objShell.ExpandEnvironmentStrings("%USERDNSDOMAIN%")) While Not objExec.StdOut.AtEndOfStream If Left(objExec.StdOut.ReadLine,5) = "Name:" Then WScript.Quit(0) Wend WScript.Quit(255) End If