Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
objRegistry.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
For i = 0 to UBound(arrValueNames)
strValueName = arrValueNames(i)
objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
Wscript.Echo arrValueNames(i) & " -- " & strValue
Next
一開始我們先定義一個名叫 HKEY_LOCAL_MACHINE 的常數,將該值設為 &H80000002。然後利用這個常數,指出我們要使用 HKEY_LOCAL_MACHINE 登錄 Hive。接著連接到 WMI 服務和標準登錄提供者 (root\default:StdRegProv),再利用這行程式碼,將 HKEY_LOCAL_MACHINE 內的登錄路徑指派給變數 strKeyPath:
strKeyPath = "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
最後,安裝的 ODBC 驅動程式會在這個登錄機碼中儲存為個別登錄值,如下所示:
因此,若要擷取所有這些登錄值的集合,必須呼叫 EnumValues 方法,這個方法會自動抓取指定機碼中所有的值:
objRegistry.EnumValues HKEY_LOCAL_MACHINE, strKeyPath, arrValueNames, arrValueTypes
當我們呼叫 EnumValues 時,必須提供兩個 In 參數以及兩個 Out 參數。「In 參數」是指我們提供給方法的值;我們在這個指令碼中,代入常數 HKEY_LOCAL_MACHINE 和變數 strKeyPath。這兩個參數共同告訴指令碼,我們目前所用的是哪個登錄機碼。
「Out 參數」則是指方法提供給我們的資訊。您只要提供一對變數名稱,即可取得這項資訊。在我們的指令碼中,變數 arrValueNames 會儲存 SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers 中所有登錄值名稱的陣列。變數 arrValueTypes 則儲存所有這些登錄值的資料類型陣列。(我們之所以加入這個參數,只是因為必須加入。因為我們所有登錄值的資料類型都一樣 (REG_SZ),既然不必擔心資料類型,就不必使用 arrValueTypes)。
在呼叫 EnumValues 之後,所有的個別登錄值名稱都會在變數 arrValueNames 中儲存為陣列。若要存取那些值,必須設定一個 For-Next 迴圈,從陣列中的 0 執行到最後一個項目 (上限或 UBound)。(如您所知,在 VBScript 中,陣列的第一個項目一定是項目 0)。這就是下面這行程式碼所做的動作:
For i = 0 to UBound(arrValueNames)
在迴圈中,我們把第一個登錄值的名稱,指派給一個名叫 strValueName 的變數:
strValueName = arrValueNames(i)
這是因為當時我們只有個別登錄值的名稱。若要實際取得已被指派給那些登錄項目的值,必須呼叫 GetStringValue 方法,如下所示:
objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
正如您所看到,我們在 GetStringValue 代入四個參數:
- HKEY_LOCAL_MACHINE,代表登錄 Hive。
- strKeyPath,代表 HKEY_LOCAL_MACHINE 中的登錄路徑。
- strValueName,代表個別登錄值。
- strValue,代表儲存登錄項目值的 Out 參數。
之後只要使用下面這行程式碼來回應登錄值的名稱,以及指派給它的值就可以了:
Wscript.Echo arrValueNames(i) & " -- " & strValue
當我們執行指令碼時,便會取回如下所示的輸出:
SQL Server -- Installed
Microsoft Access Driver (*.mdb) -- Installed
Microsoft Text Driver (*.txt; *.csv) -- Installed
Microsoft Excel Driver (*.xls) -- Installed
Microsoft dBase Driver (*.dbf) -- Installed
Microsoft Paradox Driver (*.db ) – Installed
下面這句話也許還不夠直接,不過您應該明白為何要提出來了:所謂安裝的 ODBC 驅動程式清單,就是安裝的 ODBC 驅動程式清單。(雖然我們不知道他們為什麼這麼說,不過至少用在這裡還蠻有道理的)。 |