#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=AutoStarter_logo.ico
#AutoIt3Wrapper_outfile=AutoStarter.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Comment=Nur ein Osrik Klon!
#AutoIt3Wrapper_Res_Description=Startet Programme nach Zeit.
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=TV_Freeze  2012
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_Res_Field=CompanyName|Keine! aber schau auf ->> www.autoit.de
#AutoIt3Wrapper_Res_Field=ProductName|AutoStarter.exe
#AutoIt3Wrapper_Res_Field=ProductVersion|1.0.0.0
#AutoIt3Wrapper_Res_Field=InternalName|%scriptfile%
#AutoIt3Wrapper_Res_Field=Platform|XP/Vista/Win7/Win8
#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
#AutoIt3Wrapper_Res_Field=Compile Date|%longdate% %time%
#AutoIt3Wrapper_Res_Field=Link|http://www.autoit.de
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

;********************************
; AutoStarter.au3 by TV_Freeze
; Erstellt mit SciTE Version 2.28
; und AutoIt V3.3.8.1
;********************************
#include <Misc.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>
#include <GuiListView.au3>
#include <GuiButton.au3>
#include <GDIPlus.au3>
#include 'PictureData.au3'

Opt('GUIOnEventMode', 1) ; GUI OnEvent Modus aktivieren
Opt("TrayOnEventMode", 1) ; Tray OnEvent Modus aktivieren
Opt("TrayMenuMode", 1) ; kein Tray-Standardmenü
Opt("MustDeclareVars", 1) ; alle Variablen müssen deklariert werden
Opt("MouseCoordMode", 0) ; Mausfunktionen nutzen relative Koordinaten zum aktiven Fenster

Global $Title = 'AutoStarter'
If Not StringInStr('Win_XP Win_Vista Win_2003 Win_2008 Win_7 Win_8', @OSVersion) Then ; Welches Betriebssystem ?
	Global $Msg = 'Dieses Programm funktioniert nur unter:' & @CRLF & @CRLF
	$Msg &= 'Windows XP, Windows Vista, Windows Server 2003' & @CRLF & 'Windows Server 2008, Windows 7 und Windows 8'
	Exit MsgBox(48, $Title, $Msg) ; Nachricht anzeigen und Programm beenden
EndIf
If _Singleton($Title, 1) = 0 Then ; Wenn das Programm bereits läuft, dann...
	WinActivate($Title, '') ; Programm aktivieren (in den Vordergrund holen)
	MsgBox(48, $Title, 'Das Programm läuft bereits!', 5) ; Benutzer darauf hinweisen
	Exit ; und den zweiten Programmaufruf beenden
EndIf
; Meine Variablen deklarieren
; Ini Variablen
Global $Ini = @ScriptDir & '\AutoStarter.ini'
Global $Icon = @ScriptDir & '\AutoStarter_logo.ico'
Global $X, $Y, $Auto, $Tray, $Live, $Ende, $Logo, $DReg
Global $spfad[8], $ptimer[8], $akt[8]
$X = IniRead($Ini, 'Position', 'X', @DesktopWidth / 2 - 300)
$Y = IniRead($Ini, 'Position', 'Y', @DesktopHeight / 2 - 220)
$Auto = IniRead($Ini, 'OPTION', 'Auto', '0')
$Tray = IniRead($Ini, 'OPTION', 'Tray', '0')
$Live = IniRead($Ini, 'OPTION', 'Live', '0')
$Ende = IniRead($Ini, 'OPTION', 'Exit', '0')
$Logo = IniRead($Ini, 'OPTION', 'Logo', '0')
$DReg = IniRead($Ini, 'OPTION', 'DReg', '0')
For $i = 0 To 7
	$spfad[$i] = IniRead($Ini, 'Tag0' & $i + 1, 'File', 'NamePfad')
	$ptimer[$i] = IniRead($Ini, 'Tag0' & $i + 1, 'Time', '0')
	$akt[$i] = IniRead($Ini, 'Tag0' & $i + 1, 'Set', '0')
	; Korektur ?
	If $spfad[$i] = "" Then $spfad[$i] = "NamePfad"
	If $ptimer[$i] = IsNumber($ptimer[$i]) Or $ptimer[$i] < 0 Then $ptimer[$i] = 0
Next
; Haupt-Fenster Variable
Global $hGUI = GUICreate($Title & ' v1.0', 612, 363, $X, $Y)
Global $T
GUISetOnEvent($GUI_EVENT_CLOSE, '_End') ; Schließ-Button, dann Programm Ende !
; Variablen für Kontextmenü's
Global $idAbout = 1000, $hMenu2, $hMenu3, $contextmenu, $submenu[3], $textitem[5]
; Variablen für die Controls
Global $box[8], $running[8], $selectbutton[20], $option[9], $oldtime[8], $add, $ListBox, $progressbar, $zeit, $Zaehler = 0
Global Const $hMenu1 = _GUICtrlMenu_GetSystemMenu($hGUI) ; Fenstermenü vom Haupt-Fenster
Global $box_ch_num, $Endbut, $starten, $oldpos, $winpos, $nr
; Analyse-Fenster Variablen
Global $AnalyseGUI, $active_select, $Erfolg, $Erfolg2, $ListBox2, $rr, $wiederh
; Info-Fenster Variablen
Global $InfoGUI
Global Const $STM_SETIMAGE = 0x0172
; Registry Variablen
Global $data[1], $OP[1], $nummer, $wFile
Global $REG_RUN = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Run'
Global $REG_RUN2 = 'HKLM64\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run'
Global $Au3Path = RegRead64('HKLM\Software\AutoIt v3\AutoIt', 'InstallDir') ; Pfad zu AutoIt
; Löschen-Fenster Variablen
Global $InfoGUI2, $butpos
; Extra Variablen
Global $alltime, $click_now, $Filename, $Check, $Check2, $flag, $flag4, $Lname, $message, $Fname, $param, $run, $mustclick
;-------------------------------------------------------------------------------------------------------------------------
; Haupt-Fenster mit Controls füllen
GUICtrlCreateLabel('Programm:', 71, 10, 54, 13)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateLabel('Timer:', 200, 10, 45, 13)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateLabel('Aktiv:', 264, 10, 44, 13)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateLabel('Auswahl', 324, 10, 48, 13)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateLabel('Laufzeit:', 478, 11, 48, 13, $ES_RIGHT, $SS_BLACKRECT)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateLabel('Projekt AutoStarter', 225, 299, 162, 13, BitOR($SS_RIGHTJUST, $SS_CENTER), $SS_BLACKRECT)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateLabel('Copyright (c) 2012', 225, 319, 162, 13, BitOR($SS_RIGHTJUST, $SS_CENTER), $SS_BLACKRECT)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlCreateLabel('', 11, 29, 592, 2, -1, BitOR($WS_EX_STATICEDGE, $DT_VCENTER))
$add = 0
For $i = 0 To 7
	$box[$i] = GUICtrlCreateCheckbox("", 270, 41 + $add, 18, 16, -1, $SS_BLACKRECT)
	GUICtrlSetTip(-1, 'Aktiviert das Programm ' & $i + 1 & ', dieses startet nach angegebender Zeit.')
	If $akt[$i] = 1 Then
		GUICtrlSetState($box[$i], $GUI_CHECKED)
	Else
		GUICtrlSetState($box[$i], $GUI_UNCHECKED)
	EndIf
	$spfad[$i] = GUICtrlCreateInput($spfad[$i], 27, 39 + $add, 144, 23, BitOR($ES_LEFT, $ES_AUTOHSCROLL), BitOR($WS_EX_CLIENTEDGE, $ES_MULTILINE))
	GUICtrlSetTip(-1, 'Gibt den Dateipfad der ' & $i + 1 & '.Anwendung mit Parametern an. C:\Ordner\Anwendung.exe | Parameter')
	$ptimer[$i] = GUICtrlCreateInput($ptimer[$i], 189, 39 + $add, 60, 23, BitOR($ES_NUMBER, $ES_RIGHT), $WS_EX_OVERLAPPEDWINDOW)
	GUICtrlSetTip(-1, 'Legt die Startzeit des ' & $i + 1 & '. Programmes fest (in sec).')

	GUICtrlCreateLabel($i + 1 & ':', 9, 44 + $add, 17, 13, $SS_CENTER, $SS_BLACKRECT)
	GUICtrlSetColor(-1, 0x0000FF)
	; Select-Button
	$selectbutton[$i] = GUICtrlCreateButton('Durchsuchen', 306, 39 + $add, 81, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_SelectFile')
	$add += 30
Next
; Optionen
GUICtrlCreateGroup('Option', 402, 33, 192, 140)
$option[0] = GUICtrlCreateCheckbox('AutoStart', 423, 57, 81, 16, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_CheckBox_Change')
GUICtrlSetTip(-1, 'Startet "AutoStarter" mit Windows und aktiviert alle eingestellten Programme nach Zeit (Standard).')
$option[1] = GUICtrlCreateCheckbox('In Tray', 423, 76, 81, 16, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_CheckBox_Change')
GUICtrlSetTip(-1, 'Beim Systemstart wird "AutoStarter" in der Taskleiste angezeigt (Tray).')
$option[2] = GUICtrlCreateCheckbox('Live Modus', 423, 96, 81, 16, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_CheckBox_Change')
GUICtrlSetTip(-1, 'Diese Option startet alle eingestellten Programme nach Zeit (Systemstart Simulation).')
$option[3] = GUICtrlCreateCheckbox('Beenden', 423, 115, 81, 16, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_CheckBox_Change')
GUICtrlSetTip(-1, 'Diese Einstellung Beendet "AutoStarter" wenn alle Programme gestartet wurden.')
$option[4] = GUICtrlCreateCheckbox('Startlogo ausblenden', 423, 133, 128, 16, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_CheckBox_Change')
GUICtrlSetTip(-1, 'Wenn aktiviert, wird das Startlogo nicht eingeblendet.')
$option[5] = GUICtrlCreateCheckbox('Doppelten Aufruf verhindern', 423, 151, 159, 16, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_CheckBox_Change')
GUICtrlSetTip(-1, 'Programme die schon laufen, werden nicht noch mal gestartet.')
GUICtrlCreateGroup("", -99, -99, 1, 1)

GUICtrlCreateLabel('EreignisLog:', 402, 179, 60, 13)
$ListBox = GUICtrlCreateList('', 402, 197, 192, 98, 0x50010103, 0x000204)
GUICtrlSetTip(-1, 'Zeigt Ereigniss von Project AutoStarter an.')
$progressbar = GUICtrlCreateProgress(402, 299, 192, 16)
; Buttons
$selectbutton[8] = GUICtrlCreateButton('RESET', 402, 322, 48, 23, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_ResetData')
GUICtrlSetTip(-1, 'Setzt den Laufzeit-Timer zurück und gibt Dialogfelder wieder frei.')
$selectbutton[9] = GUICtrlCreateButton('Übernehmen', 455, 322, 75, 23, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_SaveData')
GUICtrlSetTip(-1, 'Übernimmt Einstellungen und speichert sie ab.')
$selectbutton[10] = GUICtrlCreateButton('Ende', 537, 322, 57, 23, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_End')
GUICtrlSetTip(-1, 'Beendet AutoStarter')
$selectbutton[11] = GUICtrlCreateButton('Analyse', 26, 291, 81, 21, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, '_AnalyseGUI')
$selectbutton[12] = GUICtrlCreateButton('Optionen', 110, 291, 78, 21, Default, $SS_BLACKRECT)
$selectbutton[13] = GUICtrlCreateButton('Info', 26, 319, 162, 21, Default, $SS_BLACKRECT)
GUICtrlSetOnEvent(-1, 'ShowInfo')
$zeit = GUICtrlCreateLabel($Zaehler, 546, 11, 48, 13, $ES_RIGHT, $SS_BLACKRECT)
GUICtrlSetColor(-1, 0xFF0000)
; Extra Menue-Punkt
For $i = 0 To 2
	_GUICtrlMenu_DeleteMenu($hMenu1, $i)
Next
_GUICtrlMenu_InsertMenuItem($hMenu1, 4, 0, 0)
_GUICtrlMenu_InsertMenuItem($hMenu1, 5, "&Info über AutoStarter...", $idAbout) ; GUIRegisterMsg !

$contextmenu = GUICtrlCreateContextMenu() ; Rechts-Klick im Hauptfenster zeigt ein ContextMenü
$submenu[0] = GUICtrlCreateMenu('Anleitung', $contextmenu)
$textitem[0] = GUICtrlCreateMenuitem('Hilfe', $submenu[0])
GUICtrlCreateMenuitem("", $contextmenu) ; separator
$submenu[1] = GUICtrlCreateMenu('Steuerung', $contextmenu)
$textitem[1] = GUICtrlCreateMenuitem('Reset', $submenu[1])
GUICtrlSetOnEvent(-1, 'OnMenuClick')
$textitem[2] = GUICtrlCreateMenuitem('Übernehmen', $submenu[1])
GUICtrlSetOnEvent(-1, 'OnMenuClick')
$textitem[3] = GUICtrlCreateMenuitem('Beenden', $submenu[1])
GUICtrlSetOnEvent(-1, 'OnMenuClick')
$submenu[2] = GUICtrlCreateMenu('Über AutoStarter.exe', $contextmenu)
$textitem[4] = GUICtrlCreateMenuitem('Version', $submenu[2])
GUICtrlSetOnEvent(-1, 'ShowInfo')

If FileExists($Ini) Then GUICtrlSetData($ListBox, 'Config.ini gefunden und ausgelesen!')
GUICtrlSetState($selectbutton[12], $GUI_DISABLE) ; keine Optionen (wie im Osrik)
TraySetToolTip($Title & '.exe wird ausgeführt.')
IsCompiled() ; Setzte Icon für GUI und Tray
; merke alte Zeiten
For $i = 0 To 7
	$oldtime[$i] = GUICtrlRead($ptimer[$i])
	$running[$i] = 0 ; Status File-Running
Next

; Startabfragen
If $Auto = 1 Then
	GUICtrlSetState($option[0], $GUI_CHECKED) ; Wenn Autostart gesetzt,  dann einen Haken setzen
	$starten = 1 ; Nur beim 1. Start setzen
	$flag = 1
Else
	GUICtrlSetState($option[0], $GUI_UNCHECKED) ; Wenn Autostart nicht gesetzt,  dann den Haken entfernen
	$starten = 0
	$flag = 0
EndIf
If $Tray = 1 Then
	GUICtrlSetState($option[1], $GUI_CHECKED) ; Wenn $Tray gesetzt, dann nach 6 Sec. in Tray versetzen
Else
	GUICtrlSetState($option[1], $GUI_UNCHECKED) ; dann den Haken entfernen
EndIf
If $Live = 1 Then
	GUICtrlSetState($option[2], $GUI_CHECKED) ; Wenn $Live gesetzt, dann einen Hacken setzen
Else
	GUICtrlSetState($option[2], $GUI_UNCHECKED) ; dann den Haken entfernen
EndIf
If $Ende = 1 Then
	GUICtrlSetState($option[3], $GUI_CHECKED) ; Wenn $Ende gesetzt, dann einen Hacken setzen
	highes_time() ; alle Zeiten ermitteln
Else
	GUICtrlSetState($option[3], $GUI_UNCHECKED) ; dann den Haken entfernen
EndIf
If $Logo = 1 Then
	GUICtrlSetState($option[4], $GUI_CHECKED) ; Wenn $Logo gesetzt, dann einen Hacken setzen
Else
	GUICtrlSetState($option[4], $GUI_UNCHECKED) ; dann den Haken entfernen
	ShowLogo() ; Start-Logo anzeigen lassen
EndIf
If $DReg = 1 Then
	GUICtrlSetState($option[5], $GUI_CHECKED) ; Wenn $DReg gesetzt, dann einen Hacken setzen
Else
	GUICtrlSetState($option[5], $GUI_UNCHECKED) ; dann den Haken entfernen
EndIf

TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, '_NoHide') ; Hauptfenster wieder hervorholen (linker Maus-klick aufs Tray-Icon)
TraySetOnEvent($TRAY_EVENT_SECONDARYDOWN, '_Hide') ; Hauptfenter verstecken		  (rechter Maus-klick aufs Tray-Icon)
GUIRegisterMsg($WM_SYSCOMMAND, 'WM_SYSCOMMAND') ; Von Menü aus Info aufgerufen ?
GUISetState(@SW_SHOW, $hGUI)
$T = @SEC
AdlibRegister('_Timer') ; Zähler jede Sekunde um eins erhöhen

; Haupt-Schleife
While Sleep(10)
	If $Ende = 1 And $alltime = $Zaehler Then _End() ; Wenn Ende Option ist an und größster Zähler = Timer, dann Programm Ende
	If $Live = 1 And $run = 0 Then _Checkfiles() ;  Wenn Live Option ist an, überprüfe welche Programme gestartet werden
	If $Auto = 1 And $starten Then _Checkfiles() ; Wenn Autostart Option ist an, überprüfe welche Programme gestartet werden (nur beim 1. Start)
	If $Tray = 1 And $Zaehler = 5 Then GUISetState(@SW_HIDE, $hGUI) ; Programm-Fenster verstecken, weil Tray Option ist an (bei Zähler=6)
	If $rr > 0 And $active_select = 0 Then
		$active_select = 1
		AdlibRegister('_Auswahl', 90) ; Auswahl der Registry-Checkboxen prüfen
	EndIf
	If $Erfolg > 0 And $click_now = 0 Then Melden() ; melde den Erfolg für die Wiederherstellung
WEnd

; hier ein paar Fenster
Func _AnalyseGUI()
	GUISetState(@SW_DISABLE, $hGUI) ; Deaktiviere Haupt--Fenster
	$winpos = WinGetPos($Title) ; Position vom Haupt-Fenster holen
	$AnalyseGUI = GUICreate('Analyse und Optimierung', 492, 312, $winpos[0] + 60, $winpos[1] + 24, 0x94C800CC, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $hGUI)
	GUISetOnEvent($GUI_EVENT_CLOSE, '_Close_AnalyseGUI')
	; lösche einige Menü-Punkte
	$hMenu3 = _GUICtrlMenu_GetSystemMenu($AnalyseGUI)
	For $i = 0 To 2
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	For $i = 4 To 10
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	GUICtrlCreateLabel('Einträge in der Registry dieses Computers', 11, 11, 393, 13)
	GUICtrlSetColor(-1, 0x960083)
	GUICtrlCreateLabel('Auswahl', 422, 11, 60, 13)
	GUICtrlSetColor(-1, 0x0000FF)
	$ListBox2 = GUICtrlCreateListView('Autostarteintrag|Empfolen|Pfad dieser Anwendung', 11, 31, 471, 166)
	_GUICtrlListView_SetExtendedListViewStyle($ListBox2, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_INFOTIP))
	_GUICtrlListView_SetColumnWidth($ListBox2, 0, 185)
	_GUICtrlListView_SetColumnWidth($ListBox2, 1, 45)
	_GUICtrlListView_SetColumnWidth($ListBox2, 2, $LVSCW_AUTOSIZE_USEHEADER)
	$selectbutton[14] = GUICtrlCreateButton('System Auslesen', 11, 203, 122, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Lese_Registry')
	$selectbutton[15] = GUICtrlCreateButton('Wiederherstellung', 138, 203, 114, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_AddRegs')
	$selectbutton[16] = GUICtrlCreateButton('Optimieren', 11, 236, 122, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Optimieren')
	$selectbutton[17] = GUICtrlCreateButton('Löschen', 138, 236, 114, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Loeschen')
	GUICtrlCreateGroup('Optimieren', 264, 202, 210, 98)
	$option[6] = GUICtrlCreateCheckbox('nach Zeit', 300, 226, 68, 16, Default, $SS_BLACKRECT)
	$option[7] = GUICtrlCreateCheckbox('nach Systemleistung', 300, 250, 122, 16, Default, $SS_BLACKRECT)
	$option[8] = GUICtrlCreateCheckbox('Manual', 300, 273, 59, 16, Default, $SS_BLACKRECT)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$selectbutton[18] = GUICtrlCreateButton('OK', 11, 281, 75, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Close_AnalyseGUI')
	$selectbutton[19] = GUICtrlCreateButton('Abbrechen', 96, 281, 75, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Close_AnalyseGUI')
	GUICtrlSetState($option[6], $GUI_CHECKED) ; Haken nur hier
	GUICtrlSetState($option[7], $GUI_DISABLE)
	GUICtrlSetState($option[8], $GUI_DISABLE)
	If Not FileExists(@ScriptDir & '\Remove.ini') Then
		GUICtrlSetState($selectbutton[15], $GUI_DISABLE) ; keine Wiederherstellung
	EndIf
	GUICtrlSetState($selectbutton[16], $GUI_DISABLE) ; kein Optimieren
	GUICtrlSetState($selectbutton[17], $GUI_DISABLE) ; kein Löschen
	IsCompiled()
	GUISetState(@SW_SHOW, $AnalyseGUI)
EndFunc   ;==>_AnalyseGUI

Func ShowLogo()
	Local $LogoGUI, $hLogo, $hBmp_Logo
	$LogoGUI = GUICreate("", 690, 450, -1, -1, $WS_CAPTION)
	; Lade ein Haupt-Logo aus dem Speicher - Danke UEZ !
	$hLogo = GUICtrlCreatePic('', 0, 0, 690, 450)
	$hBmp_Logo = Load_BMP_From_Mem(_hLogoPic(), True)
	_WinAPI_DeleteObject(GUICtrlSendMsg($hLogo, $STM_SETIMAGE, 0, $hBmp_Logo))
	GUISetState(@SW_SHOW, $LogoGUI)
	_WinAPI_DeleteObject($hBmp_Logo)
	Sleep(3000) ; 3 Sekunden warten
	GUIDelete($LogoGUI)
EndFunc   ;==>ShowLogo

Func ShowInfo()
	Local $Logo, $Bmp_Logo
	GUISetState(@SW_DISABLE, $hGUI) ; Deaktiviere Haupt--Fenster
	$winpos = WinGetPos($Title) ; Position vom Haupt-Fenster holen
	$InfoGUI = GUICreate("Info über " & $Title, 268, 380, $winpos[0] + 165, $winpos[1] - 10, 0x94C800CC, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $hGUI)
	GUISetOnEvent($GUI_EVENT_CLOSE, '_Close_Info')
	; lösche einige Menü-Punkte
	$hMenu2 = _GUICtrlMenu_GetSystemMenu($InfoGUI)
	For $i = 0 To 2
		_GUICtrlMenu_DeleteMenu($hMenu2, $i)
	Next
	For $i = 4 To 10
		_GUICtrlMenu_DeleteMenu($hMenu2, $i)
	Next
	_GUICtrlMenu_DeleteMenu($hMenu2, 1)
	; Lade ein Logo aus dem Speicher - Danke UEZ !
	$Logo = GUICtrlCreatePic('', 0, 0, 235, 79)
	$Bmp_Logo = Load_BMP_From_Mem(_LogoPic(), True)
	_WinAPI_DeleteObject(GUICtrlSendMsg($Logo, $STM_SETIMAGE, 0, $Bmp_Logo))
	GUICtrlCreateLabel('Erstellt durch:', 11, 96, 171, 13, -1, $SS_BLACKRECT)
	GUICtrlSetColor(-1, 0x0000FF)
	GUICtrlCreateLabel('TV_Freeze', 77, 96, 170, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateLabel('Idee von:', 11, 132, 171, 13, -1, $SS_BLACKRECT)
	GUICtrlSetColor(-1, 0x0000FF)
	GUICtrlCreateLabel('Project Osrik', 77, 132, 168, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateLabel('Grafik von:', 11, 172, 171, 13, -1, $SS_BLACKRECT)
	GUICtrlSetColor(-1, 0x0000FF)
	GUICtrlCreateLabel('TV_Freeze', 77, 172, 186, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateLabel('Danke an:', 12, 210, 243, 13, -1, $SS_BLACKRECT)
	GUICtrlSetColor(-1, 0x0000FF)
	GUICtrlCreateLabel('UEZ -> File to Base64 String Code Generator', 77, 210, 180, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateLabel('UEZ ->    Load_BMP_From_Mem', 77, 232, 180, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateLabel('Online:', 11, 258, 89, 13, -1, $SS_BLACKRECT)
	GUICtrlSetColor(-1, 0x0000FF)
	GUICtrlCreateLabel('http://www.Autoit.de', 77, 258, 99, 22, -1, $SS_BLACKRECT)
	GUICtrlSetCursor(-1, 0) ; verändere den Mousezeiger für diesen Label
	GUICtrlSetColor(-1, 0xF85A00)
	GUICtrlSetOnEvent(-1, 'GoToWeb') ; Web-seite mit default Browser aufrufen
	GUICtrlCreateLabel('Freeware', 104, 322, 48, 13, -1, $SS_BLACKRECT)
	GUICtrlSetColor(-1, 0x57C932)
	GUICtrlCreateLabel('', 11, 283, 243, 2, -1, BitOR($WS_EX_STATICEDGE, $DT_VCENTER))
	GUICtrlCreateLabel('-- Nur ein Osrik Klon --', 80, 292, 130, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateLabel('', 11, 314, 243, 2, -1, BitOR($WS_EX_STATICEDGE, $DT_VCENTER))
	GUICtrlCreateLabel('Version 1.0.0.0', 85, 340, 80, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateLabel('Copyright (C) 2012', 74, 356, 100, 13, -1, $SS_BLACKRECT)
	GUICtrlCreateButton('OK', 180, 340, 76, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Close_Info')
	GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON) ; Focus auf OK-Button
	IsCompiled()
	GUISetState(@SW_SHOW, $InfoGUI)
	_WinAPI_DeleteObject($Bmp_Logo)
EndFunc   ;==>ShowInfo

; hier einige Fenster(GUI's) die wie eine Message-Box fungieren
Func _Loeschen()
	GUISetState(@SW_DISABLE, $AnalyseGUI)
	$winpos = WinGetPos('Analyse und Optimierung') ; Position vom Haupt-Fenster holen
	$InfoGUI2 = GUICreate('LÖSCHEN AUF EIGENE GEFAHR!', 471, 140, $winpos[0] + 11, $winpos[1] + 82, 0x94C801C5, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $AnalyseGUI)
	GUISetBkColor(0xFFFFFF)
	IsCompiled() ; GUI & Tray Icon setzen
	; lösche einige Menü-Punkte, bis auf Verschieben
	$hMenu3 = _GUICtrlMenu_GetSystemMenu($InfoGUI2)
	_GUICtrlMenu_DeleteMenu($hMenu3, 0)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	_GUICtrlMenu_DeleteMenu($hMenu3, 3)
	_GUICtrlMenu_DeleteMenu($hMenu3, 2)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	GUICtrlCreateIcon('shell32.dll', -24, 20, 24, 32, 32) ; Fragezeichen-Icon
	GUICtrlCreateLabel('Vorsicht! Die ausgewählten Registryeinträge werden entfernt! Dabei' & _
			@CR & 'wird eine Sicherung in Remove.ini angelegt. Wollen sie die' & @CR & 'Einträge wirklich löschen?', 65, 26, 375, 3 * 17)
	GUICtrlSetFont(-1, 9, 400, 0, 'Tahoma', 5)

	GUICtrlCreateButton('&Ja', 278, 105, 88, 26)
	GUICtrlSetOnEvent(-1, '_DeleteRegs')
	GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON) ; Focus auf Ja-Button
	GUICtrlCreateButton('&Nein', 375, 105, 88, 26)
	GUICtrlSetOnEvent(-1, '_CloseGUI2')
	GUICtrlCreateLabel('                                                                    ', 0, 94, 471, 45) ; das verdeckt leider den OK-Button
	GUICtrlSetBkColor(-1, 0xF0F0F0)
	GUISetState(@SW_SHOW, $InfoGUI2)
	; Hole beide Buttons hervor -> schnell die Mouse darüber fahren lassen...
	$winpos = MouseGetPos() ; alte Position holen
	$butpos = ControlGetPos('LÖSCHEN AUF EIGENE', '', 'Button1')
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button1 Position
	$butpos = ControlGetPos('LÖSCHEN AUF EIGENE', '', 'Button2')
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button2 Position
	MouseMove($winpos[0], $winpos[1], 0) ; zurück zur alten Position
EndFunc   ;==>_Loeschen

Func Message1()
	GUISetState(@SW_DISABLE, $AnalyseGUI)
	_WinSound() ; Spiele ein System Sound ab (.Wav)
	$winpos = WinGetPos('Analyse und Optimierung') ; Position vom Haupt-Fenster holen
	$InfoGUI2 = GUICreate('Was soll optimiert werden?', 471, 130, $winpos[0] + 11, $winpos[1] + 92, 0x94C801C5, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $AnalyseGUI)
	GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGUI2')
	GUISetBkColor(0xFFFFFF)
	; lösche einige Menü-Punkte
	$hMenu3 = _GUICtrlMenu_GetSystemMenu($InfoGUI2)
	For $i = 0 To 2
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	For $i = 4 To 10
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	If @OSVersion = 'WIN_XP' Then
		GUICtrlCreateIcon('shell32.dll', -222, 25, 24, 32, 32) ; Information's-Icon XP
	Else
		GUICtrlCreateIcon('shell32.dll', -278, 25, 24, 32, 32) ; Information's-Icon
	EndIf
	GUICtrlCreateLabel('Es wurden keine Einträge ausgewählt, welche optimiert werden sollen.', 65, 34, 390, 17)
	GUICtrlSetFont(-1, 9, 400, 0, 'Tahoma', 5)
	GUICtrlCreateButton('OK', 375, 96, 88, 26, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_CloseGUI2')
	GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON) ; Focus auf OK-Button
	GUICtrlCreateLabel('                                                                    ', 0, 84, 471, 45) ; das verdeckt leider den OK-Button
	GUICtrlSetBkColor(-1, 0xF0F0F0)
	IsCompiled()
	GUISetState(@SW_SHOW, $InfoGUI2)
	; Hole den OK-Button hervor -> schnell die Mouse darüber fahren lassen...
	$butpos = ControlGetPos('Was soll optimiert werden?', '', 'Button1')
	$winpos = MouseGetPos() ; alte Position holen
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button Position
	MouseMove($winpos[0], $winpos[1], 0) ; zurück zur alten Position
EndFunc   ;==>Message1

Func Message2()
	GUISetState(@SW_DISABLE, $AnalyseGUI)
	_WinSound() ; Spiele ein System Sound ab (.Wav)
	$winpos = WinGetPos('Analyse und Optimierung') ; Position vom Haupt-Fenster holen
	$InfoGUI2 = GUICreate('Doppeltes ausführen verhindern?', 391, 160, $winpos[0] + 53, $winpos[1] + 76, 0x94C801C5, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $AnalyseGUI)
	GUISetBkColor(0xFFFFFF)
	; lösche einige Menü-Punkte, bis auf Verschieben
	$hMenu3 = _GUICtrlMenu_GetSystemMenu($InfoGUI2)
	_GUICtrlMenu_DeleteMenu($hMenu3, 0)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	_GUICtrlMenu_DeleteMenu($hMenu3, 3)
	_GUICtrlMenu_DeleteMenu($hMenu3, 2)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	If @OSVersion = 'WIN_XP' Then
		GUICtrlCreateIcon('user32.dll', -2, 25, 24, 32, 32) ; Warning-Icon XP
	Else
		GUICtrlCreateIcon('user32.dll', -2, 25, 24, 32, 32) ; Warning-Icon
	EndIf
	GUICtrlCreateLabel('Die Optimierung ist abgeschlossen!' & @CR & @CR & 'Soll Ihre Auswahl aus der Registry gelöscht werden?' & _
			@CR & 'Dies verhindert doppeltes ausführen beim Systemstart.', 65, 26, 389, 4 * 16)
	GUICtrlSetFont(-1, 9, 400, 0, 'Tahoma', 5)
	GUICtrlCreateButton('&JA', 198, 124, 88, 26, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Optimize_RegDelete')
	GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON) ; Focus auf JA-Button
	GUICtrlCreateButton('&Nein', 294, 124, 88, 26, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, 'Message3')
	GUICtrlCreateLabel('                                                                    ', 0, 112, 408, 47) ; das verdeckt leider die Buttons
	GUICtrlSetBkColor(-1, 0xF0F0F0)
	IsCompiled()
	GUISetState(@SW_SHOW, $InfoGUI2)
	; Hole beide Buttons hervor -> schnell die Mouse darüber fahren lassen...
	$winpos = MouseGetPos() ; alte Position holen
	$butpos = ControlGetPos('Doppeltes ausführen verhindern', '', 'Button1')
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button1 Position
	$butpos = ControlGetPos('Doppeltes ausführen verhindern', '', 'Button2')
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button2 Position
	MouseMove($winpos[0], $winpos[1], 0) ; zurück zur alten Position
EndFunc   ;==>Message2

Func Message3()
	WinActivate('Analyse und Optimierung')
	GUISetState(@SW_DISABLE, $AnalyseGUI)
	GUIDelete($InfoGUI2)
	_WinSound() ; Spiele ein System Sound ab (.Wav)
	$winpos = WinGetPos('Analyse und Optimierung') ; Position vom Haupt-Fenster holen
	$InfoGUI2 = GUICreate('Optimierung erfolgreich!', 487, 162, $winpos[0] + 5, $winpos[1] + 77, 0x94C801C5, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $AnalyseGUI)
	GUISetOnEvent($GUI_EVENT_CLOSE, '_Close_AnalyseGUI')
	GUISetBkColor(0xFFFFFF)
	; lösche einige Menü-Punkte
	$hMenu3 = _GUICtrlMenu_GetSystemMenu($InfoGUI2)
	For $i = 0 To 2
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	For $i = 4 To 10
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	If @OSVersion = 'WIN_XP' Then
		GUICtrlCreateIcon('shell32.dll', -222, 24, 26, 32, 32) ; Information's-Icon XP
	Else
		GUICtrlCreateIcon('shell32.dll', -278, 24, 26, 32, 32) ; Information's-Icon
	EndIf
	GUICtrlCreateLabel('Bitte warten Sie, bis AutoStarter neu gestartet wurde und aktivieren Sie die gewünschten' _
			 & ' Programme/ Prozesse. Wenn die eingetragenen Programme ohne Probleme starten, sollten sie aus der Registry' _
			 & ' gelöscht werden.', 65, 26, 379, 56)
	GUICtrlSetFont(-1, 9, 400, 0, 'Tahoma', 5)
	GUICtrlCreateButton('OK', 385, 124, 88, 26, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_Close_AnalyseGUI')
	GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON) ; Focus auf OK-Button
	GUICtrlCreateLabel('                                                                    ', 0, 112, 487, 50) ; das verdeckt leider den OK-Button
	GUICtrlSetBkColor(-1, 0xF0F0F0)
	GUICtrlSetState($selectbutton[14], $GUI_DISABLE) ; kein System Auslesen
	GUICtrlSetState($selectbutton[15], $GUI_DISABLE) ; kein Wiederherstellung
	GUICtrlSetState($selectbutton[16], $GUI_DISABLE) ; kein Optimieren
	GUICtrlSetState($selectbutton[17], $GUI_DISABLE) ; kein Löschen
	IsCompiled()
	GUISetState(@SW_SHOW, $InfoGUI2)
	; Hole den OK-Button hervor -> schnell die Mouse darüber fahren lassen...
	$butpos = ControlGetPos('Optimierung erfolgreich!', "", "Button1")
	$winpos = MouseGetPos() ; alte Position holen
	MouseMove($winpos[0] - 20, $winpos[1] - 20, 0) ; neue Position
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button Position
	MouseMove($winpos[0], $winpos[1], 0) ; zurück zur alten Position
EndFunc   ;==>Message3

Func Message4()
	GUISetState(@SW_DISABLE, $AnalyseGUI)
	_WinSound() ; Spiele ein System Sound ab (.Wav)
	$winpos = WinGetPos('Analyse und Optimierung') ; Position vom Haupt-Fenster holen
	$InfoGUI2 = GUICreate('Option fehlt!', 360, 132, $winpos[0] + 72, $winpos[1] + 92, 0x94C801C5, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $AnalyseGUI)
	GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGUI2')
	GUISetBkColor(0xFFFFFF)
	; lösche einige Menü-Punkte
	$hMenu3 = _GUICtrlMenu_GetSystemMenu($InfoGUI2)
	For $i = 0 To 2
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	For $i = 4 To 10
		_GUICtrlMenu_DeleteMenu($hMenu3, $i)
	Next
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	If @OSVersion = 'WIN_XP' Then
		GUICtrlCreateIcon('shell32.dll', -222, 25, 24, 32, 32) ; Information's-Icon XP
	Else
		GUICtrlCreateIcon('shell32.dll', -278, 25, 24, 32, 32) ; Information's-Icon
	EndIf
	GUICtrlCreateLabel('Es wurde keine Optimierungsoption ausgewählt.', 65, 34, 390, 17)
	GUICtrlSetFont(-1, 9, 400, 0, 'Tahoma', 5)
	GUICtrlCreateButton('OK', 263, 96, 88, 26, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_CloseGUI2')
	GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON) ; Focus auf OK-Button
	GUICtrlCreateLabel('                                                                    ', 0, 84, 360, 47) ; das verdeckt leider den OK-Button
	GUICtrlSetBkColor(-1, 0xF0F0F0)
	IsCompiled()
	GUISetState(@SW_SHOW, $InfoGUI2)
	; Hole den OK-Button hervor -> schnell die Mouse darüber fahren lassen...
	$butpos = ControlGetPos('Option fehlt!', '', 'Button1')
	$winpos = MouseGetPos() ; alte Position holen
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button Position
	MouseMove($winpos[0], $winpos[1], 0) ; zurück zur alten Position
EndFunc   ;==>Message1

Func _Erfolgsmeldung($regname)
	GUISetState(@SW_DISABLE, $AnalyseGUI)
	_WinSound() ; Spiele ein System Sound ab (.Wav)
	$winpos = WinGetPos('Analyse und Optimierung') ; Position vom Analyse-GUI holen
	$InfoGUI2 = GUICreate('Hinweis', 408, 133, $winpos[0] + 42, $winpos[1] + 91, 0x94C801C5, BitOR($WS_EX_DLGMODALFRAME, $WS_EX_WINDOWEDGE, $WS_EX_CONTROLPARENT), $AnalyseGUI)
	GUISetBkColor(0xFFFFFF)
	; lösche einige Menü-Punkte, bis auf Verschieben
	$hMenu3 = _GUICtrlMenu_GetSystemMenu($InfoGUI2)
	_GUICtrlMenu_DeleteMenu($hMenu3, 0)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	_GUICtrlMenu_DeleteMenu($hMenu3, 3)
	_GUICtrlMenu_DeleteMenu($hMenu3, 2)
	_GUICtrlMenu_DeleteMenu($hMenu3, 1)
	If @OSVersion = 'WIN_XP' Then
		GUICtrlCreateIcon('shell32.dll', -222, 25, 24, 32, 32) ; Information's-Icon XP
	Else
		GUICtrlCreateIcon('shell32.dll', -278, 25, 24, 32, 32) ; Information's-Icon
	EndIf
	GUICtrlCreateLabel('Der Autostarteintrag "' & $regname & '" wurde erfolgreich wiederhergestellt.', 65, 26, 324, 3 * 17)
	GUICtrlSetFont(-1, 9, 400, 0, 'Tahoma', 5)
	GUICtrlCreateButton('OK', 312, 96, 88, 26, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_CloseGUI2')
	GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON) ; Focus auf OK-Button
	GUICtrlCreateLabel('                                                                    ', 0, 84, 408, 48) ; das verdeckt leider den OK-Button
	GUICtrlSetBkColor(-1, 0xF0F0F0)
	IsCompiled()
	GUISetState(@SW_SHOW, $InfoGUI2)
	; Hole beide Buttons hervor -> schnell die Mouse darüber fahren lassen...
	$winpos = MouseGetPos() ; alte Position holen
	If $mustclick > -1 Then
		$oldpos = MouseGetPos() ; alte Position holen
	EndIf
	$butpos = ControlGetPos('Hinweis', '', 'Button1')
	MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button Position
	If $mustclick > -1 Then
		MouseMove($oldpos[0] + 50, $oldpos[1] + 85, 0) ; zurück zur alten Position
		MouseMove($butpos[0] + 50, $butpos[1] + 40, 0) ; Button Position
	EndIf
	MouseMove($winpos[0], $winpos[1], 0) ; zurück zur alten Position
EndFunc   ;==>_Erfolgsmeldung

Func _End()
	_SavePos() ; aktuelle Fenster-Position speichern, wenn verändert
	GUIDelete($hGUI) ; Haupt-Fenster schließen
	Exit ; und ENDE !!!
EndFunc   ;==>_End

Func _SavePos()
	$winpos = WinGetPos($Title) ; Position holen
	If $X <> $winpos[0] Or $Y <> $winpos[1] Then ; Wenn sich die Position des Haupt-Fensters geändert hat, dann ...
		$X = $winpos[0] ; Neuen horizontalen Wert merken
		$Y = $winpos[1] ; Neuen vertikalen Wert merken
		IniWrite($Ini, 'Position', 'X', $X) ; X-Position in die Inidatei speichern
		IniWrite($Ini, 'Position', 'Y', $Y) ; Y-Position in die Inidatei speichern
	EndIf
EndFunc   ;==>_SavePos

Func _SelectFile()
	_File_Auswahl(@GUI_CtrlId) ; Funktionen vom Button aufgerufen
EndFunc   ;==>_SelectFile

Func _File_Auswahl($nr)
	Local $Filename = FileOpenDialog('Öffnen', "", '(*.*)', 3, '', $hGUI) ; Datei auswählen
	If Not @error Then
		For $i = 0 To 7
			Switch $nr
				Case $selectbutton[$i]
					GUICtrlSetData($spfad[$i], $Filename)
					ContinueLoop
			EndSwitch
		Next
		SetError(0)
	EndIf
EndFunc   ;==>_File_Auswahl

Func _CheckBox_Change()
	$box_ch_num = @GUI_CtrlId - 52 ; Box Wechsel-Nummer
	Switch $box_ch_num
		Case 0
			If $Auto = 1 Then
				$Auto = 0
			ElseIf $Auto = 0 Then
				$Auto = 1
			EndIf
		Case 1
			If $Tray = 1 Then
				$Tray = 0
			ElseIf $Tray = 0 Then
				$Tray = 1
			EndIf
		Case 2
			If $Live = 1 Then
				$Live = 0
			ElseIf $Live = 0 Then
				$Live = 1
			EndIf
		Case 3
			If $Ende = 1 Then
				$Ende = 0
			ElseIf $Ende = 0 Then
				$Ende = 1
				$Endbut = 1 ; Filepath Sperre nicht entfernen
				highes_time() ; höchste Zeit ermitteln
			EndIf
		Case 4
			If $Logo = 1 Then
				$Logo = 0
			ElseIf $Logo = 0 Then
				$Logo = 1
			EndIf
		Case 5
			If $DReg = 1 Then
				$DReg = 0
			ElseIf $DReg = 0 Then
				$DReg = 1
			EndIf
	EndSwitch
EndFunc   ;==>_CheckBox_Change

Func _ResetData()
	Local $hh = 2
	GUICtrlSetData($ListBox, '') ; Infos löschen
	$Zaehler = 0 ; Laufzeit auf 0
	$starten = 0 ; wieder auf Null setzten... nur beim 1. Aufruf des Programms - $starten = 1
	$nr = 0
	$Endbut = 0 ; Filepath Sperre entfernen
	highes_time() ; höchste Zeit ermitteln
	Autostart() ; Autostart prüfen
	; wenn ein Wert für die Start-Zeit nicht vorhanden ist...
	For $j = 0 To 7
		If GUICtrlRead($ptimer[$j]) = "" Then
			MsgBox(48, $Title, "Geben Sie eine ganze Zahl ein.", Default, $hGUI)
			ControlClick($Title, "", "Edit" & $hh) ; ersten falschen Wert auswählen
			ExitLoop
		Else
			$hh += 2
			If GUICtrlRead($ptimer[$j]) <> $oldtime[$j] Then $oldtime[$j] = GUICtrlRead($ptimer[$j]) ; neuen Wert merken
		EndIf
	Next
EndFunc   ;==>_ResetData

Func _SaveData() ; Alle aktuellen Werte in die Ini-Datei eintragen...
	time_check()
	For $i = 0 To 7
		IniWrite($Ini, 'Tag0' & $i + 1, 'File', GUICtrlRead($spfad[$i]))
		IniWrite($Ini, 'Tag0' & $i + 1, 'Time', GUICtrlRead($ptimer[$i]))
		IniWrite($Ini, 'Tag0' & $i + 1, 'Set', BitAND(GUICtrlRead($box[$i]), $GUI_CHECKED))
	Next

	Autostart() ; Autostart prüfen
	IniWrite($Ini, 'OPTION', 'Auto', $Auto)
	IniWrite($Ini, 'OPTION', 'Tray', $Tray)
	IniWrite($Ini, 'OPTION', 'Live', $Live)
	IniWrite($Ini, 'OPTION', 'Exit', $Ende)
	IniWrite($Ini, 'OPTION', 'Logo', $Logo)
	IniWrite($Ini, 'OPTION', 'Dreg', $DReg)

	If $flag4 <> 1 Then _GUICtrlButton_SetState($selectbutton[9]) ; wenn nicht vom Kontextmenü aufgerufen
	For $i = 0 To 100 Step 5
		GUICtrlSetData($progressbar, $i)
		Sleep(1)
	Next
	Sleep(300)
	GUICtrlSetData($progressbar, 0)
	If $flag4 <> 1 Then _GUICtrlButton_SetState($selectbutton[9], 0) ; wenn nicht vom Kontextmenü aufgerufen
	$flag4 = 0
EndFunc   ;==>_SaveData

Func OnMenuClick()
	_Function(@GUI_CtrlId) ; Funktionen vom Kontextmenü aufgerufen
EndFunc   ;==>OnMenuClick

Func _Function($auswah) ; vom Kontextmenü
	Switch $auswah
		Case $textitem[1]
			_ResetData()
		Case $textitem[2]
			$flag4 = 1
			_SaveData()
		Case $textitem[3]
			_End()
	EndSwitch
EndFunc   ;==>_Function

Func IsCompiled()
	If @Compiled Then
		GUISetIcon(@ScriptFullPath & '\AutoStarter.exe') ; Icon für GUI-Fenster
		TraySetIcon(@ScriptFullPath & '\AutoStarter.exe') ; Icon für Tray Symbol
	Else
		GUISetIcon($Icon)
		TraySetIcon($Icon)
	EndIf
EndFunc   ;==>IsCompiled

Func _Close_AnalyseGUI()
	AdlibUnRegister('_Auswahl') ; keine Auswahl mehr
	GUIDelete($AnalyseGUI)
	WinActivate($Title)
	GUISetState(@SW_ENABLE, $hGUI)
	$active_select = 0
	$rr = 0
	$wiederh = 0
	$Erfolg = 0
	$Erfolg2 = 1
EndFunc   ;==>_Close_AnalyseGUI

Func _Close_Info() ; InfoGUI schließen
	GUIDelete($InfoGUI)
	GUISetState(@SW_ENABLE, $hGUI) ; Aktiviere Haupt-GUI wieder
	WinActivate($Title) ; Haupt-GUI in den Vordergrund holen
EndFunc   ;==>_Close_Info

Func _CloseGUI2()
	WinActivate('Analyse und Optimierung')
	GUIDelete($InfoGUI2)
	If $message = 1 Then ; wenn Message4 ist geschlossen
		$message = 0
		Message1()	; Nichts zum Optimieren ausgewählt
	EndIf
	GUISetState(@SW_ENABLE, $AnalyseGUI)
	$click_now = 0
EndFunc   ;==>_CloseGUI2

Func _Lese_Registry()
	Local $daten, $regname, $regpfad
	If $wiederh = 1 Then
		GUICtrlCreateLabel(' in der Registry dieses Computers', 52, 11, 370, 13)
		GUICtrlSetColor(-1, 0x960083)
		GUICtrlSetState($selectbutton[15], $GUI_ENABLE) ; Wiederherstellung
		GUICtrlDelete($selectbutton[17])
		$selectbutton[17] = GUICtrlCreateButton('Löschen', 138, 236, 114, 23, Default, $SS_BLACKRECT)
		GUICtrlSetOnEvent(-1, '_Loeschen')
	EndIf
	$rr = 0
	$nummer = 0
	_GUICtrlListView_DeleteAllItems($ListBox2) ; Alle Einträge in ListView löschen
	For $i = 1 To 1000
		$regname = RegEnumVal($REG_RUN, $i)
		If @error <> 0 Then ExitLoop
		$data[$rr] = $regname ; Name merken
		ReDim $data[UBound($data) + 1] ; Verändert die Größe des bestehenden Array
		$rr += 1
		$regpfad = RegRead($REG_RUN, $regname)
		For $jj = 1 To StringLen($regpfad)
			If StringMid($regpfad, $jj, 1) = " " Then
				If StringMid($regpfad, $jj, 2) = " -" Then ReDim $data[UBound($data) + 1]
			EndIf
		Next
		If @error <> 0 Then ExitLoop
		$daten = GUICtrlCreateListViewItem($regname, $ListBox2) ; Namen eines Wertes aus der Registry zeigen
		If $regname = 'AutoStarter_TVF' Then
			GUICtrlSetData($daten, "|nein")
		Else
			GUICtrlSetData($daten, "|ja")
		EndIf
		GUICtrlSetData($daten, "||" & $regpfad) ; Wert aus der Registry zeigen
	Next
	If @OSArch = 'X64' Or @OSArch = 'IA64' Then ; Wenn CPU 64Bit
		For $i = 1 To 1000
			$regname = RegEnumVal($REG_RUN2, $i)
			If @error <> 0 Then ExitLoop
			ReDim $data[UBound($data) + 1] ; Verändert die Größe des bestehenden Array
			$data[$rr] = $regname ; Name merken
			ReDim $data[UBound($data) + 1]
			$rr += 1
			$regpfad = RegRead($REG_RUN2, $regname)
			If @error <> 0 Then ExitLoop
			For $jj = 1 To StringLen($regpfad)
				If StringMid($regpfad, $jj, 1) = " " Then
					If StringMid($regpfad, $jj, 2) = " -" Then ReDim $data[UBound($data) + 1]
				EndIf
			Next
			$daten = GUICtrlCreateListViewItem($regname, $ListBox2) ; Namen eines Wertes aus der Registry zeigen
			GUICtrlSetData($daten, "|ja")
			GUICtrlSetData($daten, "||" & $regpfad) ; Wert aus der Registry zeigen
		Next
	EndIf
	If $rr <> 0 Then
		GUICtrlCreateLabel($nummer, 466, 11, 60, 13)
		GUICtrlSetColor(-1, 0x0000FF)
		GUICtrlSetState($selectbutton[14], $GUI_DISABLE) ; Kein System Auslesen
		GUICtrlSetState($selectbutton[16], $GUI_ENABLE) ; Optimieren
		GUICtrlSetState($selectbutton[17], $GUI_ENABLE) ; Löschen
		If UBound($OP) < $rr Then
			ReDim $OP[$rr] ; Verändert die Größe des bestehenden Array
		EndIf
		For $i = 0 To $rr - 1
			$OP[$i] = 0
		Next
	Else
		GUICtrlSetState($selectbutton[14], $GUI_DISABLE) ; Kein System Auslesen
		GUICtrlSetState($selectbutton[16], $GUI_ENABLE) ; Optimieren
		GUICtrlSetState($selectbutton[17], $GUI_ENABLE) ; Löschen
	EndIf
EndFunc   ;==>_Lese_Registry

Func _AddRegs()
	Local $daten, $line
	$nummer = 0
	$rr = 0
	$wiederh = 1
	GUICtrlSetState($selectbutton[15], $GUI_DISABLE) ; keine Wiederherstellung
	GUICtrlSetState($selectbutton[16], $GUI_DISABLE) ; kein Optimieren
	GUICtrlSetState($selectbutton[14], $GUI_ENABLE) ; System Auslesen
	GUICtrlDelete($selectbutton[17])
	$selectbutton[17] = GUICtrlCreateButton('Wiederherstellen', 138, 236, 114, 23, Default, $SS_BLACKRECT)
	GUICtrlSetOnEvent(-1, '_RegRestrore')
	GUICtrlCreateLabel(' die aus der Registry dieses Computers gelöscht wurden.', 52, 11, 370, 13)
	GUICtrlSetColor(-1, 0x960083)
	GUICtrlCreateLabel($nummer & '   ', 466, 11, 60, 13)
	GUICtrlSetColor(-1, 0x0000FF)
	_GUICtrlListView_DeleteAllItems($ListBox2) ; Alle Einträge in ListView löschen
	$wFile = FileOpen(@ScriptDir & '\Remove.ini', 0)
	; Prüfen, ob Datei im Schreibmodus geöffnet ist
	If $wFile = -1 Then
		MsgBox(64, 'Fehler', 'Die Datei: ' & @ScriptDir & '\Remove.ini' & @CR & 'konnte nicht geöffnet werden.', 0, $AnalyseGUI)
		Exit
	EndIf
	$line = FileReadLine($wFile) ; die ersten 2 Zeilen auslassen
	$line = FileReadLine($wFile)
	While @error = 0
		$line = FileReadLine($wFile)
		If @error = 0 Then
			If $line = 'HKEY_CURRENT_USER' Or $line = 'HKEY_LOCAL_MACHINE' Then
				;	ConsoleWrite("regkey=" & $line & @CR)
				lese_data($line)
			EndIf
		EndIf
	WEnd
	FileClose($wFile)
	If $rr <> 0 Then
		ReDim $OP[$rr + 1]
		For $i = 0 To $rr - 1
			$OP[$i] = 0
		Next
	EndIf
	$rr += 1
	$daten = GUICtrlCreateListViewItem('------', $ListBox2) ; Namen eines Wertes aus der Registry zeigen
	GUICtrlSetData($daten, "|-----")
	GUICtrlSetData($daten, "||---------") ; Wert aus der Registry zeigen
EndFunc   ;==>_AddRegs

Func _DeleteRegs()
	Local $daten
	If Not FileExists(@ScriptDir & '\Remove.ini') Then
		SaveFile()
		FileWriteLine($wFile, '//Registry Removelog von AutoStarter//' & @CRLF & @CRLF)
	Else
		SaveFile()
	EndIf
	For $i = 0 To $rr - 1
		If $OP[$i] = 1 Then
			RegEnumVal($REG_RUN, $i + 1)
			If @error = -1 Then
				FileWriteLine($wFile, 'HKEY_LOCAL_MACHINE' & @CRLF)
				RegDelete($REG_RUN2, $data[$i])
			Else
				FileWriteLine($wFile, 'HKEY_CURRENT_USER' & @CRLF)
				RegDelete($REG_RUN, $data[$i])
			EndIf
			$daten = _GUICtrlListView_GetItemText($ListBox2, $i, 2)
			FileWriteLine($wFile, 'Name: ' & $data[$i] & @CRLF)
			FileWriteLine($wFile, 'Wert: ' & $daten & @CRLF)
			FileWriteLine($wFile, @CRLF)
			$OP[$i] = 0
			$nummer -= 1
		EndIf
	Next
	FileClose($wFile)
	GUICtrlCreateLabel($nummer & '   ', 466, 11, 60, 13)
	GUICtrlSetColor(-1, 0x0000FF)
	GUICtrlSetState($selectbutton[14], $GUI_ENABLE) ; System Auslesen
	GUICtrlSetState($selectbutton[15], $GUI_ENABLE) ; Wiederherstellung
	GUICtrlSetState($selectbutton[16], $GUI_DISABLE) ; kein Optimieren
	GUICtrlSetState($selectbutton[17], $GUI_DISABLE) ; ; kein Löschen
	_GUICtrlListView_DeleteAllItems($ListBox2) ; Alle Einträge in ListView löschen
	_CloseGUI2()
EndFunc   ;==>_DeleteRegs

Func _Optimieren()
	Local $lItem, $regpfad, $oldname, $newtime, $oldtime
	If BitAND(GUICtrlRead($option[6]), $GUI_CHECKED) And $nummer > 0 Then
		For $i = 0 To $rr - 1
			If $OP[$i] = 1 Then
				$lItem = _GUICtrlListView_GetItem($ListBox2, $i, 2) ; hole neuen Datei-Pfad aus der 3. Spalte
				$regpfad = $lItem[3]
				For $jj = 0 To 7
					$oldname = GUICtrlRead($spfad[$jj]) ; hole alten Datei-Pfad (Haupt-Fenster) Nummer 1-8
					If $oldname = $regpfad Then ; wenn der Pfad schon vorhanden ist nichts Eintragen (also raus aus der Schleife)
						$Erfolg2 = 0
						ExitLoop
					ElseIf $oldname = "NamePfad" Or $oldname = "" Then ; wenn Pfadname den Namen 'NamePfad' enthält oder Leer ist, dann
						GUICtrlSetData($spfad[$jj], $regpfad) ; neuen Pfadnamen, der voher aus der Registry ausgelesen wurde Eintragen...
						$newtime = 0
						For $j = 0 To 7
							$oldtime = GUICtrlRead($ptimer[$j]) ; alte Zeit holen
							If $oldtime > $newtime Then $newtime = $oldtime ; vergleiche alte mit neuer Zeit
						Next
						$newtime += 3 ; neue Zeit plus 3 Sekunden
						GUICtrlSetData($ptimer[$jj], $newtime) ; neue Zeit eintragen und Schleife beenden...
						$Erfolg2 = 1
						ExitLoop
					EndIf
				Next
			EndIf
		Next
		Message2()
	Else
		If BitAND(GUICtrlRead($option[6]), $GUI_UNCHECKED) Then
			Message4()	; Keine Optimierungsoption eingeschaltet
			$message = 1
		Else
			Message1() ; Nichts zum Optimieren ausgewählt
		EndIf
	EndIf
EndFunc   ;==>_Optimieren

Func GoToWeb() ; Web-Seite aufrufen
	Run(@ComSpec & " /c start http://www.Autoit.de/", "", @SW_HIDE) ; Cool !!!
EndFunc   ;==>GoToWeb

Func highes_time()
	Local $zz
	$alltime = 0
	For $i = 0 To 7
		$zz = GUICtrlRead($ptimer[$i]) ; Zeiten ermitteln
		If $zz > $alltime Then $alltime = $zz + 1 ; höchster Wert merken + 1
		$running[$i] = 0
		If $Endbut = 0 Then ; Filepath und Timer-Sperre entfernen
			GUICtrlSetState($spfad[$i], $GUI_ENABLE)
			GUICtrlSetState($ptimer[$i], $GUI_ENABLE)
		EndIf
	Next
EndFunc   ;==>highes_time

Func Autostart()
	If $Auto = 1 And $flag = 0 Then
		If @Compiled Then
			;	FileCreateShortcut(@ScriptFullPath, @StartupDir & '\' & @ScriptName)
			RegWrite($REG_RUN, "AutoStarter_TVF", "REG_SZ", @ScriptFullPath)
		Else
			;	FileCreateShortcut($Au3Path & '\AutoIt3.exe', @StartupDir & '\' & @ScriptName & '.lnk', $Au3Path, @ScriptFullPath) ; Verknüpfung im Autostart erstellen
			RegWrite($REG_RUN, "AutoStarter_TVF", "REG_SZ", $Au3Path & '\AutoIt3.exe ' & @ScriptFullPath)
		EndIf
		MsgBox(64 + 262144, 'Hinweis', 'Der Autostarteintrag wurde erfolgreich geschrieben. Bitte beachten Sie, dass sich die AutoStarter.exe in C:/... befinden sollte, um erfolgreich gestartet zu werden (Windows Vista/7).', -1, $hGUI)
		$flag = 1
	Else
		If $flag = 1 And BitAND(GUICtrlRead($option[0]), $GUI_UNCHECKED) Then
			If RegDelete($REG_RUN, "AutoStarter_TVF") = 1 Then
				;	FileDelete(@StartupDir & '\' & @ScriptName & '.lnk') ; Verknüpfung im Autostart löschen
				MsgBox(64 + 262144, 'Hinweis', 'Der Autostarteintrag wurde erfolgreich gelöscht.', -1, $hGUI)
			EndIf
			$flag = 0
		EndIf
	EndIf
EndFunc   ;==>Autostart

Func time_check()
	Local $hh = 2 ; Zähler für ControlClick
	For $j = 0 To 7
		If GUICtrlRead($ptimer[$j]) <> $oldtime[$j] Then
			If GUICtrlRead($ptimer[$j]) = "" Then
				MsgBox(48, $Title, "Geben Sie eine ganze Zahl ein.", Default, $hGUI)
				GUICtrlSetData($ptimer[$j], $oldtime[$j]) ; mit altem Wert füllen
				If GUICtrlRead($ptimer[$j]) <> $oldtime[$j] Then ; neuen Wert mit altem Wert vergleichen
					$oldtime[$j] = GUICtrlRead($ptimer[$j]) ; neuem Wert merken
				Else
					ExitLoop ; Schleife verlassen und Rest mit alten Werten füllen
				EndIf
			EndIf
		EndIf
		$hh += 2
	Next
	; alte Werte wieder Zeigen
	For $m = $j To 7
		GUICtrlSetData($ptimer[$m], $oldtime[$m])
	Next
	; aktuelle Werte merken
	For $i = 0 To 7
		$oldtime[$i] = GUICtrlRead($ptimer[$i])
	Next
	ControlClick($Title, "", "Edit" & $hh) ; ersten falschen Wert auswählen
EndFunc   ;==>time_check

Func _Auswahl()
	Local $altewahl
	If $altewahl < 0 Then $altewahl = 0
	$altewahl = $nummer
	If $nummer < 0 Then $nummer = 0
	For $i = 0 To $rr - 1
		If _GUICtrlListView_GetItemChecked($ListBox2, $i) = 1 And $OP[$i] = 0 Then
			$nummer += 1
			$OP[$i] = 1
		Else
			If _GUICtrlListView_GetItemChecked($ListBox2, $i) = 0 And $OP[$i] = 1 Then
				$nummer -= 1
				$OP[$i] = 0
			EndIf
		EndIf
	Next
	If $nummer < 0 Then $nummer = 0
	If $nummer <> $altewahl Then
		GUICtrlCreateLabel($nummer & '   ', 466, 11, 60, 13)
		GUICtrlSetColor(-1, 0x0000FF)
	EndIf
EndFunc   ;==>_Auswahl

Func _RegRestrore()
	Local $lItem, $reg, $regname, $regpfad
	$Erfolg = 0
	If $nummer > 0 Then
		For $i = 0 To $rr - 1
			If $OP[$i] = 1 Then
				$lItem = _GUICtrlListView_GetItem($ListBox2, $i, 1)
				$reg = $lItem[3]
				$lItem = _GUICtrlListView_GetItem($ListBox2, $i, 0)
				$regname = $lItem[3]
				$lItem = _GUICtrlListView_GetItem($ListBox2, $i, 2)
				$regpfad = $lItem[3]
				If $regname = '------' Then ; Ende erkannt
					ExitLoop ; Raus aus der Schleife
				EndIf
				If $reg = 'HKEY_LOCAL_MACHINE' Then
					If RegWrite($REG_RUN2, $regname, "REG_SZ", $regpfad) = 1 Then
						$Erfolg += 1
					EndIf
				Else
					If RegWrite($REG_RUN, $regname, "REG_SZ", $regpfad) = 1 Then
						$Erfolg += 1
					EndIf
				EndIf
				If $Erfolg = 0 Then
					MsgBox(48 + 256, 'Rechte fehlen!', 'Bei der Wiederherstellung des Autostarteintrages ist ein Fehler' & @CR & 'aufgetreten.' & _
							' Der Eintrag ' & '"' & $regname & '"' & ' konnte nicht geschrieben werden, da AutoStater nicht mit Adminrechten' & _
							' ausgeführt wird.', 0, $AnalyseGUI)
				EndIf
			EndIf
		Next
	EndIf
	If $Erfolg > 0 Then $nr = 0
	GUICtrlSetState($selectbutton[15], $GUI_ENABLE) ; Wiederherstellung
EndFunc   ;==>_RegRestrore

Func lese_data($reg)
	Local $daten, $result, $regname, $regpfad
	SetError(0)
	$result = FileReadLine($wFile)
	If @error = 0 Then
		$regname = StringMid($result, 7, StringLen($result))
	EndIf
	$result = FileReadLine($wFile)
	If @error = 0 Then
		$regpfad = StringMid($result, 7, StringLen($result))
		; Zeichen "  am Anfang und Ende entfernen
		If StringLeft($regpfad, 1) = '"' Then
			If StringRight($regpfad, 1) = '"' Then
				$regpfad = StringMid($regpfad, 2, StringLen($regpfad) - 2)
			EndIf
		EndIf
		$daten = GUICtrlCreateListViewItem($regname, $ListBox2) ; Namen eines Wertes aus der Registry zeigen
		GUICtrlSetData($daten, "|" & $reg)
		GUICtrlSetData($daten, "||" & $regpfad) ; Wert aus der Registry zeigen
		$rr += 1
		If StringLen($regname) > 256 Then
			If $reg = 'HKEY_CURRENT_USER' Then
				$reg = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'
			Else
				If $reg = 'HKEY_LOCAL_MACHINE' Then $reg = 'HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run'
			EndIf
			MsgBox(64, 'Fehler', 'Es wurde ein Eintrag in der Registry gefunden, der eine Länge von mehr als 256 Zeichen aufweist.' & _
					' Dieser kann weder von MSConfig noch von AutoStarter verarbeitet werden.' & _
					' Der Eintrag ist unter: ' & $reg & '\mit dem Namen: ' & $regname, 0, $AnalyseGUI)
			_GUICtrlListView_DeleteItem($ListBox2, $rr - 1)
			$rr -= 1
		EndIf
	EndIf
EndFunc   ;==>lese_data

Func _Optimize_RegDelete()
	Local $daten, $lItem, $reg, $regname
	If $Erfolg2 = 1 And $nummer > 0 Then
		If Not FileExists(@ScriptDir & '\Remove.ini') Then
			SaveFile()
			FileWriteLine($wFile, '//Registry Removelog von AutoStarter//' & @CRLF & @CRLF)
		Else
			SaveFile()
		EndIf
		For $i = 0 To $rr - 1
			If $OP[$i] = 1 Then
				$lItem = _GUICtrlListView_GetItem($ListBox2, $i, 0)
				$regname = $lItem[3]
				For $jj = 1 To 1000
					$reg = RegEnumVal($REG_RUN, $jj)
					If @error <> 0 Then ExitLoop
					If $reg = $regname Then
						FileWriteLine($wFile, 'HKEY_CURRENT_USER' & @CRLF)
						RegDelete($REG_RUN, $reg)
					EndIf
				Next
				If @OSArch = 'X64' Or @OSArch = 'IA64' Then
					For $jj = 1 To 1000
						$reg = RegEnumVal($REG_RUN2, $jj)
						If @error <> 0 Then ExitLoop
						If $reg = $regname Then
							FileWriteLine($wFile, 'HKEY_LOCAL_MACHINE' & @CRLF)
							RegDelete($REG_RUN2, $reg)
						EndIf
					Next
				EndIf
				$daten = _GUICtrlListView_GetItemText($ListBox2, $i, 2)
				FileWriteLine($wFile, 'Name: ' & $data[$i] & @CRLF)
				FileWriteLine($wFile, 'Wert: ' & $daten & @CRLF)
				FileWriteLine($wFile, @CRLF)
				$OP[$i] = 0
				$nummer -= 1
			EndIf
		Next
		FileClose($wFile)
	EndIf
	_Close_AnalyseGUI()
EndFunc   ;==>_Optimize_RegDelete

Func SaveFile()
	$wFile = FileOpen(@ScriptDir & '\Remove.ini', 1)
	; Prüfen, ob Datei im Schreibmodus geöffnet ist
	If $wFile = -1 Then
		MsgBox(64, 'Fehler', 'Die Datei: ' & @ScriptDir & '\Remove.ini' & @CR & 'konnte nicht geöffnet werden.', 0, $AnalyseGUI)
		Exit
	EndIf
EndFunc   ;==>SaveFile

Func _WinSound()
	If StringInStr('Win_Vista Win_2003 Win_2008 Win_7 Win_8', @OSVersion) Then
		SoundSetWaveVolume(50)
		SoundPlay(@WindowsDir & "\media\Windows Error.wav")
	Else
		SoundSetWaveVolume(50)
		SoundPlay(@WindowsDir & "\media\Windows XP-Hinweis.wav")
	EndIf
EndFunc   ;==>_WinSound

Func _NoHide()
	GUISetState(@SW_SHOW, $hGUI)
	WinActivate($Title, '') ; Programm aktivieren (in den Vordergrund holen)
EndFunc   ;==>_NoHide

Func _Hide()
	GUISetState(@SW_HIDE, $hGUI) ; Programm-Fenster verstecken
EndFunc   ;==>_Hide

Func _Timer()
	If @SEC <> $T Then ; Wenn Macro @SEC ungleich Variabel $T, dann ist eine Sekunde vergangen
		$Zaehler += 1
		$T = @SEC
		GUICtrlSetData($zeit, $Zaehler) ; neue Laufzeit anzeigen
	EndIf
EndFunc   ;==>_Timer

Func _Checkfiles() ; Vergleiche Timer,Haken und Programme sind schon gestartet ?
	Local $File, $PID, $TT, $w
	For $tz = 0 To 7
		$TT = GUICtrlRead($ptimer[$tz])
		If $Zaehler = $TT Then
			If BitAND(GUICtrlRead($box[$tz]), $GUI_CHECKED) And $running[$tz] = 0 Then
				$running[$tz] = 1
				$Filename = GUICtrlRead($spfad[$tz])
				If $Filename <> "NamePfad" And $Filename <> "" Then
					$w = 1
					While 1
						$File = StringInStr($Filename, "\", 0, $w)
						If $File = 0 Then ExitLoop
						$w += 1
					WEnd
					; suche und schneide aus der Variable $Filename (irgendwas.EXE) raus
					$File = StringMid($Filename, 1 + StringInStr($Filename, "\", 0, $w - 1), StringLen($Filename))
					$Check = StringUpper(StringInStr(StringMid($Filename, 1, StringLen($Filename)), '.EXE'))
					If $Check > 0 Then
						$File = StringMid($Filename, 1, $Check + 3) ; bis .exe schneiden
						$Check2 = StringInStr($File, '\', 0, -1) ; rückwärts bis \ suchen
						$File = StringMid($File, $Check2 + 1, $Check + 3) ; irgendwas.EXE aus schneiden
					EndIf
					If $DReg = 1 Or BitAND(GUICtrlRead($option[5]), $GUI_CHECKED) Then
						$PID = ProcessExists($File)	; läuft irgendwas.EXE schon ?
						If $PID = 0 Then	; wenn nein
							_RunFilename($Filename, $tz)
						Else ; wenn ja
							GUICtrlSetState($spfad[$tz], $GUI_DISABLE)
							GUICtrlSetState($ptimer[$tz], $GUI_DISABLE)
							GUICtrlSetData($ListBox, 'Programm ' & $tz + 1 & ' läuft noch.')
						EndIf
					Else
						_RunFilename($Filename, $tz) ; wenn option[5] aus geschaltet oder $Dreg = 0 ist
					EndIf
				EndIf
			EndIf
		EndIf
	Next
EndFunc   ;==>_Checkfiles

Func _RunFilename($File, $nr) ; Starte Programme mit oder ohne Parameter
	Local $exe
	$param = ''
	$Fname = ''
	_Check_Fileparameter($File)
	$exe = $Check
	If $exe = ".EXE" Then
;		ConsoleWrite("$File=" & $File & @CR)	; nur zur Prüfung
		$Check = Run(Chr(34) & $File & Chr(34)) ; Programm starten...
	Else
;		ConsoleWrite("$exe=" & $exe & ' ' & $param & @CR) ; nur zur Prüfung
		$Check = Run(Chr(34) & $exe & Chr(34) & ' ' & $param) ; Programm starten mit parametern...
	EndIf
	If $Check = 0 Then
		GUICtrlSetState($spfad[$nr], $GUI_ENABLE)
		GUICtrlSetState($ptimer[$nr], $GUI_ENABLE)
		GUICtrlSetData($ListBox, 'Programm ' & $nr + 1 & ' nicht gefunden!')
		; 3 mal blinken lassen
		For $i = 0 To 2
			GUICtrlSetColor($spfad[$nr], 0xFF0000)
			Sleep(400)
			GUICtrlSetColor($spfad[$nr], 0x000000)
			Sleep(400)
		Next
	Else
		GUICtrlSetState($spfad[$nr], $GUI_DISABLE)
		GUICtrlSetState($ptimer[$nr], $GUI_DISABLE)
		GUICtrlSetData($ListBox, 'Programm ' & $nr + 1 & ' gestartet.')
	EndIf
EndFunc   ;==>_RunFilename

Func _Check_Fileparameter($Fname)
	Local $str_pos, $str_pos2
	$Check = StringUpper(StringRight($Fname, 4)) ; .EXE ?
	If $Check = ".EXE" Then Return
	If StringLeft($Fname, 1) = '"' Then
		$str_pos = StringInStr(StringMid($Fname, 2, StringLen($Fname)), '"')
		$str_pos2 = StringInStr(StringMid($Fname, 2, StringLen($Fname)), ' ')
		$param = StringMid($Fname, $str_pos2 + 2, StringLen($Fname))
		$Fname = StringMid($Fname, 2, $str_pos - 1)
		$Check = $Fname
	Else
		$str_pos2 = StringInStr(StringMid($Fname, 2, StringLen($Fname)), ' ')
		$param = StringMid($Fname, $str_pos2 + 2, StringLen($Fname))
		$Fname = StringMid($Fname, 1, $str_pos2)
		$Check = $Fname
	EndIf
EndFunc   ;==>_Check_Fileparameter

Func Melden()
	$mustclick = $Erfolg - 1
	If $mustclick > -1 Then
		If $OP[$nr] = 1 Then
			$Lname = _GUICtrlListView_GetItem($ListBox2, $nr, 0)
			$click_now = 1
			_Erfolgsmeldung($Lname[3])
			$Erfolg -= 1
			$nr += 1
		Else
			$nr += 1
		EndIf
	Else
		$click_now = 1
	EndIf
EndFunc   ;==>Melden

Func WM_SYSCOMMAND($hGUI, $Msg, $wParam, $lParam)
	#forceref $hGUI, $Msg, $lParam
	Switch BitAND($wParam, 0xFFFF)
		Case $idAbout
			ShowInfo() ; Zeige ShowInfo-GUI
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SYSCOMMAND

; Fremd-Code !
Func RegRead64($sKeyname, $sValue)
	Local $res = RegRead($sKeyname, $sValue)
	If @error And @AutoItX64 Then
		$sKeyname = StringReplace($sKeyname, "HKEY_LOCAL_MACHINE", "HKLM")
		$sKeyname = StringReplace($sKeyname, "HKLM\SOFTWARE\", "HKLM\SOFTWARE\Wow6432Node\")
		$res = RegRead($sKeyname, $sValue)
		If @error Then
			SetError(1)
			Return ""
		EndIf
	EndIf
	SetError(0)
	Return $res
EndFunc   ;==>RegRead64

;======================================================================================
; Function Name:        Load_BMP_From_Mem
; Description:            Loads an image which is saved as a binary string and converts it to a bitmap or hbitmap
;
; Parameters:            $bImage:        the binary string which contains any valid image which is supported by GDI+
; Optional:                  $hHBITMAP:        if false a bitmap will be created, if true a hbitmap will be created
;
; Remark:                    hbitmap format is used generally for GUI internal images, $bitmap is more a GDI+ image format
;
; Requirement(s):        GDIPlus.au3, Memory.au3
; Return Value(s):    Success: handle to bitmap or hbitmap, Error: 0
; Error codes:            1: $bImage is not a binary string
;
; Author(s):                UEZ
; Additional Code:    thanks to progandy for the MemGlobalAlloc and tVARIANT lines
; Version:                    v0.95 Build 2011-06-14 Beta
;=======================================================================================
Func Load_BMP_From_Mem($bImage, $hHBITMAP = False)
	If Not IsBinary($bImage) Then Return SetError(1, 0, 0)
	Local $declared = True
	If Not $ghGDIPDll Then
		_GDIPlus_Startup()
		$declared = False
	EndIf
	Local Const $memBitmap = Binary($bImage) ;load image  saved in variable (memory) and convert it to binary
	Local Const $len = BinaryLen($memBitmap) ;get length of image
	Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory  ($GMEM_MOVEABLE = 0x0002)
	Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer
	Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct
	DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data
	_MemGlobalUnlock($hData) ;decrements the lock count  associated with a memory object that was allocated with GMEM_MOVEABLE
	Local $hStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0)
	$hStream = $hStream[3]
	Local $hBitmap = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface
	$hBitmap = $hBitmap[2]
	Local Const $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
	DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _
			"dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak
	$tMem = 0
	If $hHBITMAP Then
		Local Const $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
		_GDIPlus_BitmapDispose($hBitmap)
		If Not $declared Then _GDIPlus_Shutdown()
		Return $hHBmp
	EndIf
	If Not $declared Then _GDIPlus_Shutdown()
	Return $hBitmap
EndFunc   ;==>Load_BMP_From_Mem

Func _Base64Decode($input_string)
	Local $struct = DllStructCreate("int")
	Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
	If @error Or Not $a_Call[0] Then Return SetError(1, 0, "")
	Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]")
	$a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0)
	If @error Or Not $a_Call[0] Then Return SetError(2, 0, "")
	Return DllStructGetData($a, 1)
EndFunc   ;==>_Base64Decode

Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize = 0x800000)
	Local $tBuffer, $Ret
	$tOutput = 0
	$tBuffer = DllStructCreate('byte[' & $iBufferSize & ']')
	If @error Then Return SetError(1, 0, 0)
	$Ret = DllCall('ntdll.dll', 'uint', 'RtlDecompressBuffer', 'ushort', 0x0002, 'ptr', DllStructGetPtr($tBuffer), 'ulong', $iBufferSize, 'ptr', DllStructGetPtr($tInput), 'ulong', DllStructGetSize($tInput), 'ulong*', 0)
	If @error Then Return SetError(2, 0, 0)
	If $Ret[0] Then Return SetError(3, $Ret[0], 0)
	$tOutput = DllStructCreate('byte[' & $Ret[6] & ']')
	If Not _WinAPI_MoveMemory(DllStructGetPtr($tOutput), DllStructGetPtr($tBuffer), $Ret[6]) Then
		$tOutput = 0
		Return SetError(4, 0, 0)
	EndIf
	Return $Ret[6]
EndFunc   ;==>_WinAPI_LZNTDecompress

Func _WinAPI_MoveMemory($pDestination, $pSource, $iLenght)
	DllCall('ntdll.dll', 'none', 'RtlMoveMemory', 'ptr', $pDestination, 'ptr', $pSource, 'ulong_ptr', $iLenght)
	If @error Then Return SetError(5, 0, 0)
	Return 1
EndFunc   ;==>_WinAPI_MoveMemory