AutoIT

Pascal, Basic und andere nicht aufgelistete
Antworten
Shrax
Beiträge: 87
Registriert: Sa Dez 27, 2008 8:08 pm

AutoIT

Beitrag von Shrax » Do Apr 02, 2009 5:55 pm

Hi, ich hätte ein paar Fragen zu AutoIT. Die Fragen ähneln denen die ich in Batch Frage gestellt habe. Gleiches Problem nur nichtmehr in Batch. Nachdem mich jemand in den Thread auf AutoIT hingewiesen hat hab ich mir die Scriptsprace angeschaut.

Habe auch schon vieles verstanden, aber ich finde niergends eine erklährung wie ich Dateien finden (wieder die autorun.inf) und dann löschen kann. Desweiteren soll aber in diesem Programm die autorun.inf gelöscht werden, danach wieder leer erstellt werden und schreibgeschützt gemacht werden. Und zwar eben überall wo eine autorun.inf gefunden wurde.

Möglich wäre auch dass es den Inhalt löscht.
Also das soll so ablaufen.



Programm (wird den Namen autorunEX haben) wird gestartet.

Eine Abfrage kommt ob der User das Programm starten will.

AutorunEX sucht alle Autorun.inf files und listet Sie auf.

User hat die wahl: Löschen oder Abbrechen.

User wählt Löschen.

AutorunEX bennent alle Autorun.inf Dateien in autorun.inf.AutoEX um und verschiebt Sie in einen Ordner neben der AutorunEX exe Datei und ersetzt alle autorun.inf´s durch eine neue Leere Autorun.inf Datei. Dies wird den User davor mitgeteilt.

AutorunEX legt einen Schreibschutz auf alle neu erstellten Autorun.inf Dateien.

AutorunEX fragt ob Autorun Deaktiviert werden soll.

User sagt "Ja"

AutorunEX erstellt folgenden Registery eintrag:
(ich weis leider nur wie ich ihn in Batch hinzugefügt habe. Da ging es so:)
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /v
NoDriveTypeAutoRun /t REG_DWORD /d 0xb5 /f

AutorunEX

Wie könnte ich das jetzt am besten machen? In den Tutorials die ich bisher fand gabs keine Anleitungen zum Löschen von Dateien (und finden) wahrscheinlich weil man damit kleine Viren schreiben könnte..? Im Hilfefile ist das zwar in etwa erklährt aber alles auf Englisch und ungenau. Die Deutsche Hilfedatei ist kaum übersetzt.




PS; wenn der Batch Thread von mir stört kann er gelöscht werden weil ich das Programm ja jetzt mit AutoIT mache.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: AutoIT

Beitrag von cloidnerux » Do Apr 02, 2009 6:07 pm

Ich glaube das wird dir immer Helfen.
Ihc glaube du suchst die Funktionen
DrivegetDrive();
und FileExists();
Redundanz macht wiederholen unnötig.
quod erat expectandum

Shrax
Beiträge: 87
Registriert: Sa Dez 27, 2008 8:08 pm

Re: AutoIT

Beitrag von Shrax » Do Apr 02, 2009 6:21 pm

Ich komm nur mit vielen erklährungen immer nicht klar.

Ich lese hier also

http://www.autoit.de/dokumentation/func ... Exists.htm

dass die Syntax so lautet:
FileExists ( "path" )

Jetzt wenn ichs damit versuche:
If FileExists("autorun.inf") Then
MsgBox(4096, "", "autorun.inf exist")
Else
MsgBox(4096,"", "autorun.inf does not exist.")
EndIf

Sucht er im momentanen Verzeichniss nach Autorun.inf doch wie bringe ich ihn dazu den kompletten Computer zu durchsuchen?

Weil unterverzeichnisse durchsucht es ja nicht mit.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: AutoIT

Beitrag von cloidnerux » Do Apr 02, 2009 6:36 pm

Normal sind ja die Autorun.inf im Ersten unterverzeichenis(z.B: D:) zu finden. Jezt holst du dir eine liste von allen Laufwerken, Prüfst ob sich nciht um eine CD handelt und schaust ob dort eine datei autorun.inf exsitiert.
Redundanz macht wiederholen unnötig.
quod erat expectandum

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: AutoIT

Beitrag von AnGaiNoR » Do Apr 02, 2009 6:37 pm

Ich habe mich früher mal mit entsprechend alten Versionen von AutoIT auseinandergesetzt. Eigentlich müsste eine Schleife geben, mit der man Ordner durchsucht (da hießen aber auch alle Schleifen noch Loop und man musste geschweifte Klammern drum ziehen, das scheint sich ja jetzt geänder zu haben).
Um Werte ganz einfach aus der autorun.inf auszulesen kannst du die Datei als INI-Datei behandeln und mir INI-Read und INI-Write arbeiten.
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Shrax
Beiträge: 87
Registriert: Sa Dez 27, 2008 8:08 pm

Re: AutoIT

Beitrag von Shrax » Do Apr 02, 2009 6:51 pm

Normal sind ja die Autorun.inf im Ersten unterverzeichenis(z.B: D:) zu finden.
Das stimmt leider nicht ganz, diese Viren legen die auch gerne in den Systempfad system32 system windows und eben alle systemordnern und starten diese dann.

Wie das ganz genau funktioniert weis ich nicht, nur dass die autorun.inf Dateien überall auf dem system liegen können.
Prüfst ob sich nciht um eine CD handelt und schaust ob dort eine datei autorun.inf exsitiert.
Ist es nicht möglich bei dem drivegetdrive befehl irgentwie "all" zu suchen, nur CDs ausschliesen? Weil CDs sind ja das einzige wo das Programm keine Autorun.infs löschen kann. Das Problem: Es soll sie trozdem auflisten... Also im sinne von, am ende kommt ne meldung wo steht
Autorun.inf auf F:\...\autorun.inf konnte nicht gelöscht werden da es sich um eine CD handelt.
http://www.autoit.de/dokumentation/func ... tDrive.htm



PS; was bedeutet die zahl nach der klammer vor dem Komma?
also z.B msgbox(0, was bedeutet da die 0? Das ist mir aus dem Tutorial noch nicht ganz klar geworden...

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: AutoIT

Beitrag von AnGaiNoR » Fr Apr 03, 2009 5:18 pm

Shrax hat geschrieben: PS; was bedeutet die zahl nach der klammer vor dem Komma?
also z.B msgbox(0, was bedeutet da die 0? Das ist mir aus dem Tutorial noch nicht ganz klar geworden...
Die Zahl nach dem Komma legt meiner Meinung nach den Stil der Messagebox fest. 0 heißt in dem Fall nur ein OK-Button und ein Info-Symbol (!).
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Shrax
Beiträge: 87
Registriert: Sa Dez 27, 2008 8:08 pm

Re: AutoIT

Beitrag von Shrax » Mi Apr 22, 2009 6:27 pm

Also ich versuchs jetzt schon seit tagen, habe auch im Offiziellen autoit fdorum nachgefragt aber ich komme auf keinen Zweig da es auser die Hilfe kein Vernünpftiges tutorial für AutoIT gibt das darauf aus ist dem User AutoIT so zu erklähren das er es versteht und nicht nur beispiele zu zeigen wie bei der Hilfe datei oder anderen tuts.

Ich habs aufgeben zu versuchen die autorun.inf dateien zu löschen und will nurnoch
eine gui dafür um die autorun funktion zu deaktivieren.

Den Programmcode habe ich aber ich will eben ne gui dazu.

Wie zum henker nochmal bringe ich einen Button dazu die funktion die vorher durch anklicken von Checkboxen ausgewählen funktionen auszuführen???

code:

Code: Alles auswählen

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.0.0
 Author:         Shrax

 Script Version: 1.0.0.1

 Script Function:
	AutoIT Programm AutorunEX
	Löscht die Autorun Funktion von Windows komplett.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

; Adminrechte
	#RequireAdmin

;START GUI
	#include <GUIConstants.au3>
	#Region ### START Koda GUI section ### Form=C:\Users\Daniel Kreiter\Desktop\Projekte\AutoDISPRO\AutoDIS\Source\GUI\Form1.kxf
	$Form1 = GUICreate("Form1", 329, 245, 193, 125)
	$Button1 = GUICtrlCreateButton("OK", 24, 160, 97, 33, 0)
	$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 176, 72, 145, 17)
	$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 176, 96, 145, 17)
	$Checkbox4 = GUICtrlCreateCheckbox("Checkbox4", 176, 120, 137, 17)
	$Button2 = GUICtrlCreateButton("ABBRECHEN", 176, 160, 97, 33, 0)
	$Label2 = GUICtrlCreateLabel("2. Deaktiviert Autorun/Autoplay", 24, 96, 116, 33)
	$Label1 = GUICtrlCreateLabel("1. Deaktiviert Autorun.inf", 24, 48, 116, 33)
	GUISetState(@SW_SHOW)
	#EndRegion ### END Koda GUI section ###
; END GUI


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	
;Versuche die Checkboxen Auszulesen aber ohne Erfolg....
	GUICtrlRead ($Checkbox1)
		RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "NoDriveTypeAutoRun", "REG_DWORD", "ff")
		RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom", "AutoRun", "REG_DWORD", "0")
		RegDelete("HKEY_LOCAL_MACHINE", "NoDriveTypeAutoRun")
		Msgbox(0, "Warnung", "Checkbox1 OK")
;Versuche die Checkboxen Auszulesen aber ohne Erfolg....	
	GUICtrlRead ($Checkbox2)
			RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2")
			Msgbox(0, "Warnung", "Checkbox2 OK")
;Versuche die Checkboxen Auszulesen aber ohne Erfolg....	
	GUICtrlRead ($Checkbox3)
			Msgbox(0, "Warnung", "Checkbox3 OK")
			Exit
;Wie kann ich dann die funktionen der Checkboxen ausführen lassen?
	Case $Button1
			
;Das hier klappt				
	Case $Button2
			Exit
	EndSwitch
WEnd

Benutzeravatar
hackmack
Beiträge: 85
Registriert: Do Mär 26, 2009 10:16 pm

Re: AutoIT

Beitrag von hackmack » Mo Nov 30, 2009 9:45 pm

ich weiß, der thread ist schon uralt. Da ich aber nix dummer finde, wie bei google irgendwas zu suchen, und dann zu finden, dass jemand das gleiche Problem hat, aber auch keine Lösung, will ich diese mal hier posten:

Es gibt in AutoIt zwei verschiedene Möglichkeiten, einen Button dazuzubringen, dass er beim Anklicken was Bestimmtes macht. Den MessageLoop, in dem AutoIt die ganze Zeit in einer Schleife schaut, ob irgendwelche neuen Ereignisse (wie beispielsweise ein Angeklickter Button) vorliegen, und den GUIOnEventMode, bei dem du einmal sagt, dass AutoIt ein Ereignis (Event) mit einer Funktion verknüpfen soll, welche dann immer aufgerufen wird, wenn das Event eintritt. Da ich den GUIOnEventMode praktischer finde, werde ich im folgenden auf diesen eingehen.
  1. Zuerst musst du AutoIt sagen, dass du den GUIOnEventMode verwenden willst. Dies machst du, an den du ganz an den Anfang deines Codes

    Code: Alles auswählen

    AutoItSetOption("GUIOnEventMode", 1)
    
    setzt.
  2. Danach verknüpfst du die von dir gewünschte Funktion (parameterlos) an das Event:

    Code: Alles auswählen

    GUICtrlSetOnEvent ( controlID, "function" )
    
    "controlID" ist hierbei das Handle, was du bekommen hast, als du den Button, die Checkbox, ... (mit GUICtrlCreate...) erstellt hast. "function" ist dann logischerweise die Funktion die dann aufgerufen werden soll, wobei darauf geachtet werden muss, dass du den Funktionname in doppelte Hochkomma schreibt und ohne Klammern ()
  3. Anschließend verbindest du auch noch das Schließen-Event mit einer Funktion, damit man das Programm auch normal (z.B. über das X) schließen kann.

    Code: Alles auswählen

    GUISetOnEvent($GUI_EVENT_CLOSE, "CloseGUI")
    Func CloseGUI()
         Exit
    EndFunc
    
  4. Würdest du das Programm jetzt so ausführen, würde es sich leider sofort wieder beenden. Deswegen brauchst du noch eine Schleife, welche einfach nix tut und dafür sorgt, dass das Programm nicht beendet wird

    Code: Alles auswählen

    While 1
        Sleep(1000)
    WEnd
Außerdem braucht man dafür noch die Headerdatei "GUIConstantsEx.au3". Es ist sinnvoll die GUICtrlSetOnEvent(...) direkt nach der Erzeugung der GUI durchzuführen, also beim Start des Programms.
They say, if you play a Microsoft CD backwards, you hear satanic messages. Thats nothing, cause if you play it forwards, it installs Windows.

Antworten