問:
您好,指令碼專家!我最近下載了你們的“指令碼中心”螢幕保護裝置程式,當有人登入電腦時,它運行起來棒極了。但是無人登入時,電腦卻使用其它螢幕保護裝置程式。如何讓電腦在無人登入時也使用“指令碼中心”螢幕保護裝置程式?
-- RF
答:
您好,RF。您知道,我們遇到過這種情況,您可能在設法欺騙這些老指令碼專家們。舉個例子來說,我們怎麼知道您希望無人登入電腦時啟動並執行螢幕保護裝置程式就是我們的螢幕保護裝置程式?也許您只是奉承指令碼專家,好讓指令碼專家回答您的問題。回答完問題後,您就會把我們甩掉,安裝其它一些與指令碼編寫有關的螢幕保護裝置程式作為預設螢幕保護裝置程式。RF 啊 RF:您真的認為指令碼專家頭腦如此簡單願意受用這樣的假意恭維嗎?
嗯,您是該這樣認為,因為我們確實如此:
複製代碼 代碼如下:
Const HKEY_USERS = &H80000003
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ".Default\Control Panel\Desktop"
ValueName = "SCRNSAVE.EXE"
strValue = "C:\WINDOWS\System32\Script Center.scr"
objReg.SetStringValue HKEY_USERS, strKeyPath, ValueName, strValue
正如您所看到的,這是一個用於更改註冊表的 WMI 指令碼。它與我們過去為您展示的許多其它註冊表修改指令碼非常相似,但有一處特殊更改。在以前的指令碼中,我們總是先定義一個常量,告訴指令碼我們要處理 HKEY_CURRENT_USER 或 HKEY_LOCAL_MACHINE 註冊表登錄區。這樣做有充分的理由:我們希望將所做的一切更改都應用於目前使用者或電腦本身。不過,請注意此指令碼的第一行:
Const HKEY_USERS = &H80000003
秘密就在這裡:這一次我們要處理 HKEY_USERS 註冊表登錄區。除了其它用途外,HKEY_USERS 登錄區為您提供了這樣一個場所:在其中配置的設定可應用於登入到電腦的任何使用者,而不僅僅是某一特定的使用者。換言之,如果您使用 HKEY_USERS 配置螢幕保護裝置程式,該螢幕保護裝置程式便是預設螢幕保護裝置程式,會應用於登入到電腦的任何新使用者。(除非使用者明確配置其它螢幕保護裝置程式,否則會繼續應用預設螢幕保護裝置程式。)同樣,無人登入電腦時,也會使用此預設螢幕保護裝置程式。
酷吧?順便提一下,您還可以使用該註冊表登錄區配置顯示在登入螢幕上的牆紙;只需將註冊表值 HKEY_USERS\.Default\Control Panel\Desktop\Wallpaper 設定為相應的檔案路徑即可。類似下面的代碼:
複製代碼 代碼如下:
Const HKEY_USERS = &H80000003
strComputer = "."
Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ".Default\Control Panel\Desktop"
ValueName = "Wallpaper"
strValue = "C:\WINDOWS\System32\Script Center.bmp"
objReg.SetStringValue HKEY_USERS, strKeyPath, ValueName, strValue
定義常量後,接下來要串連本機電腦上的 WMI 服務(雖然此指令碼在遠端電腦上的運行效果同樣不錯)。然後,為下面三個不同的變數賦值:
• strKeyPath - HKEY_USERS 內登錄機碼的路徑。在本例中,路徑為 .Default\Control Panel\Desktop。
• ValueName - 要更改的註冊表值的名稱 (SCRNSAVE.EXE)。
• strValue - 要賦給 SCRNSAVE.EXE 的新值。在此指令碼中,該值是此螢幕保護裝置程式的完整路徑。
最後,我們要調用 SetStringValue 方法(將常量 HKEY_USERS 和這三個變數一起作為參數傳遞),這樣就大功告成了:
objReg.SetStringValue HKEY_USERS, strKeyPath, ValueName, strValue
現在,如果您登出後再等幾分鐘,就會運行“指令碼中心”螢幕保護裝置程式。(假設註冊表值 ScreenSaveActive 設定為 1;如果設定為 0,則表示禁用該螢幕保護裝置程式。)
知道這有多簡單了吧?噢,不,我們不是說指令碼(雖然指令碼也非常簡單);我們是說要獲得問題的答案有多簡單,當然,您提問題的措辭很對路。就象常說的那句話,誰都愛聽恭維話。