執(zhí)行 EnumValues 方法后,我們將返回所有這些值名稱的集合;換言之,我們的集合將由字母 A 到 Z 組成。非常不錯(cuò),只是該集合中不包含任何實(shí)際命令。要獲得這些命令(這是我們的最終目的),我們需要連接到并讀取注冊(cè)表中 26 個(gè)值中的每個(gè)值。 我們能這樣做嗎,我們能很容易地連接到注冊(cè)表中 26 個(gè)值并讀取每一個(gè)值嗎?當(dāng)然可以;事實(shí)上,這就是以下這段代碼所執(zhí)行的操作: 復(fù)制代碼 代碼如下: For Each strValue in arrValueNames If Len(strValue) = 1 Then objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValue,strRunCommand intLength = Len(strRunCommand) strRunCommand = Left(strRunCommand, intLength - 2) Wscript.Echo strRunCommand End If Next 您說對(duì)了:乍一看,它是有點(diǎn)可怕,不是嗎?告訴您原因吧,讓我們向您介紹一個(gè)該 For Each 循環(huán)的簡(jiǎn)化版本,然后我再解釋為何將一些附加代碼添加到此循環(huán)中。該簡(jiǎn)化循環(huán)如下: For Each strValue in arrValueNames objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValue,strRunCommand Wscript.Echo strRunCommand Next 在此我們所要做的就是建立一個(gè)循環(huán),該循環(huán)將遍歷所有注冊(cè)表值。要讀取其中的每個(gè)值,我們只需調(diào)用 GetStringValue 方法: objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValue,strRunCommand GetStringValue 所傳遞的四個(gè)參數(shù):常量 HKEY_CURRENT_USER;變量 strKeyPath;變量 strValue(代表各個(gè)值的名稱,例如 A、B 或 C);名為 strRunCommand 的輸出參數(shù)。通過使用此輸出參數(shù),我們只需指定一個(gè)變量名稱,GetStringValue 方法會(huì)將注冊(cè)表值的值(即,相應(yīng)的“運(yùn)行”命令)分配給它。調(diào)用 GetStringValue 后,我們將回顯 strRunCommand,繼續(xù)循環(huán),并處理集合中的下一個(gè)值。 對(duì)于該簡(jiǎn)化的 For Each 循環(huán)已講了不少了;而真正的 For Each 循環(huán)中的所有額外代碼又怎樣呢?之所以使用額外代碼主要是為了可為我們提供稍好些的輸出。例如,在 RunMRU 項(xiàng)中,有一個(gè)名為 MRUList 的注冊(cè)表值。這并不代表一個(gè)實(shí)際的命令;而是代表最近使用的命令的先后出現(xiàn)順序。這對(duì)我們而言并不重要(至少今天不重要),因此我們寧愿跳過該 MRUList 值。這就是下面的代碼所要執(zhí)行的操作: If Len(strValue) = 1 Then 在此行代碼中,我們使用 Len 函數(shù)來檢查值名稱中的字符數(shù)。如果字符數(shù)(長(zhǎng)度)等于 1,我們將繼續(xù)進(jìn)行并讀取該值。如果長(zhǎng)度不等于 1(顯而易見,當(dāng) MRUList 具有 7 個(gè)字符時(shí),就屬于這種情況),則我們只需跳過該值并移至集合中的下一項(xiàng)即可。 我們添加的另一小段代碼是: intLength = Len(strRunCommand) strRunCommand = Left(strRunCommand, intLength - 2) 如果您查看注冊(cè)表,您會(huì)發(fā)現(xiàn)所有命令的末尾都添加了一個(gè) /1。如果需要的話,可將其保留下來,不過很容易將其去掉。我們所要做的是確定命令的長(zhǎng)度,然后使用 Left 函數(shù)返回字符串中的第一個(gè) x 字符。x 等于什么?它等于字符總數(shù)減 2。這就意味著,我們要獲取除最后 2 個(gè)字符(即 /1)以外的所有字符,并將它們回顯到屏幕上。 至此您已實(shí)現(xiàn)了您的目的:一個(gè)可返回在運(yùn)行對(duì)話框所鍵入的最近使用的命令的腳本。我們?nèi)圆恢郎衩氐臉翘莸降淄ㄏ蚰睦铮覀冃枰茸鲋匾氖虑椤? html教程