Jump to content
Sign in to follow this  
DXRW4E

_RegEnumKeyValEx (_RegEnumKeyEx & _RegEnumValEx)

Recommended Posts

Hi All, Sorry for my English

I searched the forum a function like that, and not found, indeed, there are many topics request regarding all this function, and I have done this, I did not know what name to put them RegEnumKeyToArray or RegListToArray or ect ect in the end I chose _RegEnumKeyValEx (_RegEnumKeyEx & _RegEnumValEx), the function does almost everything (also includes $sFilter as the >_FileListToArrayEx), and works really fast too

 

#include-once

; #UDF# =======================================================================================================================
; Title .........: Reads\Search the name of a Key\Subkey\Value
; AutoIt Version : 3.3.8.1
; Language ......: English
; Description ...: Lists all Keys\Subkeys\Values in a specified registry key
; Author(s) .....: DXRW4E
; Notes .........:
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
;~ _RegEnumKeyEx
;~ _RegEnumValEx
; ===============================================================================================================================

#Region ;**** Global constants and vars ****
Global Const $sValueTypes[12] = ["REG_NONE","REG_SZ","REG_EXPAND_SZ","REG_BINARY","REG_DWORD","REG_DWORD_BIG_ENDIAN","REG_LINK","REG_MULTI_SZ","REG_RESOURCE_LIST","REG_FULL_RESOURCE_DESCRIPTOR","REG_RESOURCE_REQUIREMENTS_LIST","REG_QWORD"]
#EndRegion ;**** Global constants and vars ****

