Hallo, und Tach auch !
Ich habe mal aus langeweile aus dieser Batch-Datei (ein Selbstmodifizierenden Windows-Starter) alles mit Autoit übersetzt.
Spoiler anzeigen
starts=0
datum="18.05.2010"
backup=1
'Beispiel für einen selbstmodifizierenden Windows-Starter
'Die ersten drei Zeilen werden jeweils neu geschrieben
'Der Rest ist konstant
'Die nachfolgenden Programme und Pfadnamen dieses Scripts sind anzupassen
'Das angepasste Script ist in den Autostart-Ordner zu kopieren oder im Run-Schlüssel der Registry einzutragen
Set MyShell = Wscript.CreateObject("Wscript.Shell")
If datevalue(datum) <> date() then 'neuer Tag
starts = 0
backup=backup - 1
if backup=0 then
backup=6
x=MsgBox ("Soll die Festplatte Defragmentiert werden ?" & chr(13) & "Wird Automatisch gestartet und beendet...",3)
if x=6 then
MyShell.Run("c:\Programme\AutoDefrag.exe"),2,true
'Die Batch startet nur nach eine Woche.
end if
end if
End if 'neuer Tag - Ende
select case starts 'Windows wurde heute bereits gestartet
case 2 '3 mal
x=MsgBox ("Du hast schon 3mal den Rechner gestartet. Soll ich den CCleaner starten ?" & chr(13) & "Wird Automatisch gestartet und beendet...",3)
if x=6 then
MyShell.Run("c:\Programme\AutoCCleaner.exe"),2,true
end if
case 4 '5 mal
starts = 0
x=MsgBox ("Du hast schon 5mal den Rechner gestartet. Soll ich den CCleaner starten ?" & chr(13) & "Wird Automatisch gestartet und beendet...",3)
if x=6 then
MyShell.Run("c:\Programme\AutoCCleaner.exe"),2,true
end if
case else
End Select
MyScriptName = WScript.ScriptFullName
Set MyFiles = CreateObject("Scripting.FileSystemObject")
Set MyText = MyFiles.OpenTextFile(MyScriptName, 1)
MyText.SkipLine
MyText.Skipline
MyText.Skipline
MyRest=MyText.readall 'Lesen dieser Scriptdatei ohne die drei ersten Zeilen
MyText.Close
Set MyText = MyFiles.CreateTextFile(MyScriptName, True)
MyText.Write "starts=" & starts + 1 & chr(13) & chr(10)
MyText.Write "datum=" & chr(34) & date() &chr(34) & chr(13) & chr(10)
MyText.Write "backup=" & backup & chr(13) & chr(10)
'Schreiben der Anfangszeilen abgeschlossen
MyText.Write MyRest 'Schreiben des konstanten Rests
MyText.Close
Und das ist dabei rausgekommen....
Spoiler anzeigen
$starts = 0
$tag = 1
$datum = "18.05.2010"
; Beispiel für einen selbstmodifizierenden Windows-Starter
; Die ersten drei Zeilen werden jeweils neu geschrieben
; Der Rest ist konstant
; Die nachfolgenden Programme und Pfadnamen dieses Scripts sind anzupassen
; Das angepasste Script ist in den Autostart-Ordner zu kopieren oder im Run-Schlüssel der Registry einzutragen
; Autoit muss Installiert sein und das Script darf nicht compiliert werden (Wichtig!)
; Programmiet mit: Autoit 3.3.6.1 by tv_freeze (www.Autoit.de)
Global $rest
$Check = _CheckDate($Datum)
If $Check = 2 Then ; neuer Tag
$starts = 0
$tag = $tag - 1
If $tag = 0 Then ; Woche um
$tag = 6
$msg=MsgBox(32+4,"Festplatte Defragmentieren ?", "Es wird empfohlen Ihre Festplatte zu Defragmentieren." _
& @CRLF & "Diese Frage bekommen Sie immer einmal die Woche gestellt...")
If $msg=6 Then
Run(@ComSpec & " /c " & 'C:\Programme\Defraggler\Defraggler.exe', "", @SW_HIDE)
While Not ProcessExists("Defraggler.exe")
Sleep(200)
WEnd
Sleep(200)
ControlClick("Piriform Defraggler", "", "[ID:1002]")
Sleep(200)
While Not WinExists("Piriform Defraggler", "Dateien...")
Sleep(200)
WEnd
Sleep(200)
ControlClick("Piriform Defraggler", "", "[ID:1005]")
EndIf
EndIf
EndIf
Select
Case $starts = 2 ; Schon 3 mal gestartet
Run(@ComSpec & " /c " & 'C:\Programme\Defraggler\Defraggler.exe', "", @SW_HIDE)
Case $starts = 4 ; schon 5 mal gestartet
$starts = 0
Run(@ComSpec & " /c " & 'C:\totalcmd\totalcmd.exe', "", @SW_HIDE)
EndSelect
$file = FileOpen(@ScriptFullPath, 0)
If $file = -1 Then
Exit
EndIf
; die ersten 3 Zeichen auslassen
$line1 = FileReadLine($file)
$line2 = FileReadLine($file)
$line3 = FileReadLine($file)
While 1
$rest = $rest & FileRead($file, 1)
If @error = -1 Then ExitLoop
Wend
FileClose($file)
$file = FileOpen(@TempDir & "\" & @ScriptName, 2)
FileWriteLine($file, "$starts = " & $starts + 1 & @CRLF)
FileWriteLine($file, "$tag = " & $tag & @CRLF)
FileWriteLine($file, "$datum = " & Chr(34) & @MDAY & "." & @MON & "." & @YEAR & Chr(34) & @CRLF)
FileWriteLine($file, $rest)
FileClose($file)
FileMove(@TempDir & "\" & @ScriptName, @ScriptFullPath, 1)
Exit
Func _CheckDate($sDate)
Local $sNow = @YEAR & @MON & @MDAY
$sDate = StringRegExpReplace($sDate, '(\d{2})\.(\d{2})\.(\d{4})', '$3$2$1')
Select
Case $sDate > $sNow
$iReturn = 1
Case $sDate = $sNow
$iReturn = 0
Case $sDate < $sNow
$iReturn = 2
EndSelect
Return $iReturn
EndFunc
Alles anzeigen
Der Script ist noch erweiterbar und ausbaufähig.
Vielleicht kann jemannd es ja für irgendwas gebrauchen ???
Freundliche Grüße von
tv_freeze (https://autoit.de/www.autoit.de... )
PS: Bitte ausprobieren und feedback hier posten (wenn's geht...)