Diesmal geht es um allsamt interesantes was AutoIT angeht.
Übersicht
- Dynamische GUI Erzeugung mit Arrays und For Schleifen
- Kommunikation zwischen zwei Programmen
- Decryption mit MC4
- Alles was mit dem Internet zu tuen hat
- Downloader mit Fortschrittsbalken
- File Management
1. Dynamische GUI Erzeugung mit Arrays und For Schleifen
So klingt jetz etwas kompliziert, da ich mehrere Dinge aufeinmal erklären werde, ist aber eigentlich ganz simpel.
Es geht darum sein Script etwas dynamischer zu erstellen. Es mag nicht umbedingt überall angepasst seien, aber dort wo man viel mit sich "wiederholenden" (Gui)Formen zu tuen hat, ist es immer praktisch.
Also fangen wir mal an. Zunächst definieren wir mal den Array:
PHP Code:
Dim $Test[6]
$Test[0] = "Hallo Welt" ;~ Deutsch
$Test[1] = "Hello World" ;~ Englisch
$Test[2] = "Bonjour tout le monde" ;~ Französich
$Test[3] = "Ciao a tutti!" ;~ Italienisch
$Test[4] = "Hola Mundo" ;~ Spanisch
$Test[5] = "Merhaba Dünya" ;~ Türkisch
PHP Code:
#Region GUI SECTION
$GUI = GUICreate("TEST: Hello World",300,30*UBound($Test))
Dim $Button[UBound($Test)]
For $i = 0 To (UBound($Test) -1) Step 1
$Button[$i] = GUICtrlCreateButton($Test[$i],0,30*$i,300,30)
Next
GUISetState(@SW_SHOW,$GUI)
#EndRegion
While 1
WEnd
UBound gibt uns den Index eines Arrays zurück, also "6". Die Größe des GUI`s wird von dem Index des Arrays bestimmt: 30*UBound($Test)
Das entspricht: 30*6
Das nächste müsste auch verständlich seien: Zuerst initialisieren wir den Array. Dann definieren wir die Elemente durch die For Scheife. hier solltet ihr auf das (UBound($Test) -1) achten. Da wir nun die elemente des Arrays definieren müssen wir 1 abziehen, da ja das größte Element nur 5 beträgt. Die einzelnen Buttons haben je die ID $Button[1-5].
Ok jetz fehlt aber immer noch was. Wir müssen natürlich noch die Message While dynamisch schreiben:
PHP Code:
While 1
$msg = GUIGetMsg();
For $i = 0 To (UBound($Test) -1) Step 1
If ($msg == $Button[$i]) Then
Exit
EndIf
Next
WEnd
PHP Code:
For $i = 0 To (UBound($Test) -1) Step 1
If ($msg == $Button[$i]) Then
Eure_komische_Funktion($i*400)
EndIf
Next
2. Kommunikation zwischen zwei Programmen
Ein Problem das vorkommen kann wenn programmiert ist das man gerne einen anderen Programm einen bestimmten Wert mitteilen möchte. Ich werde euch heute zeigen wie man es mit einem INI File macht. wir benutzen dazu unseren File aus den obrigen Tutorial:
PHP Code:
Dim $Test[6]
$Test[0] = "Hallo Welt" ;~ Deutsch
$Test[1] = "Hello World" ;~ Englisch
$Test[2] = "Bonjour tout le monde" ;~ Französich
$Test[3] = "Ciao a tutti!" ;~ Italienisch
$Test[4] = "Hola Mundo" ;~ Spanisch
$Test[5] = "Merhaba Dünya" ;~ Türkisch
#Region GUI SECTION
$GUI = GUICreate("TEST: Hello World",300,30*UBound($Test))
Dim $Button[UBound($Test)]
For $i = 0 To (UBound($Test) -1) Step 1
$Button[$i] = GUICtrlCreateButton($Test[$i],0,30*$i,300,30)
Next
GUISetState(@SW_SHOW,$GUI)
#EndRegion
While 1
$msg = GUIGetMsg();
For $i = 0 To (UBound($Test) -1) Step 1
If ($msg == $Button[$i]) Then
;~ SendReponse($i)
EndIf
Next
WEnd
PHP Code:
#include <file.au3>
$ini = "inifile.ini"
Dim $Test[6]
$Test[0] = "Hallo Welt" ;~ Deutsch
...
$Test[5] = "Merhaba Dünya" ;~ Türkisch
_FileCreate ($ini)
PHP Code:
$file = FileOpen($ini,2)
FileWriteLine($file,"[Arrays]")
FileWriteLine($file,"Index = " & (UBound($test) -1))
For $i = 0 To (UBound($Test) -1) Step 1
FileWriteLine($file,"Test" & $i & " = " & $test[$i])
Next
FileWriteLine($file,"[Answere]")
FileWriteLine($file,"Code = -1")
FileClose($file)
Code:
[Arrays] Count = 5 Test0 = Hallo Welt Test1 = Hello World Test2 = Bonjour tout le monde Test3 = Ciao a tutti! Test4 = Hola Mundo Test5 = Merhaba Dünya [Answere] Code = -1
PHP Code:
func SendReponse($Code)
IniWrite($ini,"Answere","Code",$Code)
EndFunc
Ok jetz machen wir uns auf unseres zweites Programm zu schreiben:
PHP Code:
$ini = "inifile.ini"
$ArrayIndex = IniRead($ini,"Arrays","Index","0")
Dim $Test[$ArrayIndex +1]
For $i = 0 To $ArrayIndex Step 1
$Test[$i] = IniRead($ini,"Arrays","Test" & $i,"N/A")
Next
While 1
WEnd
PHP Code:
While 1
$code = IniRead($ini,"Answere","Code",-1)
For $i = 0 To $ArrayIndex Step 1
If ($code == $i) Then
MsgBox(-1,"Hello World",$Test[$i])
IniWrite($ini,"Answere","Code",-1)
EndIf
Next
WEnd
Hier noch einige Aufgaben für euch, um ein bischen zu üben, falls ihr daran Spaß habt:
- Macht noch ein paar Sprachen hinzu indem ihr den GoogleTranslator verwendet
- Macht den X button im ersten Script funktionstüchtig und lasst das zweite Script automatisch beenden sobald durch den Button das erste beendet hat
- Versucht diese Techniken in euren Programmen anzuwenden, falls sie dort sinn ergeben
3. Decryption mit MC4
So was auch noch ganz praktisch seien kann ist die Verschlüßelung von Strings mithilfe von MC4. Hierfür benötigen wir die Funktion _StringEncrypt :
PHP Code:
#include <string.au3>
$string_1 = "cRy^Pt`iON"
$password = "Cryption can be so hard..."
$crypted = _StringEncrypt (1,$string_1,$password,1)
$decrypted = _StringEncrypt (0,$crypted,$password,1)
MsgBox(-1,"Cryption",$crypted)
MsgBox(-1,"Decryption",$decrypted)
Mit _StringEncrypt können wir Decrypten und Crypten. Der erste Parameter gibt dies an: 1 wenn wir crypten wollen, 0 wenn wir decrypten wollen. Der nächste Parameter gibt den Text an den wir verschlüsseln wollen und der nächste das Passwort dazu. Das Passwort dient dazu das wir das Verschlüsselte wieder entschlüsseln können, da ihr das selbe Passwort bei der Entschlüsselung nehmen müsst wie bei der Verschlüsselung. Der letzte Wert gibt an wie gut die Verschlüsselung ist. Sollte er zu hoch seien, kann das Verschlüsseln sehr lange dauern.
4. Alles was mit dem Internet zu tuen hat
Hach das schöne Internet. Damit lassen sich sehr viele Dinge anstellen und einige Sachen können wir mit AutoIT auch. Als erstes werden wir mal sehen wie wir den ein Patcher für unser Programm schreiben können:
Mit InetGet holen wir uns ein File aus dem Internet. Probieren wir das doch einfach mal indem wir uns ein Programm schreiben das uns immer die aktuellste version von diesen Tutorial holt:
PHP Code:
InetGet("http://www.elitepvpers.com/forum/epvp-coders-tutorials/286071-autoit-tipps-und-tricks.html","Tutorial.html",1,0)
exit
PHP Code:
InetGet("http://EureUsername:")
Auch wollen wir vieleicht erst checken, ob wir den Host überhaupt erreichen.
Dazu benutzen wir Ping:
PHP Code:
Ping("www.elitepvpers.com")
If @error Then
MsgBox(-1,"ERROR","Cant connect to server")
Exit
Else
InetGet("http://www.elitepvpers.com/forum/epvp-coders-tutorials/286071-autoit-tipps-und-tricks.html","Tutorial2.html",1,1)
EndIf
4.1. Downloader mit Fortschrittsbalken
In der vorherigen Section haben wir gesehen, wie man einen file downloaden kann. In dieser Section werden wir lernen, wie man anhand dieses Beispiel Fortschrittsbalken erstellt. Wir beginnen damit indem wir erstmal das Script so umformen, dass der Download im hintergrund läuft
PHP Code:
Ping("www.elitepvpers.com")
If @error Then
MsgBox(-1,"ERROR","Cant connect to server")
Exit
Else
InetGet("http://www.elitepvpers.com/forum/epvp-coders-tutorials/286071-autoit-tipps-und-tricks.html","Tutorial2.html",1,1)
EndIf
$Size = InetGetSize("http://www.elitepvpers.com/forum/epvp-coders-tutorials/286071-autoit-tipps-und-tricks.html")
$Percent = $Size / 100
While 1
WEnd
PHP Code:
ProgressOn("Downloader","Size = " & $Size & " Bytes","0%")
While 1
WEnd
PHP Code:
For $i = 0 To 100 Step 1
While 1
If @InetGetBytesRead >= $Percent*$i Then
ProgressSet($i,$i & "%")
Sleep(100)
If $i == 100 Then
ProgressOff()
EndIf
ExitLoop
ElseIf @InetGetBytesRead == -1 Then
ProgressSet(100,"ERROR","An Error Occured!!!")
ProgressOff()
MsgBox(-1,"ERROR","An Error Occured!!!")
Exit
EndIf
WEnd
Next
MsgBox(-1,"Succes","Download Complete!!!")
5. File Management
Ok hierfür werden wir ein größeres Projekt ähnlich denen wie in Section 1 und 2 schreiben. Wir beginnen indem wir erstmal das GUI schreiben:
PHP Code:
#include <file.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$path = "C:\"
#Region ### START Koda GUI section ### Form=
$Window = GUICreate("Texteditor - Tutorial", 668, 525, 230, 209)
GUISetBkColor(0xFFFFE1)
$Box = GUICtrlCreateEdit("", 10, 10, 536, 501)
GUICtrlSetData(-1, "Open a file please")
$Open = GUICtrlCreateButton("Open File", 560, 10, 101, 41, 0)
$Save = GUICtrlCreateButton("Save File", 560, 65, 101, 41, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
PHP Code:
Case $Open
$path = FileOpenDialog("Datei öffnen",$path,"Textdateien (*.txt)")
GUICtrlSetData($Box,"")
For $i = 0 To _FileCountLines($path) Step 1
Local $line = FileReadLine($path,$i)
Local $data = GUICtrlRead($Box)
GUICtrlSetData($Box,$data & @CRLF & $line)
Next
Die nächsten Zeilen dürften klar seien. Wir holen uns die Zeilenanzahl des Files und holen uns dann immer Zeile um Zeile(mit FileReadLine) und tragen diese in unsere Box ein.
So das war auch schon alles zu unseren ausles, jetz kommen wir zum schreiben was sich als einfacher erweisen sollte:
PHP Code:
Case $Save
$path = FileSaveDialog("Datei speichern",$path,"Textdatein (*.txt)")
If StringRight($path,4) <> ".txt" Then
$path = $path & ".txt"
EndIf
Local $data = GUICtrlRead($Box)
FileWrite($path,$data)
EndSwitch
So das wars erstmal mit meinem Tutorial. Schickt mir eure Vorschläge was man noch rein machen könnte, ich freue mich drauf. Sollte etwas nicht funktionieren: mir Bescheid sagen. Ich habe teilweiße manche Stellen nachträglich geändert und da ich keine Lust hatte alles neu einzufügen habe ich die Sachen von Hand nachgebessert.
MfG
Xereon