嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guy 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:我要如何變更螢幕保護裝置等候逾時值?


我要如何變更螢幕保護裝置等候逾時值?

嗨,Scripting Guy!我是否能用指令碼來變更電腦上螢幕保護裝置的等候逾時值?

-- JN

JN,您好。由於某些原因,Microsoft 的指令碼技術對於 Windows 設定值和元件,像螢幕保護裝置、桌面、工作列、開始功能表等等,有些不足之處。您可以使用 WMI (尤其是 Win32_Desktop 類別) 來「讀取」許多這類的值,不過您不能使用 Win32_Desktop 類別 (或是任何相當的類別或物件) 來「修改」這類的值。為什麼?老實說,我們真的不知道。事情就是這個樣子。

不過,幸運的是,許多這類設定值都儲存在 Windows 登錄中。若是如此的話,就會有很高的機會能夠撰寫指令碼來管理這些設定值。螢幕保護程式也不例外。請開啟 Regedit,然後查看機碼 Control Panel\Desktop 中的 HKEY_CURRENT_USER。您將會看到數個與螢幕保護程式相關的登錄值,其中包括 ScreenSaveTimeout。您應該已經猜到,這就是決定系統必須閒置多久,才會啟動螢幕保護程式的登錄值。依預設值,這個值設定為 600 秒,也就是 10 分鐘。

那麼您該如何變更這個值?使用類似以下的指令碼,其中將等候逾時時間變更為 5 分鐘 (300 秒):

HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Control Panel\Desktop"
objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
ValueName = "ScreenSaveTimeout"
strValue = "300"
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValue

為了做到這點,我們一開始建立名為 HKEY_CURRENT_USER 的常數,並將其值設定為&H80000001。這就告訴 WMI 的「登錄」提供者,我們正要處理登錄的 HKEY_CURRENT_USER 部份。如果想要處理 HKEY_LOCAL_MACHINE,我們就會將常數設定為等於&H80000001。&H80000003 則會讓我們處理 HKEY_USERS。

我們在本機電腦上使用這段指令碼,因此會將變數 strComputer 設定為一點 (也就是代表本機電腦的 WMI 捷徑)。不過「登錄」提供者最棒的地方,就是在遠端電腦也能發揮和本機電腦相同的作用。如果您要變更遠端電腦上的螢幕保護程式等候逾時值,只需要將 strComputer 的值設定為該電腦的名稱即可。

然後我們連線到 WMI 服務,並指定登錄路徑 (Control Panel\Desktop)。接著我們呼叫 CreateKey 方法。這只是為了確保安全。如果我們尋找的登錄機碼不存在,CreateKey 就會建立該機碼。如果登錄機碼已經存在,CreateKey 就不會有任何動作。

在指定我們要變更的登錄值名稱 (ScreenSaveTimeout) 及其新值 (300) 以後,我們使用 SetStringValue 方法將等候逾時值變更為 300 秒。

還不錯吧?如需關於「登錄」提供者 (可能是所有 WMI 提供者中最不受重視的一種) 的詳細資訊,請參閱《Microsoft Windows 2000 指令碼指南》中的登錄章節 (英文)。也可以參考聲名狼藉的 Tweakomatic (英文)。這個驚人的公用程式,能夠確實編寫從登錄讀取和寫入的指令碼。讓我們模仿一下舊廣告詞:Tweakomatic 大名鼎鼎,「保證」有效!

順便一提,以下還有一段有用的螢幕保護程式指令碼。這段指令碼確保螢幕保護程式受到密碼保護:

HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Control Panel\Desktop"
objReg.CreateKey HKEY_CURRENT_USER, strKeyPath
ValueName = "ScreenSaverIsSecure"
strValue = "1"
objReg.SetStringValue HKEY_CURRENT_USER, strKeyPath, ValueName, strValue

您看登錄指令碼是多麼的有趣!Tweakomatic 還具有管理螢幕保護程式的額外指令碼,以及管理 [開始] 功能表、[工作列]、Windows [檔案總管] 資料夾設定值,以及其他許多項目的指令碼。如果您想要尋找管理一般桌面設定值的方法,這就是開始上手的最好地方。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首