Jump to content

_RegEnumKeyEx (Lists all subkeys in a specified registry key)


OnePiece

Recommended Posts

Ragazzi cercando in Autoit forum per un codice da leggere il registro, e non trovando niente, ecco o fato questo codice che sembra davvero OKKK, per chi usa AutoIt la troverà davvero tanto tanto utile


#RequireAdmin
#include <Array.au3>

$KeyName = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft"
;$KeyName = "HKEY_CLASSES_ROOT" ;104718
;$KeyName = "HKEY_LOCAL_MACHINE\SOFTWARE\Classes"

Global $a1, $b1
$a1 = TimerInit()
$b1 = _RegEnumKeyEx($KeyName, 0, "Opti*Components") ; to find HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\OptionalComponents
$a1 = TimerDiff($a1)
_ArrayDisplay($b1, $a1)


; #FUNCTION# ========================================================================================================================
; Name...........: _RegEnumKeyEx
; Description ...: Lists all subkeys in a specified registry key
; Syntax.........: _RegEnumKeyEx($KeyName[, $iFlag = 0[, $sFilter = "*"]])
; Parameters ....: $KeyName - The registry key to read.
; $iFlag - Optional specifies Recursion
; |$iFlag = 0 (Default) All Key-SubKeys Recursive Mod
; |$iFlag = 1 All SubKeys Not Recursive Mod
; $sFilter - Optional the filter to use, default is *. (Multiple filter groups such as "All "*.XXx|*.YYY|*.ZZZ")
; Search the Autoit3 helpfile for the word "WildCards" For details.
; Return values .: Success - Return Array List (See Remarks)
; Failure - @Error
; |1 = Invalid $sFilter
; |2 = No Key-SubKey(s) Found
; Author ........: DXRW4E
; Modified.......:
; Remarks .......: The array returned is one-dimensional and is made up as follows:
; $array[0] = Number of Key-SubKeys returned
; $array[1] = 1st Key\SubKeys
; $array[2] = 2nd Key\SubKeys
; $array[3] = 3rd Key\SubKeys
; $array[n] = nth Key\SubKeys
; Related .......:
; Link ..........:
; Example .......: _RegEnumKeyEx("HKEY_CURRENT_USER\Software\AutoIt v3")
; Note ..........:
; ===================================================================================================================================
Func _RegEnumKeyEx($KeyName, $iFlag = 0, $sFilter = "*")
If StringRegExp($sFilter, "[\\/:><]|(?s)\A\s*\z") Then Return SetError(1, 0, "")
Local $DX_REKI[101] = [100], $DX_REKISN, $BS = "\", $DX_REKNL, $I = 1, $DX_Filter = StringRegExpReplace($sFilter, "[\*\s]+", ""), $DX_REKFilter = "(?i)(" & StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace("|" & $sFilter & "|", '\|\h*\|[\|\h]*', "\|"), '[\^\$\(\)\+\[\]\{\}\,\.\]', "\\$0"), "\|([^\*])", "\|^$1"), "([^\*])\|", "$1\$\|"), '\*', ".*"), '^\||\|$', "") & ")"
While $I
$DX_REKI[$I] += 1
$DX_REKISN = RegEnumKey($KeyName, $DX_REKI[$I])
If @error Then
$DX_REKI[$I] = 0
$I -= 1
$KeyName = StringLeft($KeyName, StringInStr($KeyName, "\", 1, -1) - 1)
ContinueLoop
EndIf
If $DX_Filter Then
If StringRegExp($DX_REKISN, $DX_REKFilter) Then $DX_REKNL &= @LF & $KeyName & $BS & $DX_REKISN
Else
$DX_REKNL &= @LF & $KeyName & $BS & $DX_REKISN
EndIf
If $iFlag Then ContinueLoop
$I += 1
If $I > $DX_REKI[0] Then
$DX_REKI[0] += 100
ReDim $DX_REKI[$DX_REKI[0] + 1]
EndIf
$KeyName &= $BS & $DX_REKISN
WEnd
If Not $DX_REKNL Then Return SetError(2, 0, "")
Return StringSplit(StringTrimLeft($DX_REKNL, 1), @LF)
EndFunc

Ciao a tutti.

Edited by OnePiece
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...