; #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 (add the flags together for multiple operations):
;                 |$iFlag = 0 (Default) All Key-SubKeys Recursive Mod
;                 |$iFlag = 1 All SubKeys Not Recursive Mod
;                 |$iFlag = 2 Include in ArrayList in the first element $KeyName
;                 |$iFlag = 16 $sFilter do Case-Sensitive matching (By Default $sFilter do Case-Insensitive matching)
;                 |$iFlag = 32 Disable the return the count in the first element - effectively makes the array 0-based (must use UBound() to get the size in this case).
;                   By Default the first element ($array[0]) contains the number of strings returned, the remaining elements ($array[1], $array[2], etc.)
;                 |$iFlag = 64 $sFilter is REGEXP Mod, See Pattern Parameters in StringRegExp
;                 |$iFlag = 128 Enum value's name (_RegEnumKeyEx Return a 2D array, maximum Array Size limit is 3999744 Key\Value)
;                 |$iFlag = 256 Reads a value data, this flag will be ignored if the $iFlag = 128 is not set
;                 $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.
;                 $vFilter - Optional the filter to use for ValueName, $vFilter will be ignored if the $iFlag = 128 is not set
;                  default is *. (Multiple filter groups such as "All "*.XXx|*.YYY|*.ZZZ") Search the Autoit3 helpfile for the word "WildCards" For details.
;                 $iValueTypes - Optional, set Value Types to search (Default $iValueTypes = 0 Read All), $iValueTypes will be ignored if the $iFlag = 128 is not set
;                   (add the flags together for multiple operations):
;                   1 = REG_SZ
;                   2 = REG_EXPAND_SZ
;                   3 = REG_BINARY
;                   4 = REG_DWORD
;                   5 = REG_DWORD_BIG_ENDIAN
;                   6 = REG_LINK
;                   7 = REG_MULTI_SZ
;                   8 = REG_RESOURCE_LIST
;                   9 = REG_FULL_RESOURCE_DESCRIPTOR
;                   10 = REG_RESOURCE_REQUIREMENTS_LIST
;                   11 = REG_QWORD
; Return values .: Success  - Return Array List (See Remarks)
;                 Failure - @Error
;                 |1 = Invalid $sFilter
;                 |2 = No Key-SubKey(s) Found
;                 |3 = Invalid $vFilter
;                 |4 = No Value-Name(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
;
;                 If is set the $iFlag = 128 The array returned is 2D array and is made up as follows:
;                               $array[0][0] = Number of Key-SubKeys returned
;                               $array[1][0] = 1st Key\SubKeys
;                               $array[1][1] = 1st Value name
;                               $array[1][2] = 1st Value Type (REG_NONE or REG_SZ or REG_EXPAND_SZ ect ect)
;                               $array[1][3] = 1st Value Data (If is set $iFlag = 256 Else Value Data = "")
;                               $array[2][0] = 2nd Key\SubKeys
;                               $array[2][1] = 2nd Value name
;                               $array[2][2] = 2nd Value Type (REG_NONE or REG_SZ or REG_EXPAND_SZ ect ect)
;                               $array[2][3] = 2nd Value Data (If is set $iFlag = 256 Else Value Data = "")
;                               $array[n][0] = nth Key\SubKeys
; Related .......: _RegEnumValEx()
; Link ..........:
; Example .......: _RegEnumKeyEx("HKEY_CURRENT_USER\Software\AutoIt v3")
; Note ..........:
; ===================================================================================================================================
Func _RegEnumKeyEx($KeyName, $iFlag = 0, $sFilter = "*", $vFilter = "*", $iValueTypes = 0)
    If StringRegExp($sFilter, StringReplace("^\s*$|\v|\\|^\||\|\||\|$", Chr(BitAND($iFlag, 64) + 28) & "\|^\||\|\||\|$", "\\\\")) Then Return SetError(1, 0, "")
    Local $IndexSubKey[101] = [100], $SubKeyName, $BS = "\", $sKeyList, $I = 1, $sKeyFlag = BitAND($iFlag, 1), $sKeyFilter = StringReplace($sFilter, "*", "")
    If BitAND($iFlag, 2) Then $sKeyList = @LF & $KeyName
    If Not BitAND($iFlag, 64) Then $sFilter = StringRegExpReplace(BitAND($iFlag, 16) & "(?i)(", "16\(\?\i\)|\d+", "") & StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($sFilter, "[^*?|]+", "\\Q$0\\E"), "\\E(?=\||$)", "$0\$"), "(?<=^|\|)\\Q", "^$0"), "\*+", ".*") & ")"
    While $I
        $IndexSubKey[$I] += 1
        $SubKeyName = RegEnumKey($KeyName, $IndexSubKey[$I])
        If @error Then
            $IndexSubKey[$I] = 0
            $I -= 1
            $KeyName = StringLeft($KeyName, StringInStr($KeyName, "\", 1, -1) - 1)
            ContinueLoop
        EndIf
        If $sKeyFilter Then
            If StringRegExp($SubKeyName, $sFilter) Then $sKeyList &= @LF & $KeyName & $BS & $SubKeyName
        Else
            $sKeyList &= @LF & $KeyName & $BS & $SubKeyName
        EndIf
        If $sKeyFlag Then ContinueLoop
        $I += 1
        If $I > $IndexSubKey[0] Then
            $IndexSubKey[0] += 100
            ReDim $IndexSubKey[$IndexSubKey[0] + 1]
        EndIf
        $KeyName &= $BS & $SubKeyName
    WEnd
    If Not $sKeyList Then Return SetError(2, 0, "")
    If BitAND($iFlag, 128) <> 128 Then Return StringSplit(StringTrimLeft($sKeyList, 1), @LF, StringReplace(BitAND($iFlag, 32), "32", 2))
    $sKeyList = _RegEnumValEx(StringSplit(StringTrimLeft($sKeyList, 1), @LF), $iFlag, $vFilter, $iValueTypes)
    Return SetError(@Error, 0, $sKeyList)
EndFunc


; #FUNCTION# ========================================================================================================================
; Name...........: _RegEnumValEx
; Description ...: Lists all values in a specified registry key
; Syntax.........: _RegEnumValEx($KeyName[, $iFlag = 0[, $sFilter = "*"]])
; Parameters ....: $KeyName - The registry key to read Or one-dimensional array RegKeyList
;                   use _RegEnumKeyEx() to get $RegKeyList (example $RegKeyList = [3, 1st Key\SubKeys, 2st Key\SubKeys, nth Key\SubKeys])
;                 |$iFlag = 16 $sFilter do Case-Sensitive matching (By Default $sFilter do Case-Insensitive matching)
;                 |$iFlag = 32 Disable the return the count in the first element - effectively makes the array 0-based (must use UBound() to get the size in this case).
;                   By Default the first element ($array[0]) contains the number of strings returned, the remaining elements ($array[1], $array[2], etc.)
;                 |$iFlag = 64 $sFilter is REGEXP Mod, See Pattern Parameters in StringRegExp
;                 |$iFlag = 256 Reads a value data
;                 $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.
;                 $iValueTypes - Optional, set Value Types to search (Default $iValueTypes = 0 Read All)
;                   (add the flags together for multiple operations):
;                   1 = REG_SZ
;                   2 = REG_EXPAND_SZ
;                   3 = REG_BINARY
;                   4 = REG_DWORD
;                   5 = REG_DWORD_BIG_ENDIAN
;                   6 = REG_LINK
;                   7 = REG_MULTI_SZ
;                   8 = REG_RESOURCE_LIST
;                   9 = REG_FULL_RESOURCE_DESCRIPTOR
;                   10 = REG_RESOURCE_REQUIREMENTS_LIST
;                   11 = REG_QWORD
; Return values .: Success  - Return Array List (See Remarks)
;                 Failure - @Error
;                 |3 = Invalid $sFilter
;                 |4 = No Value-Name(s) Found
; Author ........: DXRW4E
; Modified.......:
; Remarks .......: The array returned is 2D array and is made up as follows:
;                               $array[0][0] = Number of Key-SubKeys returned
;                               $array[1][0] = 1st Key\SubKeys
;                               $array[1][1] = 1st Value name
;                               $array[1][2] = 1st Value Type (REG_NONE or REG_SZ or REG_EXPAND_SZ ect ect)
;                               $array[1][3] = 1st Value Data (If is set $iFlag = 256 Else Value Data = "")
;                               $array[2][0] = 2nd Key\SubKeys
;                               $array[2][1] = 2nd Value name
;                               $array[2][2] = 2nd Value Type (REG_NONE or REG_SZ or REG_EXPAND_SZ ect ect)
;                               $array[2][3] = 2nd Value Data (If is set $iFlag = 256 Else Value Data = "")
;                               $array[n][0] = nth Key\SubKeys
; Related .......: _RegEnumKeyEx()
; Link ..........:
; Example .......: _RegEnumValEx("HKEY_CURRENT_USER\Software\AutoIt v3")
; Note ..........:
; ===================================================================================================================================
Func _RegEnumValEx($aKeyList, $iFlag = 0, $sFilter = "*", $iValueTypes = 0)
    If StringRegExp($sFilter, "\v") Then Return SetError(3, 0, "")
    If Not IsArray($aKeyList) Then $aKeyList = StringSplit($aKeyList, @LF)
    Local $aKeyValList[1954][4], $iKeyVal = Int(BitAND($iFlag, 32) = 0), $sKeyVal = 1953, $sRegEnumVal, $iRegEnumVal, $RegRead = BitAND($iFlag, 256), $vFilter = StringReplace($sFilter, "*", "")
    If Not BitAND($iFlag, 64) Then $sFilter = StringRegExpReplace(BitAND($iFlag, 16) & "(?i)(", "16\(\?\i\)|\d+", "") & StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($sFilter, "[^*?|]+", "\\Q$0\\E"), "\\E(?=\||$)", "$0\$"), "(?<=^|\|)\\Q", "^$0"), "\*+", ".*") & ")"
    For $i = 1 To $aKeyList[0]
        $iRegEnumVal = 0
        While 1
            If $iKeyVal = $sKeyVal Then
                If $sKeyVal = 3999744 Then ExitLoop
                $sKeyVal *= 2
                ReDim $aKeyValList[$sKeyVal + 1][4]
            EndIf
            $aKeyValList[$iKeyVal][0] = $aKeyList[$i]
            $iRegEnumVal += 1
            $sRegEnumVal = RegEnumVal($aKeyList[$i], $iRegEnumVal)
            If @Error <> 0 Then
                If $iRegEnumVal = 1 And $vFilter = "" Then $iKeyVal += 1
                ExitLoop
            EndIf
            $aKeyValList[$iKeyVal][2] = $sValueTypes[@Extended]
            If BitAND(@Extended, $iValueTypes) <> $iValueTypes Then ContinueLoop
            If $vFilter And Not StringRegExp($sRegEnumVal, $sFilter) Then ContinueLoop
            $aKeyValList[$iKeyVal][1] = $sRegEnumVal
            If $RegRead Then $aKeyValList[$iKeyVal][3] = RegRead($aKeyList[$i], $sRegEnumVal)
            $iKeyVal += 1
        WEnd
    Next
    $sRegEnumVal = $iKeyVal - Int(BitAND($iFlag, 32) = 0)
    If Not $sRegEnumVal Or ($sRegEnumVal = 1 And $vFilter = "" And $aKeyValList[$iKeyVal - $sRegEnumVal][2] = "") Then Return SetError(4, 0, "")
    ReDim $aKeyValList[$iKeyVal][4]
    If Not BitAND($iFlag, 32) Then $aKeyValList[0][0] = $iKeyVal - 1
    Return $aKeyValList
