Immer einen bestimmten Registrykey als TreeView anzeigen???

  • Ich versuche immer nur eine bestimmte Abfrage eines Registrykeys in einem TreeView darzustellen,
    aber ich scheitere immer am Parant-Handle, wodurch mein TreeView nicht so dargestellt wird wie er es eigentlich sollte.

    Kann mir bitte irgendwer helfen ??? --- ich verzweifel sonst noch..............

    Einmal editiert, zuletzt von fire4orce@it (20. Juni 2010 um 15:35)

  • Hallo Oscar,

    Die Auswahl des Registryschlüssels der als TreeView dargestellt werden soll, soll entweder über ein
    Input_Controll oder Combo_Controll eingegeben werden.

    Die Darstellung des TreeView soll die komplette tiefe des ausgewählten RegKey haben.
    In meinen Versuchen scheitere ich immer wieder am ParantHandle des TreeViews.

    Die Rekursive Programmierung wie bei einem Directory_TreeView bekomme ich nicht auf meinem TreeView übertragen ----- da habe ich
    glaube ich ein totalen logischen Denkausfall und beß mir daran die Zähne aus.

    GUI_Registry_Tree.au3

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <TreeviewConstants.au3>
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)
    Opt("GUIDataSeparatorChar", "\")

    [/autoit] [autoit][/autoit] [autoit]

    Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func Main()
    Local $window, $label, $title, $guimessage, $msg
    Local $btn_exit ,$btn1, $btn2, $btn3
    Local $icon_file = @ScriptDir & "\OwnPicture.dll"

    [/autoit] [autoit][/autoit] [autoit]

    Global $treeview, $SkyBlue = 0x87CEEB

    [/autoit] [autoit][/autoit] [autoit]

    Global $hive, $reg_hive, $reg_search_file, $reg_key, $reg_item, $reg_path, $parant

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aArray[3] = ["Directory", "Drive", "Folder"]
    Dim $bArray[5] = ["HKCR", "HKCU", "HKLM\", "HKU\" , "HKCC\"]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $title = "" ; Hier einen Fenstertitel einfügen.
    $guimessage = " TreeView - Test" ; Hier einen Labeltext einfügen.
    $window = GUICreate($title,650, 550, -1, -1, 0x00030000)
    GUISetIcon($icon_file, 18, $window)
    $label = GUICtrlCreateLabel($guimessage, 10, 10, 280, 14)
    GUICtrlSetBkColor(-1, $SkyBlue)

    [/autoit] [autoit][/autoit] [autoit]

    $btn1 = GUICtrlCreateButton("TreeView", 580, 415, 60, 20)
    $btn2 = GUICtrlCreateButton("", 580, 440, 60, 20)
    $btn3 = GUICtrlCreateButton("", 580, 465, 60, 20)
    $btn_exit = GUICtrlCreateButton("Schließen", 580, 490, 60, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $hive = GUICtrlCreateCombo($bArray[0], 10, 40, 65, 0x0003)
    $reg_search_file = GUICtrlCreateCombo($aArray[0], 80, 40, 130, 0x0003)

    [/autoit] [autoit][/autoit] [autoit]

    $treeview = GUICtrlCreateTreeView(10, 75, 380, 420)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 2
    GUICtrlSetData($reg_search_file, $aArray[$i])
    Next
    For $i = 0 To 4
    GUICtrlSetData($hive, $bArray[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    Case $msg = $btn_exit
    Exit
    Case $msg = $btn1
    $reg_hive = _GUICtrlTreeView_DeleteAll($treeview)
    _BuildTree()

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $btn2

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $btn3

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _BuildTree()
    $reg_hive = _GUICtrlTreeView_Add($treeview, 0, GUICtrlRead($hive))
    $parant = _GUICtrlTreeView_AddChild($treeview, $reg_hive, GUICtrlRead($reg_search_file))

    [/autoit] [autoit][/autoit] [autoit]

    $reg_path = GUICtrlRead($hive) & "\" & GUICtrlRead($reg_search_file)
    _GetRegData($reg_path, $parant)
    _GUICtrlTreeView_Expand($treeview)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetRegData($reg_path, $parant)
    Local $ret, $i = 0
    While True
    $i += 1
    $reg_key = RegEnumKey($reg_path, $i)
    ;~ MsgBox(0, "", $reg_key) ; dient nur zur Kontrolle.
    If @error Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    $parant = _GUICtrlTreeView_AddChild($treeview, $parant, $reg_key)

    [/autoit] [autoit][/autoit] [autoit]

    $ret = _GetRegData($reg_path & '\' & $reg_key, $parant)

    [/autoit] [autoit][/autoit] [autoit]

    If $ret <> '' Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    Return $ret
    EndFunc

    [/autoit]

    Das Scripte sieht leider etwas durcheinander aus --- habe es auf die Schnelle grafisch etwas angepasst.

    Gruß fire4orce@it
    und schonmal ein dickes DANKE ;)

    • Offizieller Beitrag

    Ich hab's mal angepasst:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <TreeviewConstants.au3>
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)
    Opt("GUIDataSeparatorChar", "\")
    Global $treeview, $SkyBlue = 0x87CEEB
    Global $hive, $reg_hive, $reg_search_file, $reg_key, $reg_item, $reg_path, $parant, $root

    [/autoit] [autoit][/autoit] [autoit]

    Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func Main()
    Local $window, $label, $title, $guimessage, $msg
    Local $btn_exit ,$btn1, $btn2, $btn3
    Local $icon_file = @ScriptDir & "\OwnPicture.dll"

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aArray[3] = ["Directory", "Drive", "Folder"]
    Dim $bArray[5] = ["HKCR", "HKCU", "HKLM\", "HKU\" , "HKCC\"]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $title = "" ; Hier einen Fenstertitel einfügen.
    $guimessage = " TreeView - Test" ; Hier einen Labeltext einfügen.
    $window = GUICreate($title,650, 550, -1, -1, 0x00030000)
    GUISetIcon($icon_file, 18, $window)
    $label = GUICtrlCreateLabel($guimessage, 10, 10, 280, 14)
    GUICtrlSetBkColor(-1, $SkyBlue)

    [/autoit] [autoit][/autoit] [autoit]

    $btn1 = GUICtrlCreateButton("TreeView", 580, 415, 60, 20)
    $btn2 = GUICtrlCreateButton("", 580, 440, 60, 20)
    $btn3 = GUICtrlCreateButton("", 580, 465, 60, 20)
    $btn_exit = GUICtrlCreateButton("Schließen", 580, 490, 60, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $hive = GUICtrlCreateCombo($bArray[0], 10, 40, 65, 0x0003)
    $reg_search_file = GUICtrlCreateCombo($aArray[0], 80, 40, 130, 0x0003)

    [/autoit] [autoit][/autoit] [autoit]

    $treeview = GUICtrlCreateTreeView(10, 75, 380, 420)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 2
    GUICtrlSetData($reg_search_file, $aArray[$i])
    Next
    For $i = 0 To 4
    GUICtrlSetData($hive, $bArray[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    Case $msg = $btn_exit
    Exit
    Case $msg = $btn1
    $reg_hive = _GUICtrlTreeView_DeleteAll($treeview)
    _BuildTree()

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $btn2

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $btn3

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _BuildTree()
    $root = GUICtrlCreateTreeViewItem(GUICtrlRead($hive), $treeview)
    $parant = GUICtrlCreateTreeViewItem(GUICtrlRead($reg_search_file), $root)
    $reg_path = GUICtrlRead($hive)& "\" & GUICtrlRead($reg_search_file)
    _GetRegData($reg_path, $parant)
    _GUICtrlTreeView_Expand($treeview)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetRegData($reg_path, $parant)
    Local $new, $iInstance = 0
    Do
    $iInstance += 1
    $reg_key = RegEnumKey($reg_path, $iInstance)
    If Not @error Then
    $new = GUICtrlCreateTreeViewItem($reg_key, $parant)
    _GetRegData($reg_path & "\" & $reg_key, $new)
    EndIf
    Until @error
    EndFunc

    [/autoit]
  • vielen Dank.

    wenn ich mir das so anschaue, kommt mir der Gedanke das ich mich total verirrt hatte
    indem ich es die ganze Zeit immer mit "_GUICtrlTreeView_AddChild " versucht habe.

    Deine Script bzw. Deine Änderungen sind erstmal kürzer und weniger umständlich.

    ich danke Dir für Deine Hilfe

  • Jetzt wo ich weiß wo mein Fehler lag, kommt es mir voll einfach vor.
    Hab einfach vor lauter Bäumen den Wald nicht gesehen.

    Hab mein altes Script leicht verändert und jetzt funktioniert es auch mit
    "_GUICtrlTreeView_AddChild" :P


    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <TreeviewConstants.au3>
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)
    Opt("GUIDataSeparatorChar", "\")
    Global $treeview, $SkyBlue = 0x87CEEB
    Global $hive, $reg_hive, $reg_search_file, $reg_key, $reg_item, $reg_path, $parant

    [/autoit] [autoit][/autoit] [autoit]

    Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func Main()
    Local $window, $label, $title, $guimessage, $msg
    Local $btn_exit ,$btn1, $btn2, $btn3
    Local $icon_file = @ScriptDir & "\OwnPicture.dll"

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aArray[3] = ["Directory", "Drive", "Folder"]
    Dim $bArray[5] = ["HKCR", "HKCU", "HKLM\", "HKU\" , "HKCC\"]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $title = "Geändert" ; Hier einen Fenstertitel einfügen.
    $guimessage = " TreeView - Test" ; Hier einen Labeltext einfügen.
    $window = GUICreate($title,650, 550, -1, -1, 0x00030000)
    GUISetIcon($icon_file, 18, $window)
    $label = GUICtrlCreateLabel($guimessage, 10, 10, 280, 14)
    GUICtrlSetBkColor(-1, $SkyBlue)

    [/autoit] [autoit][/autoit] [autoit]

    $btn1 = GUICtrlCreateButton("TreeView", 580, 415, 60, 20)
    $btn2 = GUICtrlCreateButton("", 580, 440, 60, 20)
    $btn3 = GUICtrlCreateButton("", 580, 465, 60, 20)
    $btn_exit = GUICtrlCreateButton("Schließen", 580, 490, 60, 20)

    [/autoit] [autoit][/autoit] [autoit]

    $hive = GUICtrlCreateCombo($bArray[0], 10, 40, 65, 0x0003)
    $reg_search_file = GUICtrlCreateCombo($aArray[0], 80, 40, 130, 0x0003)

    [/autoit] [autoit][/autoit] [autoit]

    $treeview = GUICtrlCreateTreeView(10, 75, 380, 420)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To 2
    GUICtrlSetData($reg_search_file, $aArray[$i])
    Next
    For $i = 0 To 4
    GUICtrlSetData($hive, $bArray[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    Case $msg = $btn_exit
    Exit
    Case $msg = $btn1
    $reg_hive = _GUICtrlTreeView_DeleteAll($treeview)
    _BuildTree()

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $btn2

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $btn3

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _BuildTree()
    $reg_hive = _GUICtrlTreeView_Add($treeview, 0, GUICtrlRead($hive))
    $parant = _GUICtrlTreeView_AddChild($treeview, $reg_hive, GUICtrlRead($reg_search_file))
    $reg_path = GUICtrlRead($hive) & "\" & GUICtrlRead($reg_search_file)
    _GetRegData($reg_path, $parant)
    _GUICtrlTreeView_Expand($treeview)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetRegData($reg_path, $parant)
    Local $ret, $i = 0, $new
    While True
    $i += 1
    $reg_key = RegEnumKey($reg_path, $i)
    If @error Then ExitLoop
    $new = _GUICtrlTreeView_AddChild($treeview, $parant, $reg_key) ; $parant durch $new erstezt.
    $ret = _GetRegData($reg_path & '\' & $reg_key, $new)
    If $ret <> '' Then ExitLoop
    WEnd
    Return $ret
    EndFunc

    [/autoit]


    Zitat

    "Wer den Wald nicht sieht, sollte vielleicht mal nach Bäumen ausschau halten."

    mit freundlichen Gruß an Oscar :P