Listview Registry

  • Also.. hab zurzeit folgendes Problem: Ich versuche zurzeit Registry Einträge per Listview anzuzeigen und zu verwalten. Ich will die Einträge dabei löschen und editieren können. Ich komme leider nicht weiter. Ich hab mir in der Hilfe zu Listview und den dazugehörigen Befehlen fast alles angeschaut, trotzdem bleiben noch einige Fragen offen.

    Script:

    [autoit]

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

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

    $val1 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 1)
    $val2 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 2)

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

    $dat1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $val1)
    $dat2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $val2)

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

    Example()

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

    Func Example()
    Local $listview, $button, $item1, $item2, $item3, $input1, $msg
    Global $fmsg

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

    GUICreate("listview items", 581, 376, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF) ; will change background color

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

    $listview = GUICtrlCreateListView("Name |Pfad ", 10, 10, 560, 150);,$LVS_SORTDESCENDING)
    $button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
    $del_btn = GUICtrlCreateButton("Delete", 200, 170, 70, 20)
    $item1 = GUICtrlCreateListViewItem( $val1 & "|" & $dat1, $listview)
    $item2 = GUICtrlCreateListViewItem( $val2 & "|" & $dat2, $listview)
    $wert = GUICtrlRead($listview)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $button
    MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
    Case $msg = $del_btn
    ; funkioniert nicht:
    ; RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $wert)
    Case $msg = $listview
    MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
    Case $msg = $wert
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]

    Ich bekomme es nicht hin den makierten registry Eintrag zu löschen. Hab da schon manches versucht, aber ohne Erfolg. Während es in der Registry den Eintrag löscht, soll es auch den Zeile in der Listview löschen (dazu viel mir auch noch nichts ein.)
    Noch ein Problem wäre: Ich weiss nicht wie ich nur 2 Zellen machen kann (Name, Pfad). Pfad ist einfach zu kurz und man sieht ihn nicht vollständig außer wenn man ihn länger zieht.

    Hoffe, dass mir jemand weiter helfen kann^^

    P.S: Der Script basiert auf der Vorlage aus der Hilfe

    Einmal editiert, zuletzt von Sora White Dragon (23. August 2010 um 17:39)

  • Während es in der Registry den Eintrag löscht, soll es auch den Zeile in der Listview löschen (dazu viel mir auch noch nichts ein.)


    oder auch

    [autoit]

    _GUICtrlListView_DeleteItemsSelected

    [/autoit]

    Noch ein Problem wäre: Ich weiss nicht wie ich nur 2 Zellen machen kann (Name, Pfad). Pfad ist einfach zu kurz und man sieht ihn nicht vollständig außer wenn man ihn länger zieht.

    [autoit]

    _GUICtrlListView_SetColumnWidth

    [/autoit]

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (7. Juli 2010 um 21:51)

  • autoBert
    Uiii, danke^^ Habs jetzt mit der Zelle und im Listview löschen dank deiner Hilfe hinbekommen ;)

    Naja, 1 Frage bleibt aber noch offen... Wie kann ich den Registry Wert über die Listview löschen? Hauptsächlich löscht man ja in der Registry mit "Regdelete". Ob es in diesem Fall genauso ist, weiss ich leider nicht. Also bei mir hats nicht gefunzt.

  • Hallo Sora White Dragon,

    mir ist keine andere Methode als

    [autoit]

    regdelete

    [/autoit]

    bekannt. Vielleicht hattest du ja einen Tippfehler?

    mfg (Auto)Bert

    Also mir ist auch keine andere Methode bekannt. Tippfehler sind da bei mir eher unwahrscheinlich. Irgendwie muss es ja trotzdem gehen, aber mir fällt einfach kein Weg ein wie ich es hinbekommen soll, dass es genau das Makierte in der Listview, auch in der Registry löscht.
    Schau mal in meinen Source auf Zeile 25 und 37. Da hab ich ja so einiges schon versucht, aber der Befehl hat so wie er dort steht nicht gefunzt. Errors gabs dabei aber keine, was ich natürlich etwas seltsam fand xD

  • Also... es ist jetzt zwar etwas länger her, aber ich hab mich weiterhin oft mit diesem Problem beschäftigt und hab dann eine Lösung zum Löschen der Eintträge gefunden. Das Einzige Problem ist jetzt aber, dass es ALLE Registry Einträge löscht, anstatt nur 1, den ich auswähle..

    Der Registry Pfad für Testzwecke: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test
    Sollte es jemand für mich testen können, dann muss der Schlüssel "Test" im Run Ordner angelegt werden und dann auf "Neu -> Zeichenfolge" (ca 2-3 Zeichenfolgen erstellen)


    Weiss vielleicht jemand wo da der Fehler liegt? Immerhin löscht es alle
    Registry Einträge in dem Run Ordner anstatt nur den Ausgewählten in der
    listview.

    Hier mein Source:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiListView.au3>

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

    ;Diese Einträge werden benötigt um in der Registry zu löschen
    $val1 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 1)
    $val2 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 2)
    $val3 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 3)
    $val4 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 4)
    $val5 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 5)
    $val6 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 6)
    $val7 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 7)
    $val8 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 8)
    $val9 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 9)
    $val10 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", 10)

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

    ;diese nicht
    $dat1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val1)
    $dat2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val2)
    $dat3 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val3)
    $dat4 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val4)
    $dat5 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val5)
    $dat6 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val6)
    $dat7 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val7)
    $dat8 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val8)
    $dat9 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val9)
    $dat10 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val10)

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

    Local $listview, $button, $item1, $item2, $item3, $msg

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

    GUICreate("Autostart", 750, 430, -1, $WS_EX_ACCEPTFILES)
    ; GUISetBkColor(0x00E0FFFF) ; will change background color

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

    $listview = GUICtrlCreateListView("Name|Pfad", 180, 15, 560, 360);,$LVS_SORTDESCENDING)
    $del_btn = GUICtrlCreateButton("Delete", 350, 385, 80, 25)
    $item1 = GUICtrlCreateListViewItem( $val1 & "|" & $dat1, $listview)
    $item2 = GUICtrlCreateListViewItem( $val2 & "|" & $dat2, $listview)
    $item3 = GUICtrlCreateListViewItem( $val3 & "|" & $dat3, $listview)
    $item4 = GUICtrlCreateListViewItem( $val4 & "|" & $dat4, $listview)
    $item5 = GUICtrlCreateListViewItem( $val5 & "|" & $dat5, $listview)
    $item6 = GUICtrlCreateListViewItem( $val6 & "|" & $dat6, $listview)
    $item7 = GUICtrlCreateListViewItem( $val7 & "|" & $dat7, $listview)
    $item8 = GUICtrlCreateListViewItem( $val8 & "|" & $dat8, $listview)
    $item9 = GUICtrlCreateListViewItem( $val9 & "|" & $dat9, $listview)
    $item10 = GUICtrlCreateListViewItem( $val10 & "|" & $dat10, $listview)

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

    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState()
    _GUICtrlListView_SetColumnWidth($listview, 0, 150)
    _GUICtrlListView_SetColumnWidth($listview, 1, 406)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $button
    MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
    Case $del_btn
    _check()
    EndSwitch
    WEnd

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

    Func _check()
    $check = _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($listview))
    If $item1 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val1)
    Endif
    If $item2 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val2)
    Endif
    If $item3 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val3)
    Endif
    If $item4 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val4)
    Endif
    If $item5 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val5)
    EndIf
    If $item6 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val6)
    Endif
    If $item7 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val7)
    Endif
    If $item8 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val8)
    Endif
    If $item9 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val9)
    Endif
    If $item10 = $check Then
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Test", $val10)
    Endif
    EndFunc

    [/autoit]
  • Probieres es mal damit:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiListView.au3>
    #include <Array.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $listview, $button1, $button2, $item1, $item2, $item3, $input1, $msg
    Local $aSel, $dat1, $dat2, $dat3, $val1, $val2, $val3, $aWert

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

    GUICreate("listview items", 640, 250, 100, 200, -1)
    GUISetBkColor(0x00E0FFFF) ; will change background color

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

    $listview = GUICtrlCreateListView("Name |Pfad", 10, 10, 600, 150, -1, $LVS_REPORT + $LVS_EX_FULLROWSELECT);,$LVS_SORTDESCENDING)
    $button1 = GUICtrlCreateButton("Value?", 40, 170, 70, 20)
    $button2 = GUICtrlCreateButton("Delete", 110, 170, 70, 20)

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

    $val1 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 1)
    $dat1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $val1)
    $val2 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 2)
    $dat2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $val2)
    $val3 = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 3)
    $dat3 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $val3)

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

    $item1 = GUICtrlCreateListViewItem($val1 & "|" & $dat1, $listview)
    $item2 = GUICtrlCreateListViewItem($val2 & "|" & $dat2, $listview)
    $item3 = GUICtrlCreateListViewItem($val3 & "|" & $dat3, $listview)
    GUISetState()
    _GUICtrlListView_SetColumnWidth($listview, 0, 175)
    _GUICtrlListView_SetColumnWidth($listview, 1, 350)

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $button1
    MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
    Case $msg = $listview
    MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
    Case $msg = $button2
    $aSel = _GUICtrlListView_GetSelectedIndices($listview, 1)
    If $aSel[0] > 0 Then
    $aWert = StringSplit(GUICtrlRead(GUICtrlRead($listview), 2), "|", 2)
    If Not @error Then
    ;~ _ArrayDisplay($aWert)
    ;RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", $aWert[0])
    _GUICtrlListView_DeleteItem($listview, $aSel[1])
    EndIf
    EndIf
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]

    Habe es mit RegDelete nicht Live getestet, sollte aber so gehen!

    Schaue mal in CSV-Editor rein. Dort sind viele Techniken zu deinem Problem bereits implementiert!
    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (22. August 2010 um 14:12)

  • UEZ
    es funzt jetzt, danke^^

    Ich denke mal, dass es daran lag, dass bei mir stringsplit gefehlt hat
    Naja, Problem ist wohl gelöst und Thema ~closed~