EndFunc

example

#RequireAdmin
#include <_RegEnumKeyValEx.au3>
#include <Array.au3>

Global $a, $t, $Error, $Extended, $KeyName
;$KeyName = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft"
;$KeyName = "HKEY_CLASSES_ROOT"    ;104718
;$KeyName = "HKEY_LOCAL_MACHINE\SOFTWARE\Classes"
$KeyName = "HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3"

$t = TimerInit()
;$a = _RegEnumKeyEx($KeyName, 0,  "Opti*Components")    ; to find HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\OptionalComponents
;$a = _RegEnumKeyEx($KeyName, 0,  "*")
$a = _RegEnumKeyEx($KeyName,  128 + 256 + 32 + 16,  "*", "*vers*")
$Error = @Error
$Extended = @Extended
$t = TimerDiff($t)
ConsoleWrite("Timer = " & $t & @LF)
ConsoleWrite("Return = " & $a & " - $Error = " & $Error & " - $Extended = " & $Extended & @LF)
_ArrayDisplay($a)

;or
$a = _RegEnumKeyEx("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3", 128 + 256)
;Return 2D array all Keys\Subkes\Values ect ect
_ArrayDisplay($a)

$a = _RegEnumKeyEx("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3", 128 + 256, "*","*Ver*on*")
;Return $a[2][4] = [[1],["HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt","Version","REG_SZ","v3.3.8.1"]]
_ArrayDisplay($a)

$a = _RegEnumKeyEx("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3", 128 + 256 + 32, "*","*ver*on*")
;Return $a[1][4] = [["HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt","Version","REG_SZ","v3.3.8.1"]]
_ArrayDisplay($a)

$a = _RegEnumKeyEx("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3", 128 + 256 + 16, "*","*ver*on*")
;Return @Error = 4 ($iFlag = 16 $sFilter do Case-Sensitive matching, Version <> version)
;_ArrayDisplay($a)

$a = _RegEnumValEx("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", 256,"*Ver*on*")
;Return $a[2][4] = [[1],["HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt","Version","REG_SZ","v3.3.8.1"]]
_ArrayDisplay($a)

_RegEnumKeyValEx.au3

Edited by DXRW4E

apps-odrive.pngdrive_app_badge.png box-logo.png new_logo.png MEGA_Logo.png

Share this post


Link to post
Share on other sites

Updated, Added $sFilter Case-sensitivity flag & Disable the return the count in the first element, for more see the first post

Ciao.


apps-odrive.pngdrive_app_badge.png box-logo.png new_logo.png MEGA_Logo.png

Share this post


Link to post
Share on other sites

This is so awesome! What are the chances, because I have been trying to figure this out all day yesterday and now you've come along and made my life a million times easier!

Thank you!

Share this post


Link to post
Share on other sites

@jazzyjeff

Thank You, You are welcome

@All

Updated, add $iFlag = 64 now you can use the $sFilter in RegExp Mod (See Pattern Parameters in StringRegExp )

Ciao.

Edited by DXRW4E

apps-odrive.pngdrive_app_badge.png box-logo.png new_logo.png MEGA_Logo.png

Share this post


Link to post
Share on other sites

DXRW4E

Is there any chance you could add an option to return all sub values as well into a 2d array?

This would make this function perfect!

Share this post


Link to post
Share on other sites

Thank you for the great script.

I have added to your example:

#include <_RegEnumKeyValEx.au3>

I have changed in your example line 19:

From:

_ArrayDisplay($a, $a1)

To

_ArrayDisplay($a)
 

Thank you,

Docfxit

Edited by Docfxit

Share this post


Link to post
Share on other sites

Ive been working with this for uninstall keys and i wondered is there any way to have it show the ProgramName & InstallLocation keys in the array with the search?

because often they are msi uninstallers so i cant tell what they are for?

Code Im using

#RequireAdmin
#include <_RegEnumKeyValEx.au3>
#include <Array.au3>
Opt("TrayAutoPause",0)

Global $UninstallList
$sRegPath = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKCU64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'
;~ =================================================
Global $aRegPath = StringSplit($sRegPath, "|")
;~ _ArrayDisplay( $aRegPath)
;~ =================================================

Global $UninstallCheck, $UninstallKeys[0][4]
For $regloop = 1 To $aRegPath[0]
    If IsArray($aRegPath) Then
        $UninstallCheck = _RegEnumKeyEx($aRegPath[$regloop], 128 + 256, "*","*UninstallS*") ;*UninstallS*
        ConsoleWrite('UninstallCheck Is Array & @error = ' & @error & @CRLF)
