ADO Tools: Difference between revisions
		
		
		
		Jump to navigation
		Jump to search
		
No edit summary  | 
				mNo edit summary  | 
				||
| Line 1: | Line 1: | ||
= List all installed OLE DB providers =  | = List all installed OLE DB providers =  | ||
<syntaxhighlight lang="autoit">  | <syntaxhighlight lang="autoit">  | ||
#include <Constants.au3>  | |||
#include <Array.au3>  | #include <Array.au3>  | ||
Global $sOutput, $oRegistry, $oKey, $sKey = "HKCR\CLSID", $iIndexReg = 1, $iIndexResult = 0  | Global $sOutput, $oRegistry, $oKey, $sKey = "HKCR\CLSID", $iIndexReg = 1, $iIndexResult = 0  | ||
Global $aResult[200][3]  | Global $aResult[200][3], $sTitle = "OLE DB Providers", $iMax = 100000, $iMin = 1, $iPrevious = $iMin, $iCurrent = $iMax/2, $iTemp  | ||
ProgressOn($sTitle, "Processing the Registry", "", Default, Default, $DLG_MOVEABLE)  | |||
; Count the number of keys  | |||
While 1  | While 1  | ||
	RegEnumKey($sKey, $iCurrent)  | |||
	If @error = -1 Then ; Requested subkey (key instance) out of range  | |||
		$iMax = $iCurrent  | |||
		$iCurrent = Int(($iMin + $iMax) / 2)  | |||
		$iPrevious = $iMax  | |||
	Else  | |||
		If $iPrevious <= ($iCurrent + 1) And $iPrevious >= ($iCurrent - 1) Then ExitLoop  | |||
		$iMin = $iCurrent  | |||
		$iCurrent = Int(($iMin + $iMax) / 2)  | |||
		$iPrevious = $iMin  | |||
	EndIf  | |||
WEnd  | |||
; Process registry  | |||
While 1  | |||
    If Mod($iIndexReg, 10) = 0 Then  | |||
        $iPercent = Int($iIndexReg * 100 / $iCurrent)  | |||
        ProgressSet($iPercent, $iIndexReg & " keys of " & $iCurrent & " processed (" & $iPercent & "%)")  | |||
    EndIf  | |||
     $sSubKey = RegEnumKey($sKey, $iIndexReg)  |      $sSubKey = RegEnumKey($sKey, $iIndexReg)  | ||
     If @error Then ExitLoop  |      If @error Then ExitLoop  | ||
| Line 16: | Line 37: | ||
     $iIndexReg = $iIndexReg + 1  |      $iIndexReg = $iIndexReg + 1  | ||
WEnd  | WEnd  | ||
ProgressOff()  | |||
ReDim $aResult[$iIndexResult][3]  | ReDim $aResult[$iIndexResult][3]  | ||
_ArrayDisplay($aResult,   | _ArrayDisplay($aResult, $sTitle, "", 0, Default, "Registry key|OLE DB Provider|Description")  | ||
</syntaxhighlight>  | </syntaxhighlight>  | ||
Revision as of 15:59, 9 January 2014
List all installed OLE DB providers
#include <Constants.au3>
#include <Array.au3>
Global $sOutput, $oRegistry, $oKey, $sKey = "HKCR\CLSID", $iIndexReg = 1, $iIndexResult = 0
Global $aResult[200][3], $sTitle = "OLE DB Providers", $iMax = 100000, $iMin = 1, $iPrevious = $iMin, $iCurrent = $iMax/2, $iTemp
ProgressOn($sTitle, "Processing the Registry", "", Default, Default, $DLG_MOVEABLE)
; Count the number of keys
While 1
	RegEnumKey($sKey, $iCurrent)
	If @error = -1 Then ; Requested subkey (key instance) out of range
		$iMax = $iCurrent
		$iCurrent = Int(($iMin + $iMax) / 2)
		$iPrevious = $iMax
	Else
		If $iPrevious <= ($iCurrent + 1) And $iPrevious >= ($iCurrent - 1) Then ExitLoop
		$iMin = $iCurrent
		$iCurrent = Int(($iMin + $iMax) / 2)
		$iPrevious = $iMin
	EndIf
WEnd
; Process registry
While 1
    If Mod($iIndexReg, 10) = 0 Then
        $iPercent = Int($iIndexReg * 100 / $iCurrent)
        ProgressSet($iPercent, $iIndexReg & " keys of " & $iCurrent & " processed (" & $iPercent & "%)")
    EndIf
    $sSubKey = RegEnumKey($sKey, $iIndexReg)
    If @error Then ExitLoop
    $sKeyValue = RegRead($sKey & "\" & $sSubKey, "OLEDB_SERVICES")
    If @error = 0 Then
        $aResult[$iIndexResult][0] = $sKey & "\" & $sSubKey
        $aResult[$iIndexResult][1] = RegRead($sKey & "\" & $sSubKey, "")
        $aResult[$iIndexResult][2] = RegRead($sKey & "\" & $sSubKey & "\OLE DB Provider", "")
        $iIndexResult = $iIndexResult + 1
    EndIf
    $iIndexReg = $iIndexReg + 1
WEnd
ProgressOff()
ReDim $aResult[$iIndexResult][3]
_ArrayDisplay($aResult, $sTitle, "", 0, Default, "Registry key|OLE DB Provider|Description")
Result:
