- Offizieller Beitrag
Das ist die Fehlermeldung, die ich manchmal (nicht immer bekomme).
Hier das Script:
Spoiler anzeigen
#include <GUIConstants.au3>
#include <GuiList.au3>
#NoTrayIcon
Const $RegKey="HKEY_CURRENT_USER\Software\Microsoft\Shared Tools\Outlook\Journaling\"
$Form1 = GUICreate("Outlook Journal-Eintragstyp", 552, 304, -1, -1)
$Group1 = GUICtrlCreateGroup("Vorhandene Journaltypen", 20, 15, 341, 266)
$List1 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_restore = GUICtrlCreateButton("Wiederherstellen", 390, 65, 136, 36)
$Button_add = GUICtrlCreateButton("Eintrag hinzufügen", 390, 125, 136, 36)
$Button_del = GUICtrlCreateButton("Markierten Eintrag löschen", 390, 185, 136, 36)
$Button_end = GUICtrlCreateButton("Ende", 390, 245, 136, 36)
GUISetState(@SW_SHOW)
$Form2 = GUICreate("Neuen Eintragstyp hinzufügen", 377, 151, -1, -1)
$Group2 = GUICtrlCreateGroup("Eintragstyp", 30, 15, 311, 66)
$Input1 = GUICtrlCreateInput("", 40, 40, 291, 26, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_cancel2 = GUICtrlCreateButton("Abbrechen", 30, 95, 121, 26)
$Button_add_back = GUICtrlCreateButton("Hinzufügen", 220, 95, 121, 26)
$Form3 = GUICreate("ACHTUNG!", 531, 96, -1, -1)
GUICtrlCreateLabel("Achtung! Der Registry-Schlüssel wird gelöscht! Ein Backup wird erstellt.", 20, 15, 492, 30, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN))
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xff0000)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button_deltrue = GUICtrlCreateButton("Löschen", 20, 55, 85, 25)
$Button_delfalse = GUICtrlCreateButton("Nicht Löschen", 430, 55, 85, 25)
GUICtrlSetState(-1, $GUI_FOCUS)
$Form4 = GUICreate("Gelöschte Einträge wiederherstellen", 552, 304, -1, -1)
$Group4 = GUICtrlCreateGroup("Vorhandene Backups", 20, 15, 341, 266)
$List4 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button_cancel4 = GUICtrlCreateButton("Abbrechen", 390, 185, 136, 36)
$Button_restore_back = GUICtrlCreateButton("Eintrag wiederherstellen", 390, 245, 136, 36)
If FileExists(@ScriptDir & "\outlk_key.ini") Then
GUICtrlSetState($Button_restore, $GUI_SHOW)
Else
GUICtrlSetState($Button_restore, $GUI_HIDE)
EndIf
_ReadSubKeyRefreshList()
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $Button_end
ExitLoop
Case $msg = $Button_add
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form2)
Case $msg = $Button_del
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form3)
Case $msg = $Button_deltrue
$EntryDel = GUICtrlRead($List1)
If $EntryDel <> "" Then
_GetKeyToBackupINI()
RegDelete($RegKey&$EntryDel)
GUICtrlSetState($Button_restore, $GUI_SHOW)
Else
MsgBox(4096, "Achtung!", "Es wurde kein Eintrag ausgewählt.")
EndIf
GUISetState(@SW_HIDE, $Form3)
GUISetState(@SW_SHOW, $Form1)
_ReadSubKeyRefreshList()
Case $msg = $Button_delfalse
GUISetState(@SW_HIDE, $Form3)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_add_back
$NewEntry = GUICtrlRead($Input1)
If _GUICtrlListSelectString($List1, $NewEntry, -1) = $LB_ERR Then
If $NewEntry <> "" Then
_AddKeys4NewEntry($NewEntry)
GUISetState(@SW_SHOW, $Form1)
GUISetState(@SW_HIDE, $Form2)
_ReadSubKeyRefreshList()
Else
MsgBox(4096, "Achtung!", "Kein neuer Eintrag erstellt!")
EndIf
Else
MsgBox(4096, "Achtung!", "Eintrag existiert bereits!")
EndIf
Case $msg = $Button_cancel2
GUISetState(@SW_HIDE, $Form2)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_restore
GUISetState(@SW_HIDE, $Form1)
GUISetState(@SW_SHOW, $Form4)
_BackupList()
Case $msg = $Button_cancel4
GUISetState(@SW_HIDE, $Form4)
GUISetState(@SW_SHOW, $Form1)
Case $msg = $Button_restore_back
$EntryRestore = GUICtrlRead($List4)
If $EntryRestore <> "" Then
_RestoreKeyFromBackupINI()
IniDelete(@ScriptDir & "\outlk_key.ini", $EntryRestore)
If FileGetSize(@ScriptDir & "\outlk_key.ini") = 0 Then
FileDelete(@ScriptDir & "\outlk_key.ini")
GUICtrlSetState($Button_restore, $GUI_HIDE)
EndIf
$EntryRestore = ""
GUISetState(@SW_HIDE, $Form4)
GUISetState(@SW_SHOW, $Form1)
_ReadSubKeyRefreshList()
Else
MsgBox(4096, "Achtung!", "Kein Eintrag zur Wiederherstellung ausgewählt.")
EndIf
EndSelect
WEnd
Exit
Func _ReadSubKeyRefreshList()
Dim $i=0
Dim $Wert, $Fehler=0
GUICtrlSetData($List1,"")
Do
$i+=1
$Wert=RegEnumKey($RegKey, $i)
$Fehler=@Error
If $Fehler=0 Then
GUICtrlSetData($List1, $Wert)
EndIf
Until $Fehler<>0
EndFunc
Func _AddKeys4NewEntry($NewEntry)
RegWrite($RegKey&$NewEntry, "AutoJournaled", "REG_DWORD" , 00000000)
RegWrite($RegKey&$NewEntry, "JournalByContact", "REG_DWORD" , 00000000)
RegWrite($RegKey&$NewEntry, "Large Icon", "REG_SZ" , "[8]")
RegWrite($RegKey&$NewEntry, "Small Icon", "REG_SZ" , "[8]")
RegWrite($RegKey&$NewEntry, "Description", "REG_SZ" , $NewEntry)
EndFunc
Func _GetKeyToBackupINI()
Dim $RegTypes[8]
$RegTypes[1] = "REG_SZ"
$RegTypes[2] = "REG_EXPAND_SZ"
$RegTypes[3] = "REG_BINARY"
$RegTypes[4] = "REG_DWORD"
$RegTypes[5] = ""
$RegTypes[6] = ""
$RegTypes[7] = "REG_MULTI_SZ"
Dim $i = 0
Dim $Wert, $val, $Fehler = 0
Do
$i+=1
$Wert = RegEnumVal($RegKey&$EntryDel, $i)
$Fehler = @Error
If $Fehler = 0 Then
$val = RegRead($RegKey&$EntryDel, $Wert)
IniWrite ( @ScriptDir & "\outlk_key.ini", $EntryDel, $Wert, $val & ";" & $RegTypes[@extended] )
EndIf
Until $Fehler <> 0
EndFunc
Func _RestoreKeyFromBackupINI()
$INISection = IniReadSection(@ScriptDir & "\outlk_key.ini", $EntryRestore)
For $i = 1 To $INISection[0][0]
$StrSplit = StringSplit($INISection[$i][1],";")
RegWrite($RegKey&$EntryRestore, $INISection[$i][0], $StrSplit[1], $StrSplit[0])
Next
EndFunc
Func _BackupList()
$var = IniReadSectionNames(@ScriptDir & "\outlk_key.ini")
If @error Then
MsgBox(4096, "Achtung!", "Keine gesicherten Einträge vorhanden.")
Else
For $i = 1 To $var[0]
GUICtrlSetData($List4, $var[$i])
Next
EndIf
EndFunc
Alles anzeigen
In Zeile 165 tritt der Fehler auf
For $i = 1 To $INISection[0][0]
For $i = 1 To $INISection^ ERROR
Der fehler ist sicher berechtigt Ursache ist eine zu diesem Zeitpunkt gelöschte INI-Datei.
Allerdings werden mir die Einträge aus der INI noch zur Auswahl (Wiederherstellung) angeboten.
Ich hab es mehrfach probiert:
1. neuen Eintrag (Schlüssel) angelegt
2. diesen Eintrag gelöscht (Sicherung wird in INI erstellt)
3. gelöschten Eintrag wiederhergestellt (Eintrag wird aus INI entfernt und wenn diese dann leer, wird INI gelöscht
Manchmal gehts, manchmal nicht.
Wahrscheinlich ein Aufruf am falschen Ort zur falschen Zeit.
Naja, falls jemand den Fehler erspäht - ich bin dankbar für jeden Hinweis.