;~         _ArrayDisplay($UninstallCheck, "To concatenate", Default, 8)
        _ArrayConcatenate($UninstallKeys, $UninstallCheck, 1) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        ConsoleWrite('UninstallArray & @error = ' & @error & @CRLF)
;~         _ArrayDisplay($UninstallKeys, "Concatenated", Default, 8)
    Else
        ConsoleWrite('UninstallCheck Not Array ' & @CRLF)
        ContinueLoop
    EndIf
Next
        _ArrayDisplay($UninstallKeys, "Concatenated", Default, 8)

This shows me all the uninstallers but not what they belong to

Suggestions?

Edited by Chimaera

Share this post


Link to post
Share on other sites

Hi Chimaera, we are offtopic because this is not about the RegEnumKeyEx, but the msi setup http://technet.microsoft.com/en-us/library/bb892810.aspx

however here

#RequireAdmin
#include <_RegEnumKeyValEx.au3>
#include <Array.au3>

Global Const $sPatternGUID = "\{?(.)(.)(.)(.)(.)(.)(.)(.)-?(.)(.)(.)(.)-?(.)(.)(.)(.)-?(.)(.)(.)(.)-?(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)\}?"
Global Const $sComponentIdPattern  = "$8$7$6$5$4$3$2$1$12$11$10$9$16$15$14$13$18$17$20$19$22$21$24$23$26$25$28$27$30$29$32$31"
;;Global Const $scGUIDPattern = "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)"
Global Const $sGUIDPattern  = "{$8$7$6$5$4$3$2$1-$12$11$10$9-$16$15$14$13-$18$17$20$19-$22$21$24$23$26$25$28$27$30$29$32$31}"

; #FUNCTION# =======================================================================================================================================================
; Name...........: _GetCompressedGUID
; Description ...: Connvert String GUID to String Compressed GUID
; Syntax.........: _GetCompressedGUID($sGUID[, $iFlags])
; Parameters ....: $sGUID - String GUID
;                  $iFlags - Optional, (Default = 0), if $iFlags $sGUID must be contain String Compressed GUID
; Return values .: String Product Properties, and set error
; Author ........: DXRW4E
; Modified.......:
; Remarks .......:
; Link ..........:
; Example .......:
; Note ..........:
; ==================================================================================================================================================================
Func _GetCompressedGUID($sGUID, $iFlags = 0)
    Return StringRegExpReplace($sGUID, $sPatternGUID, ($iFlags ? $sGUIDPattern : $sComponentIdPattern))
EndFunc


Global $aUninstallCheck, $aKeyList[1] = [0], $aMsiPath, $sMsiPath = "HKLM\SOFTWARE\Classes\Installer\Products\"
Global $aRegPath = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKLM64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\|' & _
        'HKCU64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'
$aRegPath = StringSplit($aRegPath, "|")

For $i = 1 To $aRegPath[0]
    $aRegEnumKeyEx = _RegEnumKeyEx($aRegPath[$i], 256, "*","*") ;*UninstallS*
    If Not @Error Then
        ReDim $aKeyList[$aKeyList[0] + $aRegEnumKeyEx[0] + 1]
        For $y = 1 To $aRegEnumKeyEx[0]
            $aKeyList[$y + $aKeyList[0]] = $aRegEnumKeyEx[$y]
        Next
        $aKeyList[0] += $aRegEnumKeyEx[0]
    EndIf
Next
If $aKeyList[0] Then
    ;;_RegEnumValEx("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", 256,"*Ver*on*") or _RegEnumValEx($aKey, 256,"*Ver*on*")
    $aUninstallCheck = _RegEnumValEx($aKeyList, 256, "*UninstallS*")
    If Not @Error Then
        For $i = 1 To $aUninstallCheck[0][0]
            $aMsiPath = StringRegExp($aUninstallCheck[$i][3], "^(?i)\h*MsiExec.exe\h+/\w\h*(\{[^\}]+\})", 1)
            If @Error then ContinueLoop
            ; Example
            ;; Example $DotNet4 = "HKLM\SOFTWARE\Classes\Installer\Products\%NetFX_Client_InstallerCode%"
            ;;RegRead($DotNet4, "AdvertiseFlags") - > %REG_DWORD%,"388"
            ;;RegRead($DotNet4, "Assignment") - > %REG_DWORD%,"1"
            ;;RegRead($DotNet4, "AuthorizedLUAApp") - > %REG_DWORD%,"0"
            ;;RegRead($DotNet4, "Clients") - > %REG_MULTI_SZ%,":"
            ;;RegRead($DotNet4, "InstanceType") - > %REG_DWORD%,"0"
            ;;RegRead($DotNet4, "Language") - > %REG_DWORD%,"0"
            ;;RegRead($DotNet4, "PackageCode") - > %REG_SZ%,"%NetFX_Client_PackageCode%"
            ;;RegRead($DotNet4, "ProductName", ,"%CoreProductName%"
            ;;RegRead($DotNet4, "Version") - > %REG_DWORD%,"67139183"
            ;;RegRead($DotNet4 & "\SourceList", "LastUsedSource") - > %REG_EXPAND_SZ%,"n;1;%SystemRoot%\Windows\Installer\"
            ;;RegRead($DotNet4 & "\SourceList", "PackageName") - > "netfx_Core_x86.msi"
            ;;RegRead($DotNet4 & "\SourceList\Media" ,"1") -> REG_SZ%";1"
            ;;RegRead($DotNet4 & "\SourceList\Net" ,"1") - > %REG_EXPAND_SZ%,"%SystemRoot%\Windows\Installer\"
            ;
            $aUninstallCheck[$i][3] &= @LF & RegRead($sMsiPath & _GetCompressedGUID($aMsiPath[0]) & "\SourceList", "PackageName")
            $aUninstallCheck[$i][3] &= @LF & StringRegExpReplace(RegRead($sMsiPath & _GetCompressedGUID($aMsiPath[0]) & "\SourceList", "LastUsedSource"), "^.*;(?=\w)", "")
            ;
            ;;$aTemp =  _RegEnumKeyEx($sMsiPath & _GetCompressedGUID($aMsiPath[0]), 128 + 256, "*","*")
            ;;If Not @Error Then
            ;;  $aTemp[0][1] = $aUninstallCheck[$i][3]
            ;;  $aUninstallCheck[$i][3] = $aTemp
            ;;EndIf
            ;;;; _ArrayDisplay($aUninstallCheck[$i][3])
        Next
    EndIf
EndIf
_ArrayDisplay($aUninstallCheck)

;~ For $i = 1 To $aUninstallCheck[0][0]
;~  If IsArray($aUninstallCheck[$i][3]) Then
;~      ;;msi mod
;~      $sUinstallComand = ($aUninstallCheck[$i][3])[0][1]
;~  Else
;~      ;;
;~  EndIf
;~ Next

Ciao.

Edited by DXRW4E

apps-odrive.pngdrive_app_badge.png box-logo.png new_logo.png MEGA_Logo.png

Share this post


Link to post
Share on other sites

@OffTopic

Thats amazing i didnt even know they could be deciphered like that

Windows Installer GUID Compressed GUID

look also Darwin Descriptors

#Region ;Encoding-Decoding Base85

;; tables for encoding and decoding base85
Global Const $aTable_Dec85[0x80] = [ _
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, _
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, _
    0xff,0x00,0xff,0xff,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff, _
    0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0xff,0xff,0xff,0x16,0xff,0x17, _
    0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, _
    0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0xff,0x34,0x35,0x36, _
    0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46, _
    0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0xff,0x53,0x54,0xff]
Global Const $aTable_Enc85[85] = [ _
    "!","$","%","&","'","(",")","*","+",",","-",".","0","1","2","3","4","5","6","7","8", _
    "9","=","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q", _
    "R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g", _
    "h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","}","~"]


; #FUNCTION# =======================================================================================================================================================
; Name...........: _Decode_Base85_GUID
; Description ...: Converts a (base85 encoded GUID) Darwin Descriptor into a StringGUID, String Base85 encoded GUIDs should be 20 characters long.
; Syntax.........: _Decode_Base85_GUID($sDarwinDes)
; Parameters ....: $sDarwinDes   - String (base85 encoded) Darwin Descriptor
; Return values .: If the function succeeds, return StringGUID. If the function fails, return False
; Author ........: DXRW4E
; Modified.......:
; Remarks .......:
; Link ..........:
; Example .......:
; Note ..........:  This function was inspired by ReactOS Project
;                   http://www.reactos.org/
;                  * Copyright 2002-2005 Mike McCormack for CodeWeavers
;                  * Copyright 2005 Aric Stewart for CodeWeavers
; ==================================================================================================================================================================
Func _Decode_Base85_GUID($sDarwinDes)
    Local $dData = 0, $dBase = 1, $tGUID = DllStructCreate("struct; ulong Data1;ulong Data2;ulong Data3;ulong Data4;endstruct")
    If StringLen($sDarwinDes) < 20 Then Return SetError(1, 0, False)
    $sDarwinDes = StringToASCIIArray($sDarwinDes)
    For $i = 0 to 19 Step 5
        $dData = 0
        $dBase = 1
        For $y = $i To $i + 4
            $dData += $aTable_Dec85[$sDarwinDes[$y]] * $dBase
            If $sDarwinDes[$y] >= 0x80 Then Return SetError(2, 0, False)
            If $sDarwinDes[$y] = 0xff Then Return SetError(3, 0, False)
            $dBase *= 85
        Next
        DllStructSetData($tGUID, Round($i/5) + 1, $dData)
    Next
    Local $aResult = DllCall("ole32.dll", "int", "StringFromGUID2", "struct*", $tGUID, "wstr", "", "int", 40)
    If @Error Or Not $aResult[0] Then Return SetError(@error, @extended, False)
    Return $aResult[2]
EndFunc


; #FUNCTION# =======================================================================================================================================================
; Name...........: _Decode_Base85_GUIDEx
; Description ...: Converts a (base85 encoded GUID) Darwin Descriptor into a StringGUID, String Base85 encoded GUIDs should be 20 characters long.
; Syntax.........: _Decode_Base85_GUID($sDarwinDes)
; Parameters ....: $sDarwinDes   - String (base85 encoded) Darwin Descriptor
; Return values .: If the function succeeds, return StringGUID. If the function fails, return False
; Author ........: DXRW4E
; Modified.......:
; Remarks .......:
; Link ..........:
; Example .......:
; Note ..........:  This function was inspired by ReactOS Project
;                   http://www.reactos.org/
;                  * Copyright 2002-2005 Mike McCormack for CodeWeavers
;                  * Copyright 2005 Aric Stewart for CodeWeavers
; ==================================================================================================================================================================
Func _Decode_Base85_GUIDEx($sDarwinDes)
    Local $dData = 0, $dBase = 1, $aGUID[5]
    If StringLen($sDarwinDes) < 20 Then Return SetError(1, 0, False)
    $sDarwinDes = StringToASCIIArray($sDarwinDes)
    For $i = 0 to 19 Step 5
        $dData = 0
        $dBase = 1
        For $y = $i To $i + 4
            $dData += $aTable_Dec85[$sDarwinDes[$y]] * $dBase
            If $sDarwinDes[$y] >= 0x80 Then Return SetError(2, 0, False)
            If $sDarwinDes[$y] = 0xff Then Return SetError(3, 0, False)
            $dBase *= 85
        Next
        $aGUID[$i/5] = $dData
        $aGUID[4] &= Hex($dData, 8)
    Next
    Return StringRegExpReplace($aGUID[4], "(.{8})(.{4})(.{4})(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})",  "{$1-$3-$2-$7$6-$5$4$11$10$9$8}")
EndFunc


; #FUNCTION# =======================================================================================================================================================
; Name...........: _Encode_Base85_GUID
; Description ...: Converts a StringGUID into a String (base85 encoded) Darwin Descriptor
; Syntax.........: _Encode_Base85_GUID($sGUID)
; Parameters ....: $sGUID        - String GUID
; Return values .: If the function succeeds, return String (base85 encoded) Darwin Descriptor. If the function fails, return False
; Author ........: DXRW4E
; Modified.......:
; Remarks .......:
; Link ..........:
; Example .......:
; Note ..........:  This function was inspired by ReactOS Project
;                   http://www.reactos.org/
;                  * Copyright 2002-2005 Mike McCormack for CodeWeavers
;                  * Copyright 2005 Aric Stewart for CodeWeavers
; ==================================================================================================================================================================
Func _Encode_Base85_GUID($sGUID)
    Local $sDD_GUID, $dData, $tGUID = DllStructCreate("struct; ulong Data1;ulong Data2;ulong Data3;ulong Data4;endstruct")
    Local $aResult = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", $sGUID, "struct*", $tGUID)
    If @Error Then Return SetError(@error, @extended, False)
    ;;Local $sDD_GUID, $dData, $tGUID = DllStructCreate("struct; ulong Data1;ushort Data2;ushort Data3;byte Data4[8]; endstruct")
    ;;Local $aResult = DllCall("ole32.dll", "long", "CLSIDFromString", "wstr", $sGUID, "struct*", $tGUID)
    ;;If @Error Then Return SetError(@error, @extended, False)
    ;;$tGUID = DllStructCreate("ulong Data1;ulong Data2;ulong Data3;ulong Data4", DllStructGetPtr($tGUID))
    For $i = 1 to 4
        $dData = DllStructGetData($tGUID, $i)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
    Next
    Return $sDD_GUID
EndFunc


; #FUNCTION# =======================================================================================================================================================
; Name...........: _Encode_Base85_GUIDEx
; Description ...: Converts a StringGUID into a String (base85 encoded) Darwin Descriptor
; Syntax.........: _Encode_Base85_GUIDEx($sGUID)
; Parameters ....: $sGUID        - String GUID
; Return values .: If the function succeeds, return String (base85 encoded) Darwin Descriptor. If the function fails, return False
; Author ........: DXRW4E
; Modified.......:
; Remarks .......:
; Link ..........:
; Example .......:
; Note ..........:  This function was inspired by ReactOS Project
;                   http://www.reactos.org/
;                  * Copyright 2002-2005 Mike McCormack for CodeWeavers
;                  * Copyright 2005 Aric Stewart for CodeWeavers
; ==================================================================================================================================================================
Func _Encode_Base85_GUIDEx($sGUID)
    Local $sDD_GUID, $dData, $aGUID = StringRegExp($sGUID, "\{?([0-9A-Fa-f]{8})-?([0-9A-Fa-f]{4})-?([0-9A-Fa-f]{4})-?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})-?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})", 1)
    If @Error Then Return SetError(@error, @extended, False)
    $aGUID[0] = Number("0x" & $aGUID[0], 3)
    $aGUID[1] = Number("0x" & $aGUID[2] & $aGUID[1], 3)
    $aGUID[2] = Number("0x" & $aGUID[6] & $aGUID[5] & $aGUID[4] & $aGUID[3], 3)
    $aGUID[3] = Number("0x" & $aGUID[10] & $aGUID[9] & $aGUID[8] & $aGUID[7], 3)
    For $i = 0 to 3
        $dData = $aGUID[$i]
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
        $dData = Int($dData / 85)
        $sDD_GUID &= $aTable_Enc85[Mod($dData, 85)]
    Next
    Return $sDD_GUID
EndFunc


#EndRegion ;Encoding-Decoding Base85
Ciao. Edited by DXRW4E

apps-odrive.pngdrive_app_badge.png box-logo.png new_logo.png MEGA_Logo.png

Share this post


Link to post
Share on other sites

@DXRW4E Is it possible to return only if the Default valuename contains ValueData?  I tried with setting the $sFilter to "" and using "*" but both return all Values in the path. I also tried "(Default)" which doesn't return anything. I know if I use RegRead([Path], "") get the default value.  But it doesn't seem to work as intended with this function.

 

To access the (Default) value use "" (an empty string) for the valuename.
 

Update:  I think I figured out what to edit.  Here is my modified function:

Func _RegEnumValEx($aKeyList, $iFlag = 0, $sFilter = "*", $iValueTypes = 0)
    If StringRegExp($sFilter, "\v") Then Return SetError(3, 0, "")
    If Not IsArray($aKeyList) Then $aKeyList = StringSplit($aKeyList, @LF)
    Local $aKeyValList[1954][4], $iKeyVal = Int(BitAND($iFlag, 32) = 0), $sKeyVal = 1953, $sRegEnumVal, $iRegEnumVal, $RegRead = BitAND($iFlag, 256), $vFilter = StringReplace($sFilter, "*", "")
    If Not BitAND($iFlag, 64) Then $sFilter = StringRegExpReplace(BitAND($iFlag, 16) & "(?i)(", "16\(\?\i\)|\d+", "") & StringRegExpReplace(StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($sFilter, "[^*?|]+", "\\Q$0\\E"), "\\E(?=\||$)", "$0\$"), "(?<=^|\|)\\Q", "^$0"), "\*+", ".*") & ")"
    For $i = 1 To $aKeyList[0]
        $iRegEnumVal = 0
        While 1
            If $sFilter = "(?i)()" And $iRegEnumVal > 0 Then ExitLoop
            If $iKeyVal = $sKeyVal Then
                If $sKeyVal = 3999744 Then ExitLoop
                $sKeyVal *= 2
                ReDim $aKeyValList[$sKeyVal + 1][4]
            EndIf
            $aKeyValList[$iKeyVal][0] = $aKeyList[$i]
            $iRegEnumVal += 1
            $sRegEnumVal = RegEnumVal($aKeyList[$i], $iRegEnumVal)
            If @Error <> 0 Then
                If $iRegEnumVal = 1 And $vFilter = "" Then $iKeyVal += 1
                ExitLoop
            EndIf
            If $sFilter = "(?i)()" And $sRegEnumVal <> "" Then ExitLoop
            If BitAND(@Extended, $iValueTypes) <> $iValueTypes Then ContinueLoop
            If $vFilter And Not StringRegExp($sRegEnumVal, $sFilter) Then ContinueLoop
            $aKeyValList[$iKeyVal][1] = $sRegEnumVal
            If $RegRead Then $aKeyValList[$iKeyVal][2] = RegRead($aKeyList[$i], $sRegEnumVal)
            $iKeyVal += 1
        WEnd
    Next
    $sRegEnumVal = $iKeyVal - Int(BitAND($iFlag, 32) = 0)
    If Not $sRegEnumVal Or ($sRegEnumVal = 1 And $vFilter = "" And $aKeyValList[$iKeyVal - $sRegEnumVal][2] = "") Then Return SetError(4, 0, "")
    ReDim $aKeyValList[$iKeyVal][4]
    If Not BitAND($iFlag, 32) Then $aKeyValList[0][0] = $iKeyVal - 1
    Return $aKeyValList
EndFunc

Just use "" as the $sFilter and it should now only return the (Default) Values. ;)

Edited by Proph

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Colduction
      Hi dear friends!, i'm sorry for creating a new thread (a new problem), i have over than 9 lists that i want to combine them to be this (in this example, there are 3 test files):


      I've written a little code for splitting main information, but i really confused how to make results as "Output.txt", here is that code:
       
      $sRegex_1 = StringRegExp(FileRead("1.txt"), '(?s:(?<=\=\=\r\n)(.*?)(?=\r\n\=\=))', 3) $sRegex_2 = StringRegExp(FileRead("2.txt"), '(?s:(?<=\=\=\r\n)(.*?)(?=\r\n\=\=))', 3) $sRegex_3 = StringRegExp(FileRead("3.txt"), '(?s:(?<=\=\=\r\n)(.*?)(?=\r\n\=\=))', 3) For $i = 0 To UBound($sRegex_1) - 1 ConsoleWrite($sRegex_1[$i] & @CRLF) For $j = 0 To UBound($sRegex_2) - 1 ConsoleWrite($sRegex_2[$j] & @CRLF) For $k = 0 To UBound($sRegex_3) - 1 ConsoleWrite($sRegex_3[$k] & @CRLF) Next Next Next  
    • By nacerbaaziz
      hello evrybody
      here is an example about how to split your texts using a delimiter with the ability to select how much of delimiters shows in each colum  with $i_number
      e.g
      you have a long text and you want to split it in an array
      that evry colum have a number (n) of lines
      i made a function that do that for you
      just call it with a three params
      $s_text
      your text
      $i_number
      the number that you want to put in each col
      $s_siparator
      the siparator
      default is "|"
      here is the function with example
      i hope that it will be useful for you
       
      ****
       
      #include <Array.au3> $s_txt = "some text1some text2|some text3|some text4|some text5|some text6" $array = splitText($s_txt, 2) _ArrayDisplay($array) Func splitText($s_text, $i_number, $s_siparator = "|") Local $a_TXT = StringSplit($s_text, $s_siparator) Local $a_Return[$a_TXT[0] + 1] If ($a_TXT[0] <= $i_number) Or ($i_number <= 0) Then ReDim $a_Return[2] $a_Return[0] = 1 $a_Return[1] = $s_text Return $a_Return EndIf Local $i_Processed = 1, $i_arrayProcessed = 1 Do For $i = $i_Processed To ($i_Processed + $i_number) - 1 If ($a_TXT[0] < $i) Then ExitLoop If Not ($a_Return[$i_arrayProcessed]) Then $a_Return[$i_arrayProcessed] = $a_TXT[$i] Else $a_Return[$i_arrayProcessed] &= $s_siparator & $a_TXT[$i] EndIf $i_Processed += 1 Next $i_arrayProcessed += 1 Until ($a_TXT[0] < $i_Processed) ReDim $a_Return[$i_arrayProcessed] $a_Return[0] = $i_arrayProcessed - 1 Return $a_Return EndFunc ;==>splitText
      accept my greetings
      thanks to
      @Dan_555
      for his notes
       
    • By MesterPerfect
      good morning
      this is the first post here in the autoit forums
      i hope that you can help me in my problem
      i have a JSON encoded
      it a map of my forums
      where i want to make a treeview that have the same type of map
      e.g
      a system (as category)
      windows (as sub category)
      software (as an child item in the windows category)
      .....
      i don't know how to do that
      so, i know that i can do that using the json functions
      but i need your help about how we can do it as the type that i told you
      by the way i need to put the sub info for each item in an array that give me the ability to manage my items
      e.g
      can post thread
      can reply
      message cound ...
      you just give me a small example and i can continue.
      am sorry if this against the rules of the forum.
      but i realy searched a lot but i couldn't
      i hope some one give me the way.
      thank you very much in advance
       
      here is the link of json forum
      https://www.autoitscript.com/forum/topic/148114-a-non-strict-json-udf-jsmn/
      and here is my encoded json file
       
      { "tree_map": { "0": [ 1, 5, 6, 7 ], "1": [ 2 ], "2": [ 4 ], "5": [ 3 ], "6": [ 8 ], "8": [ 9, 10 ] }, "nodes": [ { "breadcrumbs": [], "description": "", "display_in_list": true, "display_order": 1, "node_id": 1, "node_name": null, "node_type_id": "Category", "parent_node_id": 0, "title": "Main category", "type_data": {} }, { "breadcrumbs": [ { "node_id": 1, "title": "Main category", "node_type_id": "Category" } ], "description": "", "display_in_list": true, "display_order": 1, "node_id": 2, "node_name": null, "node_type_id": "Forum", "parent_node_id": 1, "title": "Main forum", "type_data": { "allow_poll": true, "allow_posting": true, "can_create_thread": true, "can_upload_attachment": true, "discussion_count": 0, "last_post_date": 0, "last_post_id": 0, "last_post_username": "", "last_thread_id": 0, "last_thread_prefix_id": 0, "last_thread_title": "", "message_count": 0, "min_tags": 0, "require_prefix": false } }, { "breadcrumbs": [ { "node_id": 1, "title": "Main category", "node_type_id": "Category" }, { "node_id": 2, "title": "Main forum", "node_type_id": "Forum" } ], "description": "", "display_in_list": true, "display_order": 1, "node_id": 4, "node_name": null, "node_type_id": "Forum", "parent_node_id": 2, "title": "my forums1", "type_data": { "allow_poll": true, "allow_posting": true, "can_create_thread": true, "can_upload_attachment": true, "discussion_count": 0, "last_post_date": 0, "last_post_id": 0, "last_post_username": "", "last_thread_id": 0, "last_thread_prefix_id": 0, "last_thread_title": "", "message_count": 0, "min_tags": 0, "require_prefix": false } }, { "breadcrumbs": [], "description": "", "display_in_list": true, "display_order": 2, "node_id": 5, "node_name": null, "node_type_id": "Category", "parent_node_id": 0, "title": "Perfect", "type_data": {} }, { "breadcrumbs": [ { "node_id": 5, "title": "Perfect", "node_type_id": "Category" } ], "description": "", "display_in_list": true, "display_order": 2, "node_id": 3, "node_name": null, "node_type_id": "Forum", "parent_node_id": 5, "title": "ahmed", "type_data": { "allow_poll": true, "allow_posting": true, "can_create_thread": true, "can_upload_attachment": true, "discussion_count": 0, "last_post_date": 0, "last_post_id": 0, "last_post_username": "", "last_thread_id": 0, "last_thread_prefix_id": 0, "last_thread_title": "", "message_count": 0, "min_tags": 0, "require_prefix": false } }, { "breadcrumbs": [], "description": "", "display_in_list": true, "display_order": 3, "node_id": 6, "node_name": null, "node_type_id": "Forum", "parent_node_id": 0, "title": "autoit", "type_data": { "allow_poll": true, "allow_posting": true, "can_create_thread": true, "can_upload_attachment": true, "discussion_count": 0, "last_post_date": 0, "last_post_id": 0, "last_post_username": "", "last_thread_id": 0, "last_thread_prefix_id": 0, "last_thread_title": "", "message_count": 0, "min_tags": 0, "require_prefix": false } }, { "breadcrumbs": [ { "node_id": 6, "title": "autoit", "node_type_id": "Forum" } ], "description": "", "display_in_list": true, "display_order": 3, "node_id": 8, "node_name": null, "node_type_id": "Forum", "parent_node_id": 6, "title": "examples", "type_data": { "allow_poll": true, "allow_posting": true, "can_create_thread": true, "can_upload_attachment": true, "discussion_count": 0, "last_post_date": 0, "last_post_id": 0, "last_post_username": "", "last_thread_id": 0, "last_thread_prefix_id": 0, "last_thread_title": "", "message_count": 0, "min_tags": 0, "require_prefix": false } }, { "breadcrumbs": [ { "node_id": 6, "title": "autoit", "node_type_id": "Forum" }, { "node_id": 8, "title": "examples", "node_type_id": "Forum" } ], "description": "", "display_in_list": true, "display_order": 3, "node_id": 9, "node_name": null, "node_type_id": "Forum", "parent_node_id": 8, "title": "GUI", "type_data": { "allow_poll": true, "allow_posting": true, "can_create_thread": true, "can_upload_attachment": true, "discussion_count": 0, "last_post_date": 0, "last_post_id": 0, "last_post_username": "", "last_thread_id": 0, "last_thread_prefix_id": 0, "last_thread_title": "", "message_count": 0, "min_tags": 0, "require_prefix": false } }, { "breadcrumbs": [ { "node_id": 6, "title": "autoit", "node_type_id": "Forum" }, { "node_id": 8, "title": "examples", "node_type_id": "Forum" } ], "description": "", "display_in_list": true, "display_order": 31, "node_id": 10, "node_name": null, "node_type_id": "Forum", "parent_node_id": 8, "title": "windowEX", "type_data": { "allow_poll": true, "allow_posting": true, "can_create_thread": true, "can_upload_attachment": true, "discussion_count": 0, "last_post_date": 0, "last_post_id": 0, "last_post_username": "", "last_thread_id": 0, "last_thread_prefix_id": 0, "last_thread_title": "", "message_count": 0, "min_tags": 0, "require_prefix": false } }, { "breadcrumbs": [], "description": "", "display_in_list": true, "display_order": 4, "node_id": 7, "node_name": null, "node_type_id": "Category", "parent_node_id": 0, "title": "vbs", "type_data": {} } ] }  
    • By pat4005
      A tiny UDF that can shoot magic packets at your computers to wake them the heck up. All credits to Olish.
      The only parameter it needs to be specified – is your machine's MAC-address (ip address (the second parameter), at which you will be sending magic packet is generating automatically from @IPAddress1 macro)
      Example:
      _WoL_WakeDevice('001CC0CAED7A') ; the second parameter (if necessery) must be a broadcast address of your local network segment (i.e. 192.168.0.255 for a network 192.168.0.0)  
      _WakeOnLan.au3
    • By nooneclose
      I need to dynamically resize my 2d array while looping. 
      I know this code:
      ReDim $rArray[UBound($rArray) + 1] works for the rows, however, I also need to increase the columns. How would i go about increasing both rows and columns while looping? 
×
×
  • Create New...