Delete Funktion wie ?

  • Hallo alle zusammen :D ich komm bei einem Programm das ich gerade schreibe nicht weiter hab erst vor 3
    Tagen angefangen mit autoit hab

    vorher c++ Programmiert und, ich möchte eine Dellet Funktion einbauen die
    wieder die Lücke in der reg schließt weil es sonst zu Fehlern beim einlesen der
    Namen kommt .


    [autoit]


    #include <GUIConstants.au3>
    #include <GUIComboBox.au3>
    #include <String.au3>
    #RequireAdmin
    Global $regok = 10
    Global $listana = 0
    Global $i = 0
    #Region ### START Koda GUI section ### Form=I:\Users\Xedon\Desktop\manage sys.kxf
    $Form2_1 = GUICreate("Form1", 676, 121, 193, 124)
    $Pic1 = GUICtrlCreatePic("I:\Users\Xedon\Pictures\cod5-7.jpg", 0, 0, 676, 436, 0)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Beenden = GUICtrlCreateButton("Beenden", 328, 40, 155, 25, 0)
    $Label1 = GUICtrlCreateLabel("", 8, 8, 660, 17)
    $Starten = GUICtrlCreateButton("Starten", 8, 40, 99, 25, 0)
    $add = GUICtrlCreateButton("Programm Hinzufügen ", 136, 40, 155, 25, 0)
    $liste = GUICtrlCreateCombo("", 264, 80, 145, 25)
    $delet = GUICtrlCreateButton("Auswahl Löschen", 520, 40, 139, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $regok = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", "registrierung")

    If $regok = "" Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter", "registrierung", "REG_SZ","0")
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter", "Listenanzahl", "REG_SZ","-1")
    EndIf
    ;-------Namenszuweisung-----------
    $listana = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", "Listenanzahl")
    While 0 < $listana
    $name = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\startern", $i)
    $i = $i+1
    $listana = $listana - 1
    _GUICtrlComboBox_AddString($liste, $name)
    WEnd

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    $listan = _GUICtrlComboBox_GetCount($liste)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter", "Listenanzahl", "REG_SZ",$listan)
    Exit
    Case $Beenden
    $listan = _GUICtrlComboBox_GetCount($liste)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter", "Listenanzahl", "REG_SZ",$listan)
    Exit
    ;------------Ausführen----------------
    Case $Starten
    $select = _GUICtrlComboBox_GetCurSel($liste)
    $start = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $select)
    Run($start)
    ;---------------Hinzufügen---------------
    Case $add
    $pufer = FileOpenDialog("Choose file...", @TempDir, "Excute Files (*.exe)")
    if @error = 1 Then
    Exit
    EndIf
    $name = InputBox( "Namenseingabe", "Geben sie den namen des Spiels an")
    if @error = 1 Then
    Exit
    EndIf
    $listana = _GUICtrlComboBox_GetCount($liste)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $listana, "REG_SZ",$pufer)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\startern",$listana, "REG_SZ",$name)
    _GUICtrlComboBox_BeginUpdate($liste)
    _GUICtrlComboBox_AddString($liste, $name)
    _GUICtrlComboBox_EndUpdate($liste)

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

    ;------Dellet Funktion bis Jetzt------
    Case $delet
    $listand = _GUICtrlComboBox_GetCount($liste)
    $selectd = _GUICtrlComboBox_GetCurSel($liste)
    RegDelete ("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $selectd )
    RegDelete ("HKEY_LOCAL_MACHINE\SOFTWARE\starternkeyname", $selectd )
    _GUICtrlComboBox_BeginUpdate($liste)
    _GUICtrlComboBox_DeleteString($liste, $selectd)
    _GUICtrlComboBox_EndUpdate($liste)
    ;------------------------------------------------------------
    Case $liste
    $label = _GUICtrlComboBox_GetCurSel($liste)
    $labeln = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $label)
    GUICtrlSetData($Label1, $labeln)

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

    EndSwitch
    WEnd

    [/autoit]
  • Tja wenn ich einträge lösche kommt die While schleife durcheinender und gibt den programmen andere andere start pfade.
    Probier einfach mal 3 einträge zum machen und dan löscht du den ersten eintrag dann ist schon alle verkehrt ^^ ich möchte das sich diese lücke schliest also das wen der wert 0 z.b. gelöscht wirt die 1 automatisch zur 0 wird und die anderen einträge nachrücken

  • Ohne WIndows leider etwas schwierig aber ich glaube ich verstehe das Problem.
    Ich denke du könntest das gesammte Skript etwas einfacher gestalten wenn du die Struktur deiner Schlüssel veränderst und dich von dem fortlaufenden Index trennst.

    -starter
    --Zeichenfolge: Name des 1ten Programms -> Wert: Pfad zum Programm
    --Zeichenfolge: Name des 2ten Programms -> Wert: Prad zum Porgramm
    usw.

    Die Werte für Anzahl und Registrierung speicherst du in einem anderen Schlüssel, vlt. in einem Unterschlüssel settings.
    Die Einträge für die Combobox könntest du dann in einer FOR Schleife mit RegEnumVal() ermitteln. Anzahl der Durchläufe = Anzahl der Einträge
    Welche Einträge aus der Registry gelöscht werden sollen, ermittelst du mit _GUICtrlComboBoxEx_GetItem().Im 1ten Arrayelement steht dann der Itemtext = Name der zu löschenden Zeichenfolge.

  • Danke für die antworten
    Ineluki
    deine lösung ist mir etwas zu umständlich ^^
    @ideas2code
    ich denke das erste krieg ich mit viel denken noch hin aber das 2. da steig ich leider nicht mehr durch :D

  • ungetestet

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIComboBox.au3>
    #include <String.au3>
    #Include <GuiComboBoxEx.au3>

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

    #RequireAdmin
    Global $regok = 10
    Global $anzahl = 0
    Global $i = 0
    #Region ### START Koda GUI section ### Form=I:\Users\Xedon\Desktop\manage sys.kxf
    $Form2_1 = GUICreate("Form1", 676, 121, 193, 124)
    $Pic1 = GUICtrlCreatePic("I:\Users\Xedon\Pictures\cod5-7.jpg", 0, 0, 676, 436, 0)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Beenden = GUICtrlCreateButton("Beenden", 328, 40, 155, 25, 0)
    $Label1 = GUICtrlCreateLabel("", 8, 8, 660, 17)
    $Starten = GUICtrlCreateButton("Starten", 8, 40, 99, 25, 0)
    $add = GUICtrlCreateButton("Programm Hinzufügen ", 136, 40, 155, 25, 0)
    $liste = GUICtrlCreateCombo("", 264, 80, 145, 25)
    $delet = GUICtrlCreateButton("Auswahl Löschen", 520, 40, 139, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $regok = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "registrierung")

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

    If $regok = "" Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "registrierung", "REG_SZ", "0")
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl", "REG_SZ", "-1")
    EndIf
    ;-------Namenszuweisung-----------
    $anzahl = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl")
    If $anzahl > 0 Then
    For $i = 1 To $anzahl
    $name = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $i)
    _GUICtrlComboBox_AddString($liste, $name)
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Beenden
    Exit
    ;------------Ausführen----------------
    Case $Starten
    $index = _GUICtrlComboBox_GetCurSel($liste)
    $select = _GUICtrlComboBoxEx_GetItem($liste, $index)
    $start = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $select[0])
    Run($start)
    ;---------------Hinzufügen---------------
    Case $add
    $pufer = FileOpenDialog("Choose file...", @TempDir, "Excute Files (*.exe)")
    If @error = 1 Then
    Exit
    EndIf
    $name = InputBox("Namenseingabe", "Geben sie den namen des Spiels an")
    If @error = 1 Then
    Exit
    EndIf
    $anzahl += 1
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $name, "REG_SZ", $pufer)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl", "REG_SZ", $anzahl)
    _GUICtrlComboBox_BeginUpdate($liste)
    _GUICtrlComboBox_AddString($liste, $name)
    _GUICtrlComboBox_EndUpdate($liste)

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

    ;------Dellet Funktion bis Jetzt------
    Case $delet
    $anzahl +=1
    $index = _GUICtrlComboBox_GetCurSel($liste)
    $select = _GUICtrlComboBoxEx_GetItem($liste, $index)
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $select[0])
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl", "REG_SZ", $anzahl)
    _GUICtrlComboBox_BeginUpdate($liste)
    _GUICtrlComboBox_DeleteString($liste, $select[0])
    _GUICtrlComboBox_EndUpdate($liste)
    ;------------------------------------------------------------
    Case $liste
    $index = _GUICtrlComboBox_GetCurSel($liste)
    $item = _guictrlcomboboxex_getitem($liste, $index)
    $labeln = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $item[0])
    GUICtrlSetData($Label1, $labeln)

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

    EndSwitch
    WEnd

    [/autoit]
  • Hallo ich habe es geteste und es get überhaubt nicht es werden irgendwelche sachen eingelesen aber nicht das was ich Brauche

  • Also ich hab's jetzt mal kurz in einer VM getestet, es scheint zu funktionieren.
    Du hast hoffentlich vorher die alten Schlüssel deines Programms aus der Registry entfernt.

    edit:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIComboBox.au3>
    #include <String.au3>
    #include <GuiComboBoxEx.au3>

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

    #RequireAdmin
    Global $regok = 10
    Global $anzahl = 0
    Global $i = 0
    #region ### START Koda GUI section ### Form=I:\Users\Xedon\Desktop\manage sys.kxf
    $Form2_1 = GUICreate("Form1", 676, 121, 193, 124)
    $Pic1 = GUICtrlCreatePic("I:\Users\Xedon\Pictures\cod5-7.jpg", 0, 0, 676, 436, 0)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Beenden = GUICtrlCreateButton("Beenden", 328, 40, 155, 25, 0)
    $Label1 = GUICtrlCreateLabel("", 8, 8, 660, 17)
    $Starten = GUICtrlCreateButton("Starten", 8, 40, 99, 25, 0)
    $add = GUICtrlCreateButton("Programm Hinzufügen ", 136, 40, 155, 25, 0)
    $liste = GUICtrlCreateCombo("", 264, 80, 145, 25)
    $delet = GUICtrlCreateButton("Auswahl Löschen", 520, 40, 139, 25, 0)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    $regok = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "registrierung")

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

    If $regok = "" Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "registrierung", "REG_SZ", "0")
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl", "REG_SZ", "0")
    EndIf
    ;-------Namenszuweisung-----------
    $read = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl")
    If $read > 0 Then
    For $i = 1 To $read
    $name = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $i)
    _GUICtrlComboBox_AddString($liste, $name)
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Beenden
    Exit
    Case $Starten
    _run()
    Case $add
    _add()
    Case $delet
    _delete()
    Case $liste
    _setLabel()
    EndSwitch
    WEnd

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

    Func _run()
    $index = _GUICtrlComboBox_GetCurSel($liste)
    $item = _GUICtrlComboBoxEx_GetItem($liste, $index)
    $start = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $item[0])
    Run($start)
    EndFunc ;==>_run

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

    Func _add()
    $path = FileOpenDialog("Choose file...", @TempDir, "Excute Files (*.exe)")
    If Not @error Then
    $name = InputBox("Namenseingabe", "Geben sie den namen des Spiels an")
    EndIf
    $anzahl = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl")
    $anzahl += 1
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $name, "REG_SZ", $path)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl", "REG_SZ", $anzahl)
    _GUICtrlComboBox_BeginUpdate($liste)
    _GUICtrlComboBox_AddString($liste, $name)
    _GUICtrlComboBox_EndUpdate($liste)
    EndFunc ;==>_add

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

    Func _delete()
    $anzahl = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl")
    $anzahl -= 1
    $index = _GUICtrlComboBox_GetCurSel($liste)
    $item = _GUICtrlComboBoxEx_GetItem($liste, $index)
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $item[0])
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\starter\settings", "Listenanzahl", "REG_SZ", $anzahl)
    _GUICtrlComboBox_BeginUpdate($liste)
    _GUICtrlComboBox_DeleteString($liste, $item[0])
    _GUICtrlComboBox_EndUpdate($liste)
    EndFunc ;==>_delete

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

    Func _setLabel()
    $index = _GUICtrlComboBox_GetCurSel($liste)
    $item = _GUICtrlComboBoxEx_GetItem($liste, $index)
    $path = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\starter", $item[0])
    GUICtrlSetData($Label1, $path)
    EndFunc ;==>_setLabel

    [/autoit]