myAutorun ist eine von mir entwickelte Alternative zur 'autorun.inf' unter Windows. Da die Windows eigene Autostart-Funktion für CDs, USB-Sticks und HDDs schon oft von Viren, Trojanern und Co zur Verbreitung ausgenutzt wurde, hat Windows sie deaktiviert. So konnte zwar die Weiterverbreitung einiger Schadprogramme eingedämmt werden, allerdings ging auch eine wirklich nützliche Funktion mit drauf.
myAutorun schafft diesem Problem Abhilfe! Mit myAutorun lassen sich kinderleicht, eigene Autostart-Dateien erstellen, die nach der einmaligen Installation von myAutorun auf ihrem Computer, bei jedem Anschließen ausgeführt werden. Erstellen sie Autostarts für CDs, USB-Sticks, Festplatten und sogar Netzlaufwerke! Da myAutorun sich zum einen nicht weit verbreiten wird und zum Anderen sogar der Name der Autostart-Scripte beliebig änderbar ist, wird es keine Viren geben die myAutorun ausnutzen. So können sie fast alle Vorteile von automatischen Autoruns nutzen, ohne zusätzlich Gefahr zu laufen, dass sich ihr Computer über ihr mobilen Speichermedien neue Viren einfängt...
Quellcode
Spoiler anzeigen
#include <Array.au3>
#include <INet.au3>
#include <Process.au3>
; Test auf Parameter-Unterfunktionen:
If Not @Compiled Then Exit
If $CmdLineRaw <> '' Then __CheckCmdLine($CmdLineRaw)
; Variablen/Konstanten deklarieren:
Global $DriveList[1] = [0]
Global Const $__AutorunFileName = 'autorun.txt', $__DriveCheckSleep = 1000, $__ShowTrayInfo = True, $__TrayInfoTimeout = 3
While 1 ; Hauptschleife
Do
Sleep($__DriveCheckSleep)
$NewDrive = __NewDriveConnected()
Until $NewDrive[0] > 0 ; Warten bis neue Laufwerke gefunden werden...
For $i = 1 To $NewDrive[0] Step +1
If FileExists($NewDrive[$i] & '\' & $__AutorunFileName) Then
__TrayInfo('Neues Laufwerk mit Autorun... (' & StringUpper($NewDrive[$i]) & '\' & ')')
__AutoRun($NewDrive[$i]) ; Autorun-Datei auf neuem Laufwerk ausführen...
Else
__TrayInfo('Neues Laufwerk ohne Autorun... (' & StringUpper($NewDrive[$i]) & '\' & ')')
EndIf
Next
WEnd
Func __AutoRun($Drive) ; Ausführen von vorhanden Autorun-Datein mithilfe von Parameterübergaben an 2. Session dieser Exe...
Local $File = FileOpen($Drive & '\' & $__AutorunFileName, 0), $CurrentLine = 0, $Seperator
If $File <> -1 Then
While 1
$CurrentLine += 1
$Line = FileReadLine($File, $CurrentLine)
If @error Then ExitLoop
$Seperator = StringInStr($Line, '=')
If $Seperator Then
$Command = StringLower(StringLeft($Line, $Seperator - 1))
$Content = __ReplaceVars(StringTrimLeft($Line, $Seperator), $Drive)
Switch $Command
Case 'message'
If $Content <> '' Then ShellExecute(@ScriptFullPath, ' message:' & $Content)
Case 'shellexecute'
If $Content <> '' Then ShellExecute(@ScriptFullPath, ' shellexecute:' & $Content)
Case 'execute'
If $Content <> '' Then ShellExecute(@ScriptFullPath, ' execute:' & $Content)
Case 'run'
If $Content <> '' Then ShellExecute(@ScriptFullPath, ' run:' & $Content)
Case 'cmd'
If $Content <> '' Then ShellExecute(@ScriptFullPath, ' cmd:' & $Content)
Case 'sleep'
Sleep($Content)
Case Else
__TrayInfo('Unbekannter Befehl: "' & $Command & '" in ' & $Drive & '\' & $__AutorunFileName & ' gefunden!', 2)
EndSwitch
EndIf
WEnd
Else
__TrayInfo(StringUpper($Drive) & '\' & $__AutorunFileName & ' konnte nicht gelesen werden!', 3)
EndIf
EndFunc ;==>__AutoRun
Func __NewDriveConnected($TYP = 'ALL')
Local $i, $y, $NewList, $Found, $Del[1] = [0], $Return[1] = [0]
$NewList = DriveGetDrive($TYP)
; Entfernte Drives null setzen:
For $i = 1 To $DriveList[0] Step +1
$Found = False
For $y = 1 To $NewList[0] Step +1
If $DriveList[$i] = $NewList[$y] Then
$Found = True
ExitLoop
EndIf
Next
If Not $Found Then
_ArrayAdd($Del, $i)
$Del[0] += 1
EndIf
Next
; Null gesetzte Drives löschen:
For $i = 1 To $Del[0] Step +1
_ArrayDelete($DriveList, $Del[$i])
Next
; Neues Drive finden:
For $i = 1 To $NewList[0] Step +1
$Found = False
For $y = 1 To $DriveList[0] Step +1
If $NewList[$i] = $DriveList[$y] Then
$Found = True
ExitLoop
EndIf
Next
If Not $Found Then
_ArrayAdd($Return, $NewList[$i])
$Return[0] += 1
EndIf
Next
$DriveList = $NewList
Return $Return
EndFunc ;==>__NewDriveConnected
Func __TrayInfo($Text, $Style = 1)
If $__ShowTrayInfo Then TrayTip('myAutorun', $Text, $__TrayInfoTimeout, $Style)
EndFunc ;==>__TrayInfo
Func __CheckCmdLine($Code)
$Seperator = StringInStr($Code, ':')
If $Seperator = 0 Then Exit
$Command = StringLower(StringLeft($Code, $Seperator - 1))
$Content = StringTrimLeft($Code, $Seperator)
Switch $Command
Case 'message'
MsgBox(0, 'myAutorun', $Content, 0)
Case 'shellexecute'
ShellExecute($Content)
Case 'execute'
Execute($Content)
Case 'run'
Run($Content)
Case 'cmd'
_RunDos($Content)
EndSwitch
Exit
EndFunc ;==>__CheckCmdLine
Func __ReplaceVars($String, $Drive)
$String = StringReplace($String, '%drive%', $Drive, 0, 0)
$String = StringReplace($String, '%hour%', @HOUR, 0, 0)
$String = StringReplace($String, '%min%', @MIN, 0, 0)
$String = StringReplace($String, '%sec%', @SEC, 0, 0)
$String = StringReplace($String, '%year%', @YEAR, 0, 0)
$String = StringReplace($String, '%month%', @MON, 0, 0)
$String = StringReplace($String, '%mday%', @MDAY, 0, 0)
$String = StringReplace($String, '%user%', @UserName, 0, 0)
$String = StringReplace($String, '%pcname%', @ComputerName, 0, 0)
$String = StringReplace($String, '%crlf%', @CRLF, 0, 0)
$String = StringReplace($String, '%lf%', @LF, 0, 0)
$String = StringReplace($String, '%cr%', @CR, 0, 0)
$String = StringReplace($String, '%lan%', @IPAddress1, 0, 0)
$String = StringReplace($String, '%wan%', _GetIP(), 0, 0)
$String = StringReplace($String, '%fullpath%', $Drive & '\' & $__AutorunFileName, 0, 0)
Return $String
EndFunc ;==>__ReplaceVars
Befehle
Spoiler anzeigen
Bei den unten aufgeführten Befehl ist zu beachten, dass die Groß- und Kleinschreibung keine Beachtung findet. Außerdem sollte jeder Befehl in eine neue Zeile geschrieben und durch ein '='-Zeichen, ohne Leerzeichen, von seinem Parameter getrennt werden.
Anzeigen einer Nachricht auf dem Bildschirm:
Ausführen/Anzeigen von Dateien/Links usw.:
(Äquivalent zum Windows-Befehl 'ShellExecute')
Ausführen eines Strings/Autoit-Befehls:
(siehe Autoit-Befehl 'Execute')
Ausführen von Programmen:
Auführen von Dos-Befehlen:
Anhalten der Script-Abarbeitung für x Millisekunden:
Weitere Befehle werden noch ergänzt...
Außerdem können in den Parametern aller Befehle folgende Makros genutzt werden:
%dive% aktuelles Laufwerk in der Form 'C:'
%hour% aktuelle Stundenzahl
%min% aktuelle Minutenzahl
%sec% aktuelle Sekundenzahl
%year% aktuelles Jahr
%month% aktueller Monat (als Zahl)
%mday% aktueller Tag des Monats
%user% aktueller Beuntzername
%pcname% aktueller Computername
%crlf% Zeilenumbruch
%cr% Ascii-Zeichen 13
%lf% Ascii-Zeichen 10
%lan% lokale IP-Adresse
%wan% globale IP-Adresse
%fullpath% kompletter Pfad zum Autorun-Script
Alles anzeigen
Beispiel Autostart-Script:
Spoiler anzeigen
message=Danke das du auf deinem Computer ('%pcname%') myAutorun installiert hast. %crlf%Heute ist der %mday%.%month%.%year% und wir haben gerade %hour%:%min%:%sec%Uhr. %crlf%Deine lokale IP ist die %lan% und global hast du gerade die IP %wan% ;)
Message=Hallo %user%!
execute=Beep(500, 1000)
cmd=echo Ich bin eine Autorun-Datei auf dem Laufwerk %drive% und um mich zu finden brauchst du diesen Pfad '%fullpath%' > %drive%\Neue-Textdatei-aus-Autostart-Script.txt
shellexecute=notepad
Alle Dateien finden sich auch im Anhang...