1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. KriZza

Beiträge von KriZza

  • "Oder" - Abfrage wird als "Und" gewertet?

    • KriZza
    • 29. Mai 2015 um 12:33

    Also Ziel soll es sein, wenn EINE der beiden Checkbox leer ist, das trotzdem der Inhalt ausgegeben wird:

    also "Inhalt: asdf - "
    oder "Inhalt: -asdf"

    EDIT: hat sich wirklich mit dem "AND" erledigt. Oh man ...

  • "Oder" - Abfrage wird als "Und" gewertet?

    • KriZza
    • 29. Mai 2015 um 12:20

    Oh :( dann hab nur ich das Problem. So ist´s bei mir:

    Fall 1 beides Leer --> so brauche ich das auch

    Fall 2 Nur eine der Inputboxen ist gefüllt TROTZDEM LEER: :( das ist mein Problem

    Fall 3 Beide sind befüllt geht... ist ja auch logisch:

  • "Oder" - Abfrage wird als "Und" gewertet?

    • KriZza
    • 29. Mai 2015 um 12:05

    Heute hab ich´s auch. Bei mir wird die Abfrage in Zeile 18 als "and" gewertet. Es müsste ja nur eins der beiden geprüft werden beim "or"....


    Kann das jemand nachvollziehen?

    AutoIt
    #include <GUIConstantsEx.au3>
    
    
    
    
        Local $hGUI = GUICreate("Example")
    	$input1 = GUICtrlCreateInput("",5,10)
    	$input2 = GUICtrlCreateInput("",5,30)
    	$testbtn = GUICtrlCreateButton("test",5,80)
    
    
        ; Display the GUI.
        GUISetState(@SW_SHOW, $hGUI)
    
    
    
    
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    			Case $testbtn
    				If GUICtrlRead($input1) = "" or GUICtrlRead($input2) = "" Then
    					MsgBox(0,"","leer")
    				Else
    					MsgBox(0,"","Inhalt: " & GUICtrlRead($input1) & " - " & GUICtrlRead($input2))
    				EndIf
    
    
    
    
            EndSwitch
        WEnd
    Alles anzeigen
  • Variablenname in for-Schleife hochzählen

    • KriZza
    • 29. Mai 2015 um 11:15

    Alles klar, das gibt wenigstens Gewissheit ;-). Danke

  • Variablenname in for-Schleife hochzählen

    • KriZza
    • 29. Mai 2015 um 10:26

    Das wird bei dem Skript leider sehr umständlich die Variablen neu anzupassen, da ich diesen Vorgang wohl für 30-40 Funktionen durchführen werde.

    Wie würde denn ein Beispiel für Assign / Eval aussehen? Hätte da jemand einen Tipp für mich anhand des Beispiels von meinem 1. Post?

    Also so in etwa stelle ich mir das vor... Klappt aber nicht:

    AutoIt
    Local $flabelnote = ""
    Local $STATIONX = ""
    
    
    for $i=1 to 9
    Assign("STATION" & $i & "[5]", "STATIONX")
    Assign("flabelnote" & $i, "flabelnote")
    	If FileExists($FILEPATHNOTESPATH & "\NOTES1.data") = True Then
    		If $notemenu1hoverinf1[4] = $STATIONX And $flabelnote = "black" Then
    			_SetImagefromResource($STATIONX, "NOTEOKHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote = "blue"
    		ElseIf $notemenu1hoverinf1[4] <> $STATIONX And $flabelnote = "blue" Then
    			_SetImagefromResource($STATIONX, "NOTEOK", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote = "black"
    		ElseIf $notemenu1hoverinf1[2] = 1 and $notemenu1hoverinf1[4] = $STATIONX  Then
    			_SetImagefromResource($STATIONX, "NOTEOKMOUSEDOWN", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		ElseIf $notemenu1hoverinf1[2] = 0 and $notemenu1hoverinf1[4] = $STATIONX  Then
    			_SetImagefromResource($STATIONX, "NOTEOKHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		EndIf
    	Else
    		If $notemenu1hoverinf1[4] = $STATIONX And $flabelnote = "black" Then
    			_SetImagefromResource($STATIONX, "NOTEHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote = "blue"
    		ElseIf $notemenu1hoverinf1[4] <> $STATIONX And $flabelnote = "blue" Then
    			_SetImagefromResource($STATIONX, "NOTE", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote = "black"
    		ElseIf $notemenu1hoverinf1[2] = 1 and $notemenu1hoverinf1[4] = $STATIONX  Then
    			_SetImagefromResource($STATIONX, "NOTEMOUSEDOWN", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		ElseIf $notemenu1hoverinf1[2] = 0 and $notemenu1hoverinf1[4] = $STATIONX  Then
    			_SetImagefromResource($STATIONX, "NOTEHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		EndIf
    	EndIf
    Next
    Alles anzeigen
  • Variablenname in for-Schleife hochzählen

    • KriZza
    • 29. Mai 2015 um 10:02

    Moin zusammen,

    kurze Frage, und ich habe kein passendes Beispiel gefunden, bzw. ich habe ein Brett vorm Kopf ;)

    Wie zähle ich in einer for schleife den Variablennamen hoch?

    Hochgezählt werden soll:
    $STATION1[5], $STATION2[5], $STATION3[5], $STATION4[5], $STATION5[5], $STATION6[5], $STATION7[5], $STATION8[5], $STATION9[5]
    $flabelnote1, $flabelnote2, $flabelnote3, $flabelnote4, $flabelnote5, $flabelnote16, $flabelnote7, $flabelnote8, $flabelnote9

    AutoIt
    If FileExists($FILEPATHNOTESPATH & "\NOTES1.data") = True Then
    		If $notemenu1hoverinf1[4] = $STATION1[5] And $flabelnote1 = "black" Then
    			_SetImagefromResource($STATION1[5], "NOTEOKHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote1 = "blue"
    		ElseIf $notemenu1hoverinf1[4] <> $STATION1[5] And $flabelnote1 = "blue" Then
    			_SetImagefromResource($STATION1[5], "NOTEOK", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote1 = "black"
    		ElseIf $notemenu1hoverinf1[2] = 1 and $notemenu1hoverinf1[4] = $STATION1[5]  Then
    			_SetImagefromResource($STATION1[5], "NOTEOKMOUSEDOWN", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		ElseIf $notemenu1hoverinf1[2] = 0 and $notemenu1hoverinf1[4] = $STATION1[5]  Then
    			_SetImagefromResource($STATION1[5], "NOTEOKHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		EndIf
    	Else
    		If $notemenu1hoverinf1[4] = $STATION1[5] And $flabelnote1 = "black" Then
    			_SetImagefromResource($STATION1[5], "NOTEHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote1 = "blue"
    		ElseIf $notemenu1hoverinf1[4] <> $STATION1[5] And $flabelnote1 = "blue" Then
    			_SetImagefromResource($STATION1[5], "NOTE", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    			$flabelnote1 = "black"
    		ElseIf $notemenu1hoverinf1[2] = 1 and $notemenu1hoverinf1[4] = $STATION1[5]  Then
    			_SetImagefromResource($STATION1[5], "NOTEMOUSEDOWN", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		ElseIf $notemenu1hoverinf1[2] = 0 and $notemenu1hoverinf1[4] = $STATION1[5]  Then
    			_SetImagefromResource($STATION1[5], "NOTEHOVER", @ScriptDir & "\CODE\TTCIMG.dll", $RT_BITMAP)
    		EndIf
    EndIf
    Alles anzeigen
  • Dynamische Varibale -- aus Funktion

    • KriZza
    • 26. Mai 2015 um 12:55

    Danke :)

    hier meine Lösung:

    AutoIt
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiIPAddress.au3>
    #include <GuiConstants.au3>
    #include <Array.au3>
    
    
    
    
    Global $INPUTUSERNAMEREF
    
    
    Global $FONT = "Segoe UI"
    
    
    Local $hGUI = GUICreate("Example")
    GUISetBkColor(0xFFFFFF,$hGUI)
    
    
    
    
    $1 = _GUICtrlTC_Station_Create(5, 5, "Rechner 01",$hGUI,$FONT)
    
    
    $2 = _GUICtrlTC_Station_Create(5, 205, "Rechner 02",$hGUI,$FONT)
    
    
    $return1 = GUICtrlCreateButton("return 1",5,370)
    $return2 = GUICtrlCreateButton("return 2",105,370)
    
    
    GUISetState(@SW_SHOW, $hGUI)
    
    
    
    
    
    
    
    
    While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    			 Case $return1
                    _ArrayDisplay($1)
    				MsgBox(0,"",_GUICtrlIpAddress_Get($1[0]))
    				MsgBox(0,"",GUICtrlRead($1[1]))
    			 Case $return2
                    _ArrayDisplay($2)
            EndSwitch
        WEnd
    
    
    
    
    
    
    Func _GUICtrlTC_Station_Create($iX, $iY,$StationName,$hWnd,$Fontname)
    	Dim $array[5]
    	$STATIONGROUP= GUICtrlCreateGroup("", $iX, $iY, 356, 120, $BS_FLAT)
    	DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($STATIONGROUP), "wstr", 0, "wstr", 0)
    	$STATIONCHK = GUICtrlCreateCheckbox($StationName, $iX+5, $iY+92, 90, 20)
    	GUICheckBoxSetColor($STATIONCHK, 0x3C3C3C, 0xFFFFFF, 11)
    	$array[0] =GUICtrlCreateLabel("(Name)",$iX+158,$iY+10,190,20)
    	GUICtrlSetFont(-1, 9, 400, 2, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    	$array[1] =GUICtrlCreateLabel("(Firma)",$iX+158,$iY+25,190,20)
    	GUICtrlSetFont(-1, 9, 400, 2, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    	GUICtrlCreateLabel("IP-Adresse:",$iX+115,$iY+45,70,20)
    	GUICtrlSetFont(-1, 9, 400, 0, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    	$array[2] = _GUICtrlIpAddress_Create($hWnd, $iX+185, $iY+43, 160, 20)
    	_GUICtrlIpAddress_SetFont($array[0], $Fontname, 12, 400)
    	GUICtrlCreateLabel("Benutzer:",$iX+115,$iY+70,90,20)
    	GUICtrlSetFont(-1, 9, 400, 0, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    	$array[3] = GUICtrlCreateInput("", $iX+185, $iY+68, 160, 20)
    	GUICtrlSetFont(-1, 10, 400, 0, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    	GUICtrlCreateLabel("Passwort:",$iX+115,$iY+95,70,20)
    	GUICtrlSetFont(-1, 9, 400, 0, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    	$array[4] = GUICtrlCreateInput("", $iX+185, $iY+92, 160, 20, $ES_PASSWORD)
    	GUICtrlSetFont(-1, 9, 400, 0, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    
    
    	Return($array)
    EndFunc
    
    
    
    
    
    
    Func GUICheckBoxSetColor(ByRef $CtrlID, $iColor, $iBkColor = "0xF1EDED", $iSize = "10")
    	; SEuBo
    	$CtrlHWnd = $CtrlID
    	If Not IsHWnd($CtrlHWnd) Then $CtrlHWnd = GUICtrlGetHandle($CtrlID)
    	$aParent = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $CtrlHWnd)
    	$hOldG = GUISwitch($aParent[0])
    	$aCPos = ControlGetPos($aParent[0], "", $CtrlID)
    	$sOldT = GUICtrlRead($CtrlID, 1)
    	GUICtrlDelete($CtrlID)
    	DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
    	$CtrlID = GUICtrlCreateCheckbox($sOldT, $aCPos[0], $aCPos[1], $aCPos[2], $aCPos[3])
    	GUICtrlSetColor(-1, $iColor)
    	GUICtrlSetBkColor(-1, $iBkColor)
    	GUICtrlSetFont(-1, $iSize, 400, 0, $FONT)
    	DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7)
    	GUISwitch($hOldG)
    EndFunc   ;==>GUICheckBoxSetColor
    Alles anzeigen
  • Dynamische Varibale -- aus Funktion

    • KriZza
    • 26. Mai 2015 um 11:57

    ja, noch wird nichts wichtiges "returned", das kommt aber noch. das mit dem Handle ist eine gute idee.

    Aber wie weise ich die wieder eindeutig der Funktion zu? Also eine Funktion und momentan zwei Stationen die erstellt werden. Ich hab gerade einfach ein Knoten im Kopf :(

  • Dynamische Varibale -- aus Funktion

    • KriZza
    • 26. Mai 2015 um 11:14

    Moin zusammen,

    ich hoffe ihr könnt mir helfen. Wie ist es möglich aus einer Funktion eine dynamische Variable zu bekommen. Im folgenden Beispiel möchte ich gerne die Inhalte der Inputboxen ausgeben lassen?

    AutoIt
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiIPAddress.au3>
    #include <GuiConstants.au3>
    
    
    Global $FONT = "Segoe UI"
    
    
    Local $hGUI = GUICreate("Example")
    GUISetBkColor(0xFFFFFF,$hGUI)
    
    
    
    
    _GUICtrlTC_Station_Create(5, 5, "Rechner 01",$hGUI,$FONT)
    
    
    _GUICtrlTC_Station_Create(5, 205, "Rechner 02",$hGUI,$FONT)
    
    
    GUISetState(@SW_SHOW, $hGUI)
    
    
    
    
    
    
    
    
    While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    
    
            EndSwitch
        WEnd
    
    
    Func _GUICtrlTC_Station_Create($iX, $iY,$StationName,$hWnd,$Fontname)
    	$GRREF = GUICtrlCreateGroup("", $iX, $iY, 306, 110)
    	DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($GRREF), "wstr", 0, "wstr", 0)
    	$REF = GUICtrlCreateCheckbox($StationName, $iX+5, $iY+82, 85, 20)
    	GUICheckBoxSetColor($REF, 0x3C3C3C, 0xFFFFFF, 9)
    	$IPADDREF = _GUICtrlIpAddress_Create($hWnd, $iX+90, $iY+15, 160, 25)
    	_GUICtrlIpAddress_SetFont($IPADDREF, $Fontname, 12, 400)
    	$INPUTUSERNAMEREF = GUICtrlCreateInput("", $iX+90, $iY+45, 160, 25)
    	GUICtrlSetFont(-1, 10, 400, 0, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    	$INPUTPASSWORDREF = GUICtrlCreateInput("", $iX+90, $iY+75, 160, 25, $ES_PASSWORD)
    	GUICtrlSetFont(-1, 9, 400, 0, $FONT)
    	GUICtrlSetColor(-1, 0x3C3C3C)
    EndFunc
    
    
    
    
    Func GUICheckBoxSetColor(ByRef $CtrlID, $iColor, $iBkColor = "0xF1EDED", $iSize = "10")
    	; SEuBo
    	$CtrlHWnd = $CtrlID
    	If Not IsHWnd($CtrlHWnd) Then $CtrlHWnd = GUICtrlGetHandle($CtrlID)
    	$aParent = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $CtrlHWnd)
    	$hOldG = GUISwitch($aParent[0])
    	$aCPos = ControlGetPos($aParent[0], "", $CtrlID)
    	$sOldT = GUICtrlRead($CtrlID, 1)
    	GUICtrlDelete($CtrlID)
    	DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0)
    	$CtrlID = GUICtrlCreateCheckbox($sOldT, $aCPos[0], $aCPos[1], $aCPos[2], $aCPos[3])
    	GUICtrlSetColor(-1, $iColor)
    	GUICtrlSetBkColor(-1, $iBkColor)
    	GUICtrlSetFont(-1, $iSize, 400, 0, $FONT)
    	DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7)
    	GUISwitch($hOldG)
    EndFunc   ;==>GUICheckBoxSetColor
    Alles anzeigen
  • AutoIt und .csv excel

    • KriZza
    • 13. Mai 2015 um 09:12

    Und? Hat wahrscheinlich nicht geklappt oder?

  • AutoIt und .csv excel

    • KriZza
    • 7. Mai 2015 um 10:09

    Deine Final.csv ist aber auch total zerhauen....

  • AutoIt und .csv excel

    • KriZza
    • 6. Mai 2015 um 16:37

    Das Problem liegt an deiner Datei... Dein Trenner ist ein Semikolen und im Inhalt (HTML) kommen syntaxbedingt auch die Trenner vor. Ich schau mal

    Mich wurdert sowieso warum die Datei sich so im Original öffnen lässt :D

    //EDIT
    Also: Einzige Chance die ich sehe ist die Standardtrennzeichen beim erstellen deiner CSV zu ändern. Du hast viele Infos wie z.B. &uuml; usw drin die könntest du theoretisch auch mit StringReplace($newstring2,"&uuml;","ü") ändern.
    Jedoch hast du auch Befehle drin wie z.B: border-bottom: 1px solid; --- HINTEN DAS SEMIKOLEN für deine neue Reihe.

    Wenns möglich ist, erstell die CSV mit einem anderen Trennzeichen, ich glaub das geht in der Systemsteuerung von Windows, lass das Script von Oben durchlaufen und dann sollte es gehen.

  • AutoIt und .csv excel

    • KriZza
    • 6. Mai 2015 um 15:54

    Wie sieht denn die neue Anordnung aus? bzw. was steht denn in den anderen 2991 zeilen die neu hinzugekommen sind?

  • AutoIt und .csv excel

    • KriZza
    • 6. Mai 2015 um 14:57
    AutoIt
    #include <file.au3>
    #include <array.au3>
    
    
    
    
    $path = @ScriptDir & "\test.csv"
    
    
    
    
    $File = FileOpen($path,0)
    $filecontent = FileRead($File)
    FileClose($File)
    $string1 = StringReplace($filecontent,"<h1>","<span style=""font-size: 24pt""><strong>")
    $newstring = StringReplace($string1,"</h1>","</strong></span>")
    $File2 = FileOpen($path,10)
    FileWrite($file2,$newstring)
    FileClose($file2)
    Alles anzeigen
  • Excel Zellen auslesen und Dateien öffnen

    • KriZza
    • 6. Mai 2015 um 08:37

    Wenn du damit nicht klar kommst, kannste ja auch mal ein kleines Paket mit deinen Beispielen erstellen und hier hochladen. Ich denke dann wird das noch etwas eindeutiger wo es noch klemmt. ;)

  • Excel Zellen auslesen und Dateien öffnen

    • KriZza
    • 5. Mai 2015 um 20:56

    Ja der Quellpfad zu deinen Bilddateien. Denk auch dran die Endung jeweils in .BMT wieder umzubenennen.

    Und natürlich die excelzellen Zeile 18-19 anzupassen. Momentan wird nur A1 bis B1 ausgelesen. Ich weil nicht wie deine Quelldatei aussieht.

    Um einen Fehler auszuschließen nimmst du statt "run" >>> "shellexecute" das zeigt den Dateinamen an falls diese nicht gefunden werden

  • Excel Zellen auslesen und Dateien öffnen

    • KriZza
    • 5. Mai 2015 um 13:20

    Hier bitte :P :

    Du musst halt nur über dein "anderes" programm die zeilen 18 und 19 dynamisch anpassen lassen.

    - Die Datei (Zeile 8 muss angepasst werden)
    - Aus BMP (hab ich zum testen genutzt) kannste wieder dein Format benutzen. (Zeile 29-33)

    Edit: Hab noch einen kleinen Fehler in der "For" -Schleife angepasst.

    AutoIt
    #include <Array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    
    
    ; Create application object and open an example workbook
    Local $oAppl = _Excel_Open()
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\test.xlsx")
    If @error Then
    	MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error opening workbook '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    	_Excel_Close($oAppl)
    	Exit
    EndIf
    
    
    ; *****************************************************************************
    ; Read data from a single cell on the active sheet of the specified workbook
    ; *****************************************************************************
    Local $sResult = _Excel_RangeRead($oWorkbook, Default, "A1")
    Local $sResult2 = _Excel_RangeRead($oWorkbook, Default, "B1")
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example 1", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    $sResult = StringTrimLeft($sResult,3)
    $sResult = StringTrimRight($sResult,4)
    $sResult2 = StringTrimLeft($sResult2,3)
    $sResult2 = StringTrimRight($sResult2,4)
    
    
    
    
    for $i = string($sResult) to string($sResult2)
    ;~ 	$exec = ShellExecute(@ScriptDir & "\IV_"&$i&".bmp")
    Run(@ComSpec & " /c " & @ScriptDir & "\IV_0"&$i&".bmp", "", @SW_HIDE)
    Run(@ComSpec & " /c " & @ScriptDir & "\IV_00"&$i&".bmp", "", @SW_HIDE)
    Run(@ComSpec & " /c " & @ScriptDir & "\IV_000"&$i&".bmp", "", @SW_HIDE)
    Run(@ComSpec & " /c " & @ScriptDir & "\IV_"&$i&".bmp", "", @SW_HIDE)
    Next
    Alles anzeigen
  • Setup/Update-Routine komplett in AutoIT

    • KriZza
    • 5. Mai 2015 um 11:42

    Moin zusammen,

    ich möchte nun auch mal gerne ein Script von mir vorstellen. Naja die Basis dafür und einige Funktionen habe ich mir hier aus dem Forum "genommen" (Als Basis "DeepRed92's Install Creator (in Arbeit)" @DeepRed92) und ("ZIP - Packen / Entpacken mit Windows eigener Funktion" @BugFix) Vielen Dank dafür. Aber in der Kombi sind die Schnippsel noch nicht verwendet worden.

    Um was geht es? Eine Setup-Routine / Installations-Routine oder auch Update-Routine für euer Programm.

    Features:
    - Pfad auslesen um ein Update direkt zu erkennen
    - Eine Routine zum Registrieren mit Upload auf einen FTP Server
    - Erstellen eines Backups falls ihr ein Update macht
    - Installation euer hinterlegten Programmdaten
    - Erstellung von Shortcuts im Startmenü, Desktop und Taskbar.

    How-To:
    Ihr passt das Script nach euren Bedürfnissen an. D.h.:
    - Ihr tragt optional die Verbindunsdaten zu eurem FTP-Server ein
    - Ihr tragt eure Programme in der Funktion "_installroutine" (Zeile 424 ff.) und beim ProcessClose (Zeile 350 ff.) ein.
    - Ihr erstellt eine Grafik (164x314 px) und ein Icon und hinterlegt diese beim Script in den Unterordner "Ressourcen"
    - Ihr kompiliert das Script mit dem Autoit3Wrapper und fügt vorher auf dem Register "Resource Update" im Feld "Extra resource Fields" die kompletten Pfade zu eueren Dateien ein. Denkt auch an die Grafik und das Icon.

    Über Anregungen, Kritik und Fragen freue ich mich natürlich.

    Viele Grüße,
    KriZza

    AutoIt: SetupExample
    #NoTrayIcon
    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\50_Graphics\GuiIcons\ProgrammIcons\TCINSTALL.ico
    #AutoIt3Wrapper_Outfile=TC-Viewer-Setup.exe
    #AutoIt3Wrapper_Res_Comment=Setup für den TC-Viewer
    #AutoIt3Wrapper_Res_Description=Setup für den TC-Viewer
    #AutoIt3Wrapper_Res_Fileversion=3.1.0.1
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_File_Add=C:\Geschäftliches\Sonstiges\Programmierung\TrainingControl\3_Setuproutine\Ressourcen\default.jpg,rt_rcdata, DEFAULTPIC
    #AutoIt3Wrapper_Res_File_Add=C:\Geschäftliches\Sonstiges\Programmierung\TrainingControl\3_Setuproutine\Ressourcen\TCVIEWER.ico,rt_rcdata, TCVICO
    #AutoIt3Wrapper_Res_File_Add=C:\Geschäftliches\Sonstiges\Programmierung\ReleaseUmgebung\Aktuell\TC-Viewer.exe,-10, TCVIEWER
    #AutoIt3Wrapper_Res_File_Add=C:\Geschäftliches\Sonstiges\Programmierung\ReleaseUmgebung\Aktuell\TC-Viewer-Updater.exe,-10, TCVIEWERUPDATER
    #AutoIt3Wrapper_Res_File_Add=C:\Geschäftliches\Sonstiges\Programmierung\ReleaseUmgebung\Aktuell\TCVRIB.dll,-10, TCVRIB
    ; usw usw usw.
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #Region Includes
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <WinAPI.au3>
    #include <GuiConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <GUIListView.au3>
    #include <GUIRichEdit.au3>
    #include <ScrollBarConstants.au3>
    #include <GUIScrollBars.au3>
    #include <icons.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIRes.au3>
    #include <WinAPIInternals.au3>
    #include <FTPEx.au3>
    #include <File.au3>
    #include <Constants.au3>
    ;~ If @AutoItVersion > "3.3.10.0" Then
    Global $ghGDIPDLL = $__g_hGDIPDll
    #EndRegion Includes
    #Region GUIPARAMETER
    Opt("GUICloseOnESC", 0)
    #EndRegion GUIPARAMETER
    Global $Readexisttcview = RegRead("HKEY_CURRENT_USER\Software\TTC-Viewer", "MainPath") ;für ein Update... eure software per RegWrite eintragen.
    If @error Then
    	$SetupOrUpdate = "Setup"
    Else
    	$SetupOrUpdate = "Update"
    EndIf
    $Version = "3.1.0.1"
    $UpdateName = "Update 3"
    $DATASIZETCVIEWER = "19.3" ;Größe des Pakets
    #Region PRESTART-FUNKTIONEN
    if FileExists($Readexisttcview & "\TC-Viewer.exe") Then
    	$GETORVERS = FileGetVersion($Readexisttcview & "\TC-Viewer.exe")
    	If $GETORVERS > $Version Then
    		$ASKDOWNGRADE = MsgBox(36,"TC-Viewer","Wollen Sie wirklich ein Downgrade vom TC-Viewer durchführen?")
    		If $ASKDOWNGRADE = 7 Then
    			Exit
    		EndIf
    
    
    	EndIf
    EndIf
    	DirCreate(@AppDataDir & "\TC-Viewer")
    	_FileInstallFromResource("DEFAULTPIC", @AppDataDir & "\TC-Viewer\default.jpg")
    	_FileInstallFromResource("TCVICO", @AppDataDir & "\TC-Viewer\TCVIEWER.ico")
    #EndRegion PRESTART-FUNKTIONEN
    #Region Globale Einstellungen
    Global $FTPserver = 'xxx'
    Global $FTPusername = 'xxx'
    Global $FTPpass = 'xxx'
    #EndRegion Globale Einstellungen
    #Region Hauptgui
    Global $hMain = GUICreate("TC-Viewer "& $SetupOrUpdate, 498, 361, -1, -1,$WS_POPUP+$WS_CAPTION)
    	GUISetFont(8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlCreateLabel("", 0, 314, 508, 2, 0x50020010, 0x00020004)
    	$btnNext0 = GUICtrlCreateButton("Weiter >", 324, 327, 75, 23, $BS_DEFPUSHBUTTON)
    	GUICtrlSetState($btnNext0, $GUI_HIDE)
    	GUICtrlSetState($btnNext0, $GUI_FOCUS)
    	$EXITBTN = GUICtrlCreateButton("Abbrechen", 410, 327, 75, 23)
    #EndRegion
    #Region Willkommen
    	Global $picWiz = GUICtrlCreatePic(@AppDataDir & "\TC-Viewer\default.jpg", 0, 0, 164, 314, 0x5400010E)
    	GUICtrlSetState($picWiz, $GUI_HIDE)
    	Global $labWhite = GUICtrlCreateLabel("", 164, 0, 334, 314)
    	GUICtrlSetState($labWhite, $GUI_HIDE)
    	GUICtrlSetBkColor(-1, 0xFFFFFF)
    	GUICtrlSetState(-1, $GUI_DISABLE)
    	Global $labWelc = GUICtrlCreateLabel("Willkommen beim "&$SetupOrUpdate&" vom TC-Viewer", 180, 16, 293, 46)
    	GUICtrlSetFont(-1, 12, 800, 0, 'MS Shell Dlg')
    	GUICtrlSetState($labWelc, $GUI_HIDE)
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $labAssist = GUICtrlCreateLabel("Dieser Assistent wird Sie durch die Installation vom TC-Viewer (Version: "&$Version&" | "&$UpdateName&") begleiten." & @CRLF & @CRLF & "Es wird empfohlen, vor der Installation alle anderen Programme zu schließen, damit bestimmte Systemdateien ohne Neustart ersetzt werden können." & @CRLF & @CRLF & "Klicken Sie auf Weiter, um fortzufahren.", 180, 73, 293, 211)
    	GUICtrlSetFont(-1, 8.5, 400, 0, 'MS Shell Dlg 2')
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	GUICtrlSetState($labAssist, $GUI_HIDE)
    
    
    #EndRegion
    #Region Registrierung
    	Global $lblHead = GUICtrlCreateLabel("", 0, 0, 498, 57)
    	GUICtrlSetState($lblHead, $GUI_HIDE)
    	GUICtrlSetBkColor(-1, 0xFFFFFF)
    	GUICtrlSetState(-1, $GUI_DISABLE)
    	Global $lblHeadGr = GUICtrlCreateLabel("", 0, 57, 508, 2, 0x50020010, 0x00020004)
    	GUICtrlSetState($lblHeadGr, $GUI_HIDE)
    	Global $lblLicence = GUICtrlCreateLabel("Registrierung", 15, 8, 420, 16)
    	GUICtrlSetState($lblLicence, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 800, 0, "MS Shell Dlg")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	$btnBack1 = GUICtrlCreateButton("< Zurück", 249, 327, 75, 23)
    	GUICtrlSetState($btnBack1, $GUI_HIDE)
    	$btnNext1 = GUICtrlCreateButton("Weiter >", 324, 327, 75, 23, $BS_DEFPUSHBUTTON)
    ;~ 	GUICtrlSetState($btnNext1, $GUI_FOCUS)
    	GUICtrlSetState($btnNext1, $GUI_HIDE)
    	GUICtrlSetState($btnNext1, $GUI_DISABLE)
    	Global $lblReadLic = GUICtrlCreateLabel("Bitte bestätigen Sie folgende Informateionen und ändern diese bei Bedarf.", 23, 26, 413, 26)
    	GUICtrlSetState($lblReadLic, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $icoHead = GUICtrlCreatePic("", 450, 13, 32, 32)
    	GUICtrlSetState($icoHead, $GUI_HIDE)
    	_SetBkIcon(-1,@AppDataDir & "\TC-Viewer\TCVIEWER.ico", 0, 32, 32)
    	Global $lblPress = GUICtrlCreateLabel("Computername:", 23, 75, 100, 24)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPress, $GUI_HIDE)
    	Global $lblPressInput = GUICtrlCreateInput(@ComputerName, 123, 73, 350, 20)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPressInput, $GUI_HIDE)
    	Global $lblPressUN = GUICtrlCreateLabel("Benutzername:", 23, 105, 100, 24)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPressUN, $GUI_HIDE)
    	Global $lblPressUNInput = GUICtrlCreateInput(GetFullName(@UserName), 123, 103, 350, 20)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPressUNInput, $GUI_HIDE)
    	Global $lblPressIP= GUICtrlCreateLabel("IP-Adresse:", 23, 135, 100, 24)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPressIP, $GUI_HIDE)
    	Global $lblPressIPInput = GUICtrlCreateInput(@IPAddress1, 123, 133, 350, 20)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPressIPInput, $GUI_HIDE)
    	Global $lblPressEM= GUICtrlCreateLabel("E-Mail:", 23, 165, 100, 24)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPressEM, $GUI_HIDE)
    	$TRYREADMAIL = "" ; Hier ein Pfad wo ihr die Mailadresse auslesen könnt.
    	Global $lblPressEMInput = GUICtrlCreateInput($TRYREADMAIL, 123, 163, 350, 20)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetState($lblPressEMInput, $GUI_HIDE)
    	$CHK_BACKUPDATA = GUICtrlCreateCheckbox("Erstelle eine Backupdatei vor dem Update.",23,195,450,20)
    	If $SetupOrUpdate = "Setup" Then
    			GUICtrlSetState($CHK_BACKUPDATA,$GUI_UNCHECKED)
    			GUICtrlSetState($CHK_BACKUPDATA,$GUI_DISABLE)
    	Else
    		GUICtrlSetState($CHK_BACKUPDATA,$GUI_CHECKED)
    	EndIf
    	$CHK_PURGEBACKUP = GUICtrlCreateCheckbox("Bereinige alle alten Backupdateien.",23,215,450,20)
    	GUICtrlSetState($CHK_PURGEBACKUP,$GUI_CHECKED)
    	GUICtrlSetState($CHK_PURGEBACKUP, $GUI_HIDE)
    	GUICtrlSetState($CHK_BACKUPDATA, $GUI_HIDE)
    	$radio_ablehnen = GUICtrlCreateCheckbox("Ich bestätige die angegebenen Daten.",23,277,450,20)
    	GUICtrlSetState($radio_ablehnen, $GUI_HIDE)
    
    
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    #EndRegion
    #Region Installationspfad
    	Global $lblHead2 = GUICtrlCreateLabel("", 0, 0, 498, 57)
    	GUICtrlSetState($lblHead2, $GUI_HIDE)
    	GUICtrlSetBkColor(-1, 0xFFFFFF)
    	GUICtrlSetState(-1, $GUI_DISABLE)
    	Global $lblHeadGr2 = GUICtrlCreateLabel("", 0, 57, 508, 2, 0x50020010, 0x00020004)
    	GUICtrlSetState($lblHeadGr2, $GUI_HIDE)
    	Global $lblLicence2 = GUICtrlCreateLabel("Verzeichnisauswahl", 15, 8, 420, 16)
    	GUICtrlSetState($lblLicence2, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 800, 0, "MS Shell Dlg")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $lblReadLic2 = GUICtrlCreateLabel("Bitte wählen Sie das Verzeichnis aus, in dem der TC-Viewer installiet werden soll.", 23, 26, 413, 26)
    	GUICtrlSetState($lblReadLic2, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $icoHead2 = GUICtrlCreatePic("", 450, 13, 32, 32)
    	GUICtrlSetState($icoHead2, $GUI_HIDE)
    	_SetBkIcon(-1, @AppDataDir & "\TC-Viewer\TCVIEWER.ico", 0, 32, 32)
    	$btnBack2 = GUICtrlCreateButton("< Zurück", 249, 327, 75, 23)
    	GUICtrlSetState($btnBack2, $GUI_HIDE)
    	$btnNext2 = GUICtrlCreateButton("Installieren", 324, 327, 75, 23, $BS_DEFPUSHBUTTON)
    	GUICtrlSetState($btnNext2, $GUI_HIDE)
    	Global $instTo = GUICtrlCreateLabel("Der TC-Viewer wird in das unten angegebene Verzeichnis installiert. Falls Sie in ein anderes Verzeichnis installieren möchten, klicken Sie auf Durchsuchen und wählen Sie ein anderes Verzeichnis aus. Klicken Sie auf Installieren, um die Installation zu starten." & @CRLF & @CRLF &"Bitte Installieren Sie den TC-Viewer nicht auf dem Laufwerk C:\ oder C:\Programme", 23, 73, 450, 98)
    	GUICtrlSetState($instTo, $GUI_HIDE)
    	Global $target = GUICtrlCreateGroup("Zielverzeichnis", 23, 187, 450, 57)
    	GUICtrlSetState($target, $GUI_HIDE)
    	If 	$SetupOrUpdate = "Setup" Then
    		Global $inptDir = GUICtrlCreateInput(@MyDocumentsDir & "\TC-Viewer", 40, 210, 310, 21)
    	ElseIf $SetupOrUpdate = "Update" Then
    		Global $inptDir = GUICtrlCreateInput($Readexisttcview, 40, 210, 310, 21)
    	EndIf
    	GUICtrlSetState($inptDir, $GUI_HIDE)
    	Global $btnDir = GUICtrlCreateButton("&Durchsuchen...", 365, 207, -1, 24)
    	GUICtrlSetState($btnDir, $GUI_HIDE)
    	Global $lblNeSp = GUICtrlCreateLabel("Benötigter Speicher: "&$DATASIZETCVIEWER&" MB", 23, 260, 225, 13)
    	GUICtrlSetState($lblNeSp, $GUI_HIDE)
    	If 	$SetupOrUpdate = "Setup" Then
    		$iFreeSpace = DriveSpaceFree("C:\")
    	ElseIf $SetupOrUpdate = "Update" Then
    		$getlw0 = StringLeft($Readexisttcview,3)
    		$iFreeSpace = DriveSpaceFree($getlw0)
    	EndIf
    	$freespacegetGB =$iFreeSpace / 1024
    	$roundfreespace = Round($freespacegetGB,1)
    	Global $lblAvSp = GUICtrlCreateLabel("Verfügbarer Speicher: " & $roundfreespace &" GB" , 23, 276, 225, 13)
    	GUICtrlSetState($lblAvSp, $GUI_HIDE)
    #EndRegion
    #Region Installation
    
    
    	Global $lblHead3 = GUICtrlCreateLabel("", 0, 0, 498, 57)
    	GUICtrlSetState($lblHead3, $GUI_HIDE)
    	GUICtrlSetBkColor(-1, 0xFFFFFF)
    	GUICtrlSetState(-1, $GUI_DISABLE)
    	Global $lblHeadGr3 = GUICtrlCreateLabel("", 0, 57, 508, 2, 0x50020010, 0x00020004)
    	GUICtrlSetState($lblHeadGr3, $GUI_HIDE)
    	Global $lblLicence3 = GUICtrlCreateLabel("Installation", 15, 8, 420, 16)
    	GUICtrlSetState($lblLicence3, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 800, 0, "MS Shell Dlg")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $lblReadLic3 = GUICtrlCreateLabel("Führt die Installation vom TC-Viewer durch.", 23, 26, 413, 26)
    	GUICtrlSetState($lblReadLic3, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $icoHead3 = GUICtrlCreatePic("", 450, 13, 32, 32)
    	GUICtrlSetState($icoHead3, $GUI_HIDE)
    	_SetBkIcon(-1, @AppDataDir & "\TC-Viewer\TCVIEWER.ico", 0, 32, 32)
    	$btnBack3 = GUICtrlCreateButton("< Zurück", 249, 327, 75, 23)
    	GUICtrlSetState($btnBack3, $GUI_HIDE)
    	$btnNext3 = GUICtrlCreateButton("Weiter >", 324, 327, 75, 23, $BS_DEFPUSHBUTTON)
    	GUICtrlSetState($btnNext3, $GUI_HIDE)
    	GUICtrlSetState($btnNext3, $GUI_DISABLE)
    	Global $prog = GUICtrlCreateProgress(23, 89, 450, 18)
    	GUICtrlSetState($prog, $GUI_HIDE)
    	Global $instListView = GUICtrlCreateListView('files', 23, 114, 450, 179, BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_NOCOLUMNHEADER))
    	GUICtrlSetState($instListView, $GUI_HIDE)
    	GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 425)
    #EndRegion
    #Region Installation abgeschlossen
    	Global $lblHead4 = GUICtrlCreateLabel("", 0, 0, 498, 57)
    	GUICtrlSetState($lblHead4, $GUI_HIDE)
    	GUICtrlSetBkColor(-1, 0xFFFFFF)
    	GUICtrlSetState(-1, $GUI_DISABLE)
    	Global $lblHeadGr4 = GUICtrlCreateLabel("", 0, 57, 508, 2, 0x50020010, 0x00020004)
    	GUICtrlSetState($lblHeadGr4, $GUI_HIDE)
    	Global $lblLicence4 = GUICtrlCreateLabel("Installation abgeschlossen", 15, 8, 420, 16)
    	GUICtrlSetState($lblLicence4, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 800, 0, "MS Shell Dlg")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $lblReadLic4 = GUICtrlCreateLabel("Die Installation wurde abgeschlossen. Bitte wählen Sie noch optional aus, über welche Verlinkungen Sie das Programm starten wollen.", 23, 26, 413, 26)
    	GUICtrlSetState($lblReadLic4, $GUI_HIDE)
    	GUICtrlSetFont(-1, 8.5, 400, 0, "MS Shell Dlg 2")
    	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    	Global $icoHead4 = GUICtrlCreatePic("", 450, 13, 32, 32)
    	GUICtrlSetState($icoHead4, $GUI_HIDE)
    	_SetBkIcon(-1, @AppDataDir & "\TC-Viewer\TCVIEWER.ico", 0, 32, 32)
    	$btnNext4 = GUICtrlCreateButton("Fertigstellen", 410, 327, 75, 23)
    	GUICtrlSetState($btnNext4, $GUI_DISABLE)
    	GUICtrlSetState($btnNext4, $GUI_HIDE)
    	$CHKSTARTMENU = GUICtrlCreateCheckbox("Startmenüeintrag erstellen",23,89,300,20)
    	GUICtrlSetState($CHKSTARTMENU, $GUI_HIDE)
    	GUICtrlSetState($CHKSTARTMENU, $GUI_CHECKED)
    	$CHKLINKDESKTOP = GUICtrlCreateCheckbox("Verlinkung auf dem Desktop erstellen",23,109,300,20)
    	GUICtrlSetState($CHKLINKDESKTOP, $GUI_HIDE)
    	GUICtrlSetState($CHKLINKDESKTOP, $GUI_CHECKED)
    	$CHKLINKTASK = GUICtrlCreateCheckbox("Verlinkung in der Taskleiste von Windows",23,129,300,20)
    	GUICtrlSetState($CHKLINKTASK, $GUI_HIDE)
    	GUICtrlSetState($CHKLINKTASK, $GUI_CHECKED)
    	$CHKSTARTAFTERINSTALL = GUICtrlCreateCheckbox("Starte den TC-Viewer nach Abschluss der Installation",23,277,300,20)
    	GUICtrlSetState($CHKSTARTAFTERINSTALL, $GUI_HIDE)
    	GUICtrlSetState($CHKSTARTAFTERINSTALL, $GUI_CHECKED)
    
    
    #EndRegion
    #Region PRESTART GUI
    _showtab1()
    GUISetState(@SW_SHOW, $hMain)
    #EndRegion
    While 1
    	$msg = GUIGetMsg()
    	If $msg = $GUI_EVENT_CLOSE or $msg = $EXITBTN Then
    		_exitInstaller()
    	EndIf
    	If $msg = $btnNext0 Then
    		_hidetab1()
    		_showtab2()
    	EndIf
    
    
    	If $msg = $btnBack1 Then
    		_hidetab2()
    		_showtab1()
    	EndIf
    
    
    	If $msg = $btnNext1 Then
    ;~ 		if GUICtrlRead($lblPressEMInput) = "" and  = $GUI_CHECKED Then
    ;~ 		$askchkmailadd = MsgBox(36,"TC-Viewer | Setup", "Es wurde keine Mailadresse eingetragen. So können keine Update-Informationen gesendet werden. Wollen Sie wirklich fortfahren?")
    ;~ 			if $askchkmailadd = 6 Then
    ;~ 				_hidetab2()
    ;~ 				_showtab3()
    ;~ 			EndIf
    ;~ 		Else
    			_hidetab2()
    			_showtab3()
    ;~ 		EndIf
    
    
    	EndIf
    
    
    	If $msg = $btnBack2 Then
    		_hidetab3()
    		_showtab2()
    	EndIf
    
    
    	If $msg = $btnNext3 Then
    		_hidetab4()
    		_showtab5()
    
    
    	EndIf
    
    
    	If $msg = $btnNext4 Then
    
    
    		$readinstallpath2 = GUICtrlRead($inptDir)
    		$READCHKSTARTMENU = GUICtrlRead($CHKSTARTMENU)
    		If $READCHKSTARTMENU = $GUI_CHECKED Then
    			DirCreate(@StartMenuDir & "\Programme\TC-Viewer")
    			FileCreateShortcut($readinstallpath2 & "\TC-Viewer.exe", @StartMenuDir & "\Programme\TC-Viewer\TC-Viewer.lnk")
    			FileCreateShortcut($readinstallpath2 & "\TC-Viewer-Updater.exe", @StartMenuDir & "\Programme\TC-Viewer\TC-Viewer-Updater.lnk")
    ;~ 			FileCreateShortcut($readinstallpath2 & "\CODE\Uninstall.exe", @StartMenuDir & "\Programme\TC-Viewer\Uninstall.lnk")
    		EndIf
    		$READCHKLINKDESKTOP = GUICtrlRead($CHKLINKDESKTOP)
    		If $READCHKLINKDESKTOP = $GUI_CHECKED Then
    			FileCreateShortcut($readinstallpath2 & "\TC-Viewer.exe", @DesktopDir & "\TC-Viewer.lnk")
    		EndIf
    
    
    		$READCHKLINKTASK = GUICtrlRead($CHKLINKTASK)
    		If $READCHKLINKTASK = $GUI_CHECKED Then
    			_PinTaskbar($readinstallpath2 &"\TC-Viewer.exe")
    		EndIf
    
    
    
    
    		$READCHKSTARTAFTERINST = GUICtrlRead($CHKSTARTAFTERINSTALL)
    		If $READCHKSTARTAFTERINST = $GUI_CHECKED Then
    			ShellExecute($readinstallpath2 & "\TC-Viewer.exe")
    		EndIf
    
    
    		_exitInstaller2()
    	EndIf
    
    
    	If $msg = $btnNext2 Then
    		$readinstallpath = GUICtrlRead($inptDir)
    		$readinstallpath2 = StringLeft($readinstallpath,10)
    		if $readinstallpath = "C:\" or $readinstallpath2 = "C:\Program" Then
    			MsgBox(16,"TC-Viewer","Bitte wählen Sie einen anderen Pfad aus.")
    		Else
    			If ProcessExists("TC-Viewer.exe") Then
    			$STILLRUNNING = MsgBox(20, "TC-Viewer Installation", "Der »TC-Viewer« ist noch gestartet und muss für das Update beendet werden. Jetzt schließen?")
    				If $STILLRUNNING = 6 Then
    					ProcessClose("TC-Viewer.exe")
    					ProcessClose("TC-Viewer-Updater.exe")
    					ProcessClose("int.exe")
    ;~ 					usw usw usw
    
    
    					_installroutine()
    				If $STILLRUNNING = 7 Then
    						Sleep(300)
    					EndIf
    				EndIf
    
    
    		Else
    			_installroutine()
    		EndIf
    		EndIf
    	EndIf
    
    
    	If $msg = $btnBack3 Then
    		_hidetab4()
    		_showtab3()
    	EndIf
    
    
    	if $msg = $btnDir Then
    	$filesavetcviewer = FileSelectFolder("Installationsverzeichnis TC-Viewer","",7)
    
    
    		If @error Then
    			Sleep(50)
    		Else
    			GUICtrlSetData($inptDir, $filesavetcviewer)
    			$getlw = StringLeft($filesavetcviewer,3)
    		EndIf
    	EndIf
    
    
    	Select
    		Case $msg = $radio_ablehnen And BitAND(GUICtrlRead($radio_ablehnen), $GUI_CHECKED) = $GUI_CHECKED
    			GUICtrlSetState($btnNext1, $GUI_ENABLE)
    			GUICtrlSetState($btnNext1, $GUI_FOCUS)
    	EndSelect
    
    
    WEnd
    #Region InstallationsRoutine
    Func _installroutine()
    		GUICtrlSetState($EXITBTN,$GUI_DISABLE)
    		GUICtrlSetState($btnBack3,$GUI_DISABLE)
    		_hidetab3()
    		_showtab4()
    		_uploaddata()
    		$readinstallpath = GUICtrlRead($inptDir)
    		GUICtrlSetData($prog,0)
    		DirCreate($readinstallpath & "\CODE")
    		DirCreate($readinstallpath & "\CODE\APPS")
    		DirCreate($readinstallpath & "\DATA\BACKUP")
    		If GUICtrlRead($CHK_PURGEBACKUP) = $GUI_CHECKED Then FileDelete($readinstallpath & "\DATA\BACKUP")
    		If GUICtrlRead($CHK_BACKUPDATA) = $GUI_CHECKED Then _BuildInZIP($readinstallpath & "\DATA\BACKUP\"&@YEAR&"-"&@MON&"-"&@MDAY&"_"&@HOUR&"-"&@MIN&"-"&@SEC&"-BACKUP.zip",$readinstallpath)
    		GUICtrlSetData($prog,3)
    		GUICtrlCreateListViewItem("Installiere - TC-Viewer.exe...",$instListView)
    		_GUICtrlListView_Scroll($instListView, 0, 1000)
    		_FileInstallFromResource("TCVIEWER", $readinstallpath & "\TC-Viewer.exe", True)
    		GUICtrlSetData($prog,6)
    		GUICtrlCreateListViewItem("Installiere - TC-Viewer-Updater.exe...",$instListView)
    		_GUICtrlListView_Scroll($instListView, 0, 1000)
    		_FileInstallFromResource("TCVIEWERUPDATER", $readinstallpath & "\TC-Viewer-Updater.exe", True)
    		GUICtrlSetData($prog,9)
    		GUICtrlCreateListViewItem("Installiere - TCVRIB.dll...",$instListView)
    		_GUICtrlListView_Scroll($instListView, 0, 1000)
    		_FileInstallFromResource("TCVRIB", $readinstallpath & "\TCVRIB.dll", True)
    		GUICtrlSetData($prog,12)
    		GUICtrlCreateListViewItem("Installiere - CODE\int.exe...",$instListView)
    		_GUICtrlListView_Scroll($instListView, 0, 1000)
    ;~ usw
    ;~ usw
    ;~ usw
    ;~ usw
    ;~ usw
    ;~ usw
    ;~ usw
    ;~ usw
    
    
    		GUICtrlCreateListViewItem("Installation erfolgreich abgeschlossen.",$instListView)
    		_GUICtrlListView_Scroll($instListView, 0, 1000)
    		GUICtrlSetData($prog,100)
    		GUICtrlSetState($btnNext3, $GUI_ENABLE)
    		_FileCreate($readinstallpath & "\CODE\NewInstall")
    EndFunc
    #EndRegion
    #Region Allgemeine Funktionen
    Func GetFullName($sUserName)
        $colItems = ""
        $strComputer = "localhost"
    
    
        $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
        $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount WHERE Name = '" & $sUserName &  "'", "WQL", 0x10 + 0x20)
    
    
        If IsObj($colItems) then
           For $objItem In $colItems
              Return $objItem.FullName
           Next
        Else
           Return SetError(1,0,"")
        Endif
    EndFunc
    Func _BuildInZIP($sPath, $s_a_ToZip, $fUnZip=False, $iIndexBase=1, $fOverwrite=True)
    	Local $fh, $sNul = '', $sZIPHeader, $objShell = ObjCreate("Shell.Application"), $objZipOrdner, $err = 0
    	$sPath = FileGetLongName($sPath,1)
    	If $fUnZip Then
    		Local $temp, $objZip
    		If Not FileExists($s_a_ToZip) Then DirCreate($s_a_ToZip)
    		$temp = $objShell.Namespace($s_a_ToZip)
    		$objZip = $objShell.Namespace($sPath)
    		$temp.CopyHere($objZip.Items)
    		Return 1
    	EndIf
    	If (Not $fOverwrite) And FileExists($sPath) Then Return SetError(1,0,0)
    	If StringRight($sPath, 4) <> '.zip' Then Return SetError(2,0,0)
    	For $i = 1 To 18
    		$sNul &= Chr(0)
    	Next
    	$sZIPHeader = Chr(80) & Chr(75) & Chr(5) & Chr(6) & $sNul
    	$fh = FileOpen($sPath, 10)
    	FileWrite($fh, $sZIPHeader)
    	FileClose($fh)
    	$objZipOrdner = $objShell.Namespace($sPath)
    	If Not IsArray($s_a_ToZip) Then
    		If Not FileExists($s_a_ToZip) Then Return SetError(3,1,0)
    		$objZipOrdner.CopyHere($s_a_ToZip)
    		Sleep(1000)
    		Return 1
    	EndIf
    	For $i = $iIndexBase To UBound($s_a_ToZip) -1
    		If Not FileExists($s_a_ToZip[$i]) Then
    			$err += 1
    			ContinueLoop
    		EndIf
    		$objZipOrdner.CopyHere($s_a_ToZip[$i])
    		Sleep(1000)
    	Next
    	If $err Then Return SetError(3,$err,0)
    	Return 1
    EndFunc  ;==>_BuildInZIP
    
    
    Func _SetBkIcon($BildID, $IconName, $IconID, $Width, $Height)
    	$hIcon = _Icons_Icon_Extract($IconName, $IconID, $Width, $Height)
    	$hBitmap = _Icons_Bitmap_CreateFromIcon($hIcon)
    	_SetHImage($BildID, $hBitmap)
    	_WinAPI_DeleteObject($hBitmap)
    	_WinAPI_DestroyIcon($hIcon)
    EndFunc   ;==>_SetBkIcon
    
    
    Func _exitInstaller()
    	$ASKENDSETUP = MsgBox(36, "TC-Viewer | Setup", "Wollen Sie das Setup vom TC-Viewer wirklich beenden?")
    	If $ASKENDSETUP = 6 Then
    		DirRemove(@AppDataDir & "\TC-Viewer",1)
    		Exit
    	EndIf
    EndFunc
    
    
    Func _exitInstaller2()
    	DirRemove(@AppDataDir & "\TC-Viewer",1)
    	Exit
    EndFunc
    
    
    
    
    
    
    Func _FileInstallFromResource($sResName, $sDest, $isCompressed = False, $iUncompressedSize = Default)
        Local $bBytes = _GetResourceAsBytes($sResName, $isCompressed, $iUncompressedSize)
        If @error Then Return SetError(@error, 0, 0)
        FileDelete($sDest)
        FileWrite($sDest, $bBytes)
    EndFunc
    
    
    
    
    Func _GetResourceAsBytes($sResName, $isCompressed = False, $iUncompressedSize = Default)
    
    
    
    
        Local $hMod = _WinAPI_GetModuleHandle("")
        Local $hRes = _WinAPI_FindResource($hMod, 10, $sResName)
        If @error Or Not $hRes Then Return SetError(1, 0, 0)
        Local $dSize = _WinAPI_SizeOfResource($hMod, $hRes)
        If @error Or Not $dSize Then Return SetError(2, 0, 0)
        Local $hLoad = _WinAPI_LoadResource($hMod, $hRes)
        If @error Or Not $hLoad Then Return SetError(3, 0, 0)
        Local $pData = _WinAPI_LockResource($hLoad)
        If @error Or Not $pData Then Return SetError(4, 0, 0)
        Local $tBuffer = DllStructCreate("byte[" & $dSize & "]")
        _WinAPI_MoveMemory(DllStructGetPtr($tBuffer), $pData, $dSize)
        If $isCompressed Then
            Local $oBuffer
           _WinAPI_LZNTDecompress($tBuffer, $oBuffer, $iUncompressedSize)
            If @error Then Return SetError(5, 0, 0)
            $tBuffer = $oBuffer
        EndIf
        Return DllStructGetData($tBuffer, 1)
    EndFunc
    
    
    
    
    Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iUncompressedSize = Default)
        ; if no uncompressed size given, use 16x the input buffer
        If $iUncompressedSize = Default Then $iUncompressedSize = 16 * DllStructGetSize($tInput)
        Local $tBuffer, $ret
        $tOutput = 0
        $tBuffer = DllStructCreate("byte[" & $iUncompressedSize & "]")
        If @error Then Return SetError(1, 0, 0)
        $ret = DllCall("ntdll.dll", "long", "RtlDecompressBuffer", "ushort", 2, "struct*", $tBuffer, "ulong", $iUncompressedSize, "struct*", $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
    
    
    Func _PinTaskbar($File, $Pin = True)
        If @OSBuild < 7600  Then Return SetError(1) ; Windows 7 only
        If Not FileExists($File) Then Return SetError(2)
    
    
        local $sFolder = StringRegExpReplace($File, "(^.*\\)(.*)", "\1")
        local $sFile = StringRegExpReplace($File, "^.*\\", "")
    
    
        local $oShell     = ObjCreate("Shell.Application")
        local $oFolder            = $oShell.NameSpace($sFolder)
        local $oFolderItem        = $oFolder.ParseName($sFile)
        local $oFolderItemVerbs   = $oFolderItem.Verbs
        local $hInstance = _WinAPI_LoadLibraryEx("shell32.dll", $LOAD_LIBRARY_AS_DATAFILE)
        local $DoVerb = ''
    
    
        If $hInstance Then
            IF $Pin = 1 Then
                local $DoVerb = _WinAPI_LoadString($hInstance, 5386)
            Else
                local $DoVerb = _WinAPI_LoadString($hInstance, 5387)
            EndIf
            _WinAPI_FreeLibrary($hInstance)
        EndIf
    
    
        IF $DoVerb = '' Then Return SetError(3) ; $DoVerb string couldn't received
    
    
        For $i = 0 To $oFolderItemVerbs.Count - 1
            If $oFolderItemVerbs.Item($i).Name = $DoVerb Then
                $oFolderItemVerbs.Item($i).DoIt
                Return
            EndIf
        Next
        Return SetError(4) ; $DoVerb string not in menu
    
    
    EndFunc
    #EndRegion
    #Region UPLOADDATA
    Func _uploaddata()
    Global $FILEPATH = @TempDir & "\TCDATA.cw1"
    
    
    IniWrite($FILEPATH,"INSTALLDATA","ComputernameUSDA",GUICtrlRead($lblPressInput))
    IniWrite($FILEPATH,"INSTALLDATA","BenutzernameUSDA",GUICtrlRead($lblPressUNInput))
    IniWrite($FILEPATH,"INSTALLDATA","IPUSDA",GUICtrlRead($lblPressIPInput))
    IniWrite($FILEPATH,"INSTALLDATA","EMAILUSDA",GUICtrlRead($lblPressEMInput))
    IniWrite($FILEPATH,"INSTALLDATA","Version",$Version)
    IniWrite($FILEPATH,"INSTALLDATA","Time",@MDAY&"."&@MON&"."&@YEAR&" "&@HOUR&":"&@MIN&":"&@SEC)
    
    
    
    
    $hOpen = _FTP_Open('MyFTP Control')
    $hConn = _FTP_Connect($hOpen, $FTPserver, $FTPusername, $FTPpass,1,21)
    			_FTP_DirCreate($hConn,"/TCFTP/1INSTALLDATA")
    			_FTP_ProgressUpload($hConn, $FILEPATH, "/TCFTP/1INSTALLDATA/"&@ComputerName&"-"&@MDAY&"-"&@MON&"-"&@YEAR&"-"&@HOUR&@MIN&@SEC&".cw1", "")
    $Ftpc = _FTP_Close($hConn)
    $Ftpo = _FTP_Close($hOpen)
    
    
    FileDelete($FILEPATH)
    EndFunc
    
    
    #EndRegion
    #Region SHOW / HIDE TABS
    Func _hidetab2()
    	GUICtrlSetState($lblHead, $GUI_HIDE)
    	GUICtrlSetState($lblHeadGr, $GUI_HIDE)
    	GUICtrlSetState($lblReadLic, $GUI_HIDE)
    	GUICtrlSetState($lblLicence, $GUI_HIDE)
    	GUICtrlSetState($lblReadLic, $GUI_HIDE)
    	GUICtrlSetState($icoHead, $GUI_HIDE)
    	GUICtrlSetState($lblPress, $GUI_HIDE)
    ;~ 	GUICtrlSetState($richEditLic, $GUI_HIDE)
    	GUICtrlSetState($radio_ablehnen, $GUI_HIDE)
    ;~ 	GUICtrlSetState($radio_annehmen, $GUI_HIDE)
    	GUICtrlSetState($btnBack1, $GUI_HIDE)
    	GUICtrlSetState($btnNext1, $GUI_HIDE)
    ;~ 	GUICtrlSetState($radio_annehmen, $GUI_HIDE)
    	GUICtrlSetState($radio_ablehnen, $GUI_HIDE)
    	GUICtrlSetState($lblPressInput, $GUI_HIDE)
    	GUICtrlSetState($lblPressUN, $GUI_HIDE)
    	GUICtrlSetState($lblPressUNInput, $GUI_HIDE)
    	GUICtrlSetState($lblPressIP, $GUI_HIDE)
    	GUICtrlSetState($lblPressIPInput, $GUI_HIDE)
    	GUICtrlSetState($lblPressEM, $GUI_HIDE)
    	GUICtrlSetState($lblPressEMInput, $GUI_HIDE)
    	GUICtrlSetState($CHK_PURGEBACKUP, $GUI_HIDE)
    	GUICtrlSetState($CHK_BACKUPDATA, $GUI_HIDE)
    
    
    EndFunc
    
    
    Func _showtab2()
    		GUICtrlSetState($lblHead, $GUI_show)
    	GUICtrlSetState($lblHeadGr, $GUI_show)
    	GUICtrlSetState($lblReadLic, $GUI_show)
    	GUICtrlSetState($lblLicence, $GUI_show)
    	GUICtrlSetState($lblReadLic, $GUI_show)
    	GUICtrlSetState($icoHead, $GUI_show)
    	GUICtrlSetState($lblPress, $GUI_show)
    ;~ 	GUICtrlSetState($richEditLic, $GUI_show)
    	GUICtrlSetState($radio_ablehnen, $GUI_show)
    ;~ 	GUICtrlSetState($radio_annehmen, $GUI_show)
    	GUICtrlSetState($btnBack1, $GUI_show)
    	GUICtrlSetState($btnNext1, $GUI_show)
    ;~ 	GUICtrlSetState($radio_annehmen, $GUI_show)
    	GUICtrlSetState($radio_ablehnen, $GUI_show)
    	GUICtrlSetState($lblPressInput, $GUI_show)
    	GUICtrlSetState($lblPressUN, $GUI_show)
    	GUICtrlSetState($lblPressUNInput, $GUI_show)
    	GUICtrlSetState($lblPressIP, $GUI_show)
    	GUICtrlSetState($lblPressIPInput, $GUI_show)
    	GUICtrlSetState($lblPressEM, $GUI_show)
    	GUICtrlSetState($lblPressEMInput, $GUI_show)
    	GUICtrlSetState($CHK_PURGEBACKUP, $GUI_show)
    	GUICtrlSetState($CHK_BACKUPDATA, $GUI_show)
    	GUICtrlSetState($btnNext1, $GUI_FOCUS)
    
    
    EndFunc
    
    
    Func _showtab3()
    	GUICtrlSetState($lblHead2, $GUI_show)
    	GUICtrlSetState($lblHeadGr2, $GUI_show)
    	GUICtrlSetState($instTo, $GUI_show)
    	GUICtrlSetState($target, $GUI_show)
    	GUICtrlSetState($inptDir, $GUI_show)
    	GUICtrlSetState($btnDir, $GUI_show)
    	GUICtrlSetState($lblNeSp, $GUI_show)
    	GUICtrlSetState($lblAvSp, $GUI_show)
    	GUICtrlSetState($lblLicence2, $GUI_show)
    	GUICtrlSetState($lblReadLic2, $GUI_show)
    	GUICtrlSetState($icoHead2, $GUI_show)
    	GUICtrlSetState($btnBack2, $GUI_show)
    	GUICtrlSetState($btnNext2, $GUI_show)
    	GUICtrlSetState($btnNext2, $GUI_FOCUS)
    EndFunc
    
    
    Func _hidetab3()
    	GUICtrlSetState($lblHead2, $GUI_HIDE)
    	GUICtrlSetState($lblHeadGr2, $GUI_HIDE)
    	GUICtrlSetState($instTo, $GUI_HIDE)
    	GUICtrlSetState($target, $GUI_HIDE)
    	GUICtrlSetState($inptDir, $GUI_HIDE)
    	GUICtrlSetState($btnDir, $GUI_HIDE)
    	GUICtrlSetState($lblNeSp, $GUI_HIDE)
    	GUICtrlSetState($lblAvSp, $GUI_HIDE)
    	GUICtrlSetState($lblLicence2, $GUI_HIDE)
    	GUICtrlSetState($lblReadLic2, $GUI_HIDE)
    	GUICtrlSetState($icoHead2, $GUI_HIDE)
    	GUICtrlSetState($btnBack2, $GUI_HIDE)
    	GUICtrlSetState($btnNext2, $GUI_HIDE)
    EndFunc
    
    
    Func _showtab1()
    	GUICtrlSetState($picWiz, $GUI_show)
    	GUICtrlSetState($labWhite, $GUI_show)
    	GUICtrlSetState($labWelc, $GUI_show)
    	GUICtrlSetState($labAssist, $GUI_show)
    	GUICtrlSetState($btnNext0, $GUI_show)
    	GUICtrlSetState($btnNext0, $GUI_FOCUS)
    
    
    EndFunc
    
    
    Func _hidetab1()
    	GUICtrlSetState($picWiz, $GUI_HIDE)
    	GUICtrlSetState($labWhite, $GUI_HIDE)
    	GUICtrlSetState($labWelc, $GUI_HIDE)
    	GUICtrlSetState($labAssist, $GUI_HIDE)
    	GUICtrlSetState($btnNext0, $GUI_HIDE)
    EndFunc
    
    
    Func _showtab4()
    	GUICtrlSetState($lblHead3, $GUI_show)
    	GUICtrlSetState($lblHeadGr3, $GUI_show)
    	GUICtrlSetState($lblLicence3, $GUI_show)
    	GUICtrlSetState($lblReadLic3, $GUI_show)
    	GUICtrlSetState($icoHead3, $GUI_show)
    	GUICtrlSetState($btnBack3, $GUI_show)
    	GUICtrlSetState($btnNext3, $GUI_show)
    	GUICtrlSetState($prog, $GUI_show)
    	GUICtrlSetState($instListView, $GUI_show)
    	GUICtrlSetState($btnNext3, $GUI_FOCUS)
    EndFunc
    
    
    Func _hidetab4()
    	GUICtrlSetState($lblHead3, $GUI_HIDE)
    	GUICtrlSetState($lblHeadGr3, $GUI_HIDE)
    	GUICtrlSetState($lblLicence3, $GUI_HIDE)
    	GUICtrlSetState($lblReadLic3, $GUI_HIDE)
    	GUICtrlSetState($icoHead3, $GUI_HIDE)
    	GUICtrlSetState($btnBack3, $GUI_HIDE)
    	GUICtrlSetState($btnNext3, $GUI_HIDE)
    	GUICtrlSetState($prog, $GUI_HIDE)
    	GUICtrlSetState($instListView, $GUI_HIDE)
    EndFunc
    
    
    Func _showtab5()
    	GUICtrlSetState($lblHead4, $GUI_show)
    	GUICtrlSetState($lblHeadGr4, $GUI_show)
    	GUICtrlSetState($lblLicence4, $GUI_show)
    	GUICtrlSetState($lblReadLic4, $GUI_show)
    	GUICtrlSetState($icoHead4, $GUI_show)
    ;~ 	GUICtrlSetState($btnBack3, $GUI_show)
    	GUICtrlSetState($btnNext4, $GUI_show)
    	GUICtrlSetState($EXITBTN, $GUI_HIDE)
    	GUICtrlSetState($CHKSTARTMENU, $GUI_show)
    	GUICtrlSetState($CHKLINKDESKTOP, $GUI_show)
    	GUICtrlSetState($CHKSTARTAFTERINSTALL, $GUI_show)
    	GUICtrlSetState($CHKLINKTASK, $GUI_show)
    	GUICtrlSetState($btnNext4, $GUI_ENABLE)
    	GUICtrlSetState($btnNext4, $GUI_FOCUS)
    
    
    EndFunc
    
    
    Func _hidetab5()
    	GUICtrlSetState($lblHead4, $GUI_HIDE)
    	GUICtrlSetState($lblHeadGr4, $GUI_HIDE)
    	GUICtrlSetState($lblLicence4, $GUI_HIDE)
    	GUICtrlSetState($lblReadLic4, $GUI_HIDE)
    	GUICtrlSetState($icoHead4, $GUI_HIDE)
    ;~ 	GUICtrlSetState($btnBack3, $GUI_HIDE)
    	GUICtrlSetState($btnNext4, $GUI_HIDE)
    	GUICtrlSetState($CHKSTARTMENU, $GUI_HIDE)
    	GUICtrlSetState($CHKLINKDESKTOP, $GUI_HIDE)
    	GUICtrlSetState($CHKLINKTASK, $GUI_HIDE)
    	GUICtrlSetState($CHKSTARTAFTERINSTALL, $GUI_HIDE)
    	GUICtrlSetState($EXITBTN, $GUI_show)
    
    
    EndFunc
    
    
    #EndRegion
    Alles anzeigen
  • DeskStream 2 Release Candidate 1.8

    • KriZza
    • 29. April 2015 um 10:02

    Ja werde ich machen. Das dauert allerdings noch etwas ;) Kann immer nur nebenbei daran arbeiten und da fehlen noch ein paar wichtige Funktionen.

    @Andy du Hast geschrieben, dass du noch irgendwo eine Version hast, in der Tastaturanschläge übermittelt werden? Hast du die noch zufällig parat? Das wäre die Mega-Funktion überhaupt. :)

  • DeskStream 2 Release Candidate 1.8

    • KriZza
    • 24. April 2015 um 16:36

    So habe mich einmal ein bisschen probiert und ein ziemlich lauffähiges Multi-TCP-Thumbnail-Server-Client System aufgesetzt. :D ... danke für das TCP Script an Protex (TCP Chat) Das als Basis gedient hat.

    Eine GUI gibt es nicht. Ich nutze die Bilder als Basis um die in einer GUI weiter zu verarbeiten.

    Server:

    [autoit]


    #include <Array.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiEdit.au3>
    #include <TCP_own2.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    Global $userArray[1], $DataString
    $hConsole = GUICreate("Server",200,200,1,1)
    $hConsoleList = GUICtrlCreateEdit("",10,10,180,180,$ES_READONLY)
    _consoleWrite('Server gestartet!')
    _consoleWrite('Server IP : ' &@IPAddress1)
    GUISetState()
    $hServer = _TCP_Server_Create(88)
    _TCP_RegisterEvent($hServer, $TCP_NEWCLIENT, "NewClient")
    _TCP_RegisterEvent($hServer, $TCP_DISCONNECT, "Disconnect")
    _TCP_RegisterEvent($hServer, $TCP_RECEIVE, "_Received")
    While 1
    $msg = GUIGetMsg()
    if $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd
    Func _consoleWrite($String)
    $DataString = $DataString&@CRLF&$String
    GUICtrlSetData($hConsoleList,$DataString)
    _GUICtrlEdit_LineScroll($hConsoleList, 0, _GUICtrlEdit_GetLineCount($hConsoleList))
    EndFunc
    Func _FormatRecieved($String)
    $aArray = StringSplit($String,'~',2)
    Return $aArray
    EndFunc
    Func _Received($hSocket, $sReceived, $iError)
    $sReceived = _FormatRecieved($sReceived)
    If $sReceived[0] = 'clientAdd' Then
    _UserArraydel($sReceived[1],$hSocket, $iError)
    _UserArrayAdd($sReceived[1],$hSocket, $iError)
    ElseIf $sReceived[0] = 'clientdel' Then
    _UserArraydel($sReceived[1],$hSocket, $iError)
    Else
    $nickworkname = IniRead(@ScriptDir & "\CODE\thumbnailadd.cw1",@IPAddress1,"Workname","notfound")
    $FILEREC = @ScriptDir & "\DATA\"&$nickworkname&".jpg"
    ;~ MsgBox(0,"",$sReceived[0])
    $openfile = FileOpen($FILEREC,26)
    $openfile2 = BinaryToString($sReceived[0])
    $openfile2 = StringTrimLeft($openfile2,11)
    $NEWDATA = StringToBinary($openfile2)
    FileWrite($openfile,$NEWDATA)
    FileClose($openfile)
    ENdif
    EndFunc
    Func NewClient($hSocket, $iError)
    _TCP_Send($hSocket, 'Connected')
    EndFunc
    Func Disconnect($hSocket, $iError)
    _consoleWrite("Client verlassen."&@CRLF&"(Socket: "&$hSocket&')')
    EndFunc
    Func _UserArrayAdd($Nick,$hSocket, $iError)
    IniWrite(@ScriptDir & "\CODE\thumbnailadd.cw1",@IPAddress1,"Workname",$Nick)
    _consoleWrite("Client verbunden!"&@CRLF&"(Nickname: "&$Nick& " Socket: "&$hSocket&')')
    _ArrayAdd($userArray,$Nick)
    _sendUserArray($hSocket,$iError)
    EndFunc
    Func _UserArraydel($Nick,$hSocket, $iError)
    $index = _ArraySearch($userArray,$Nick,1,UBound($userArray)-1)
    If $index > 0 Then
    _ArrayDelete($userArray,$index)
    _sendUserArray($hSocket, $iError)
    EndIf
    EndFunc
    Func _sendUserArray($hSocket, $iError)
    $userString = _ArrayToString($userArray)
    _TCP_Server_Broadcast('userArray~'&$userString)
    EndFunc

    [/autoit]

    Client:

    [autoit]


    #include <Date.au3>
    #include <EditConstants.au3>
    #include <File.au3>
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <IE.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <TCP_own2.au3>
    #include <Array.au3>
    #include <ScreenCapture.au3>
    #include <GDIPlus.au3>
    #include-once
    Global $GUITitle="Multi-TCP-Screenshot-Transfer"
    Global $BackColor = 0xFFFFFF
    Global $ServerPort = 88
    Global $NickName = @IPAddress1
    Global $ServerIP = @IPAddress1
    Global $constatus = 'Disconnected'
    Global $hSocket, $iError, $hClient
    Global $connected = False
    Global $LastSendString
    Global $FILE = @ScriptDir & "\CODE\thumbnail.jpg"
    _Try2Connect()
    While 1
    _ScreenCapture_Capture($FILE, 0, 0, -1, -1, True)
    _GDIPlus_Startup()
    $h_img = _ImageResize($FILE, 70, 44,$FILE)
    _GDIPlus_Shutdown ()
    Sleep(2000)
    If $constatus = 'Connected' Then _Try2Send()
    If $constatus = 'Disconnected' and $connected = False Then _Try2Connect()
    WEnd
    Func _Try2Connect()
    If $connected = False Then
    $hClient = _TCP_Client_Create($ServerIP, 88)
    _TCP_RegisterEvent($hClient, $TCP_CONNECT, "_Connected")
    _TCP_RegisterEvent($hClient, $TCP_RECEIVE, "_Received")
    _TCP_RegisterEvent($hClient, $TCP_DISCONNECT, "_Disconnected")
    Else
    _Disconnected($hClient, $iError)
    EndIf
    EndFunc
    Func _Connected()
    _TCP_Send($hClient,'clientAdd~'&$NickName)
    $constatus = 'Connected'
    Global $connected = True
    EndFunc
    Func _FormatRecieved($String)
    $aArray = StringSplit($String,'~',2)
    Return $aArray
    EndFunc
    Func _Received($hClient, $sReceived, $iError)
    $sReceived = _FormatRecieved($sReceived)
    If $sReceived[0] = 'Connected' Then
    _Connected()
    EndIf
    EndFunc
    Func _Disconnected($hClient, $iError)
    $connected = False
    $constatus = 'Disconnected'
    _TCP_Send($hClient,'clientdel~'&$NickName)
    _TCP_Client_Stop($hClient)
    EndFunc
    Func _Try2Send()
    $fileopen = FileOpen($FILE)
    $Readfile = FileRead($fileopen)
    _TCP_Send($hClient, 'picdesktop~'&$Readfile)
    FileClose($fileopen)
    EndFunc
    Func _exit()
    TCPShutdown()
    Exit
    EndFunc
    Func _ImageResize($sInImage, $newW, $newH, $sOutImage = "")
    Local $oldImage, $GC, $newBmp, $newGC
    If $sOutImage = "" Then _GDIPlus_Startup()
    ; Load Image
    $oldImage = _GDIPlus_ImageLoadFromFile($sInImage)
    ;Create New image
    $GC = _GDIPlus_ImageGetGraphicsContext($oldImage)
    $newBmp = _GDIPlus_BitmapCreateFromGraphics($newW, $newH, $GC)
    $newGC = _GDIPlus_ImageGetGraphicsContext($newBmp)
    ;Draw
    _GDIPlus_GraphicsDrawImageRect($newGC, $oldImage, 0, 0, $newW, $newH)
    ;Clenaup
    _GDIPlus_GraphicsDispose($GC)
    _GDIPlus_GraphicsDispose($newGC)
    _GDIPlus_ImageDispose($oldImage)
    If $sOutImage = "" Then
    Return $newBmp ;
    Else
    _GDIPlus_ImageSaveToFile($newBmp, $sOutImage)
    _GDIPlus_BitmapDispose($newBmp)
    _GDIPlus_Shutdown()
    Return 1
    EndIf
    EndFunc ;==>_ImageResize

    [/autoit]

    Include TCP_own2.au3

    [autoit]


    #cs ----------------------------------------------------------------------------
    AutoIt Version: 3.3.0.0
    Author: Kip
    Script Function:
    TCP UDF v3
    #ce ----------------------------------------------------------------------------
    ; Script Start - Add your code below here
    #cs
    Functions:
    _TCP_Server_Create($iPort, $sIP="0.0.0.0")
    _TCP_Server_Broadcast($sData)
    _TCP_Server_ClientList()
    _TCP_Server_ClientIP($hSocket)
    _TCP_Server_DisconnectClient($hSocket)
    _TCP_Server_Stop()
    _TCP_Client_Create($sIP , $iPort)
    _TCP_Client_Stop($hSocket)
    _TCP_Send($hSocket, $sText)
    _TCP_RegisterEvent($hSocket, $iEvent, $sFunction)
    Register event values:
    $TCP_SEND ; Function ($hSocket, $iError)
    $TCP_RECEIVE ; Function ($hSocket, $sReceived, $iError)
    $TCP_CONNECT ; Function ($hSocket, $iError) => Client only
    $TCP_DISCONNECT ; Function ($hSocket, $iError)
    $TCP_NEWCLIENT ; Function ($hSocket, $iError) => Server only
    #ce
    Global Const $FD_READ = 1
    Global Const $FD_WRITE = 2
    Global Const $FD_OOB = 4
    Global Const $FD_ACCEPT = 8
    Global Const $FD_CONNECT = 16
    Global Const $FD_CLOSE = 32
    Global $hWs2_32 = -1
    Global Const $TCP_SEND = 1
    Global Const $TCP_RECEIVE = 2
    Global Const $TCP_CONNECT = 4
    Global Const $TCP_DISCONNECT = 8
    Global Const $TCP_NEWCLIENT = 16
    TCPStartup()
    Global Const $__TCP_WINDOW = GUICreate("Async Sockets UDF")
    Global $__TCP_SOCKETS[1][7]
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Server_Create
    ; Description ...: Initializes the server.
    ; Syntax.........: _TCP_Server_Create($iPort, $sIP="0.0.0.0")
    ; Parameters ....: $iPort - The port number the server should listen to.
    ; $sIP - IP address. (Default = "0.0.0.0")
    ; Return values .: The socket handle.
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......: Only 1 server can be created per script.
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Server_Create($iPort, $sIP="0.0.0.0")
    Local $hListenSocket = ___ASocket()
    ___ASockSelect( $hListenSocket, $__TCP_WINDOW, 0x0400, $FD_ACCEPT)
    GUIRegisterMsg( 0x0400, "___TCP_OnAccept" )
    ___ASockListen( $hListenSocket, $sIP, $iPort )
    $__TCP_SOCKETS[0][0] = $hListenSocket
    $__TCP_SOCKETS[0][1] = 0x0400
    Return $hListenSocket
    EndFunc
    Func ___TCP_OnAccept($hWnd, $iMsgID, $WParam, $LParam)
    Local $hSocket = $WParam
    Local $iError = ___HiWord( $LParam )
    Local $iEvent = ___LoWord( $LParam )
    Local $hClient, $uBound
    Abs($hWnd) ; Stupid AU3Check...
    If $iMsgID = $__TCP_SOCKETS[0][1] Then
    If $iEvent = $FD_ACCEPT Then
    If Not $iError Then
    ReDim $__TCP_SOCKETS[UBound($__TCP_SOCKETS)+1][7]
    $uBound = UBound($__TCP_SOCKETS)
    $hClient = TCPAccept($hSocket)
    ___ASockSelect($hClient, $__TCP_WINDOW, 0x0400 + $uBound - 1, BitOR($FD_READ, $FD_WRITE, $FD_CLOSE))
    GUIRegisterMsg(0x0400 + $uBound - 1, "___TCP_Server_OnSocketEvent" )
    $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][0] = $hClient
    $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][1] = 0x0400 + $uBound - 1
    Call($__TCP_SOCKETS[0][6], $hClient, $iError)
    Else
    Call($__TCP_SOCKETS[0][6], 0, $iError)
    EndIf
    ElseIf $iEvent = $FD_CONNECT Then
    Call($__TCP_SOCKETS[0][4], $hSocket, $iError)
    EndIf
    EndIf
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Client_Stop
    ; Description ...: Stops the client.
    ; Syntax.........: _TCP_Client_Stop($hSocket)
    ; Parameters ....: $hSocket - Client socket.
    ; Return values .: Success - True
    ; Failure - False
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......: The client socket is the return value of _TCP_Client_Create().
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Client_Stop($hSocket)
    Local $iElement, $i
    $iElement = 0
    For $i = 1 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][0] = $hSocket Then
    $iElement = $i
    ExitLoop
    EndIf
    Next
    If $iElement Then
    ___ASockShutdown($__TCP_SOCKETS[$iElement][0])
    TCPCloseSocket($__TCP_SOCKETS[$iElement][0])
    ___ArrayDelete($__TCP_SOCKETS, $iElement)
    Return True
    EndIf
    Return False
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Server_Stop
    ; Description ...: Stops the server, and closes all client connections.
    ; Syntax.........: _TCP_Server_Stop()
    ; Parameters ....:
    ; Return values .: True
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Server_Stop()
    Local $i
    ___ASockShutdown($__TCP_SOCKETS[0][0])
    TCPCloseSocket($__TCP_SOCKETS[0][0])
    $__TCP_SOCKETS[0][0] = ""
    $__TCP_SOCKETS[0][1] = ""
    $__TCP_SOCKETS[0][2] = ""
    $__TCP_SOCKETS[0][3] = ""
    $__TCP_SOCKETS[0][4] = ""
    $__TCP_SOCKETS[0][5] = ""
    $__TCP_SOCKETS[0][6] = ""
    For $i = UBound($__TCP_SOCKETS)-1 to 1 Step -1
    ___ArrayDelete($__TCP_SOCKETS, $i)
    Next
    Return True
    EndFunc
    Func ___TCP_Server_OnSocketEvent( $hWnd, $iMsgID, $WParam, $LParam )
    Local $hSocket = $WParam
    Local $iError = ___HiWord( $LParam )
    Local $iEvent = ___LoWord( $LParam )
    Local $sDataBuff, $iElement, $i
    Abs($hWnd)
    $hSocket = 0
    $iElement = 0
    For $i = 1 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][1] = $iMsgID Then
    $hSocket = $__TCP_SOCKETS[$i][0]
    $iElement = $i
    ExitLoop
    EndIf
    Next
    If $hSocket Then
    Switch $iEvent
    Case $FD_READ
    $sDataBuff = TCPRecv($hSocket, 8192)
    Call($__TCP_SOCKETS[0][2], $hSocket, $sDataBuff, $iError)
    Case $FD_WRITE
    Call($__TCP_SOCKETS[0][3], $hSocket, $iError)
    Case $FD_CLOSE
    ___ASockShutdown($hSocket)
    TCPCloseSocket($hSocket)
    Call($__TCP_SOCKETS[0][5], $hSocket, $iError)
    ___ArrayDelete($__TCP_SOCKETS, $iElement)
    EndSwitch
    EndIf
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Server_DisconnectClient
    ; Description ...: Disconnects a client of the server.
    ; Syntax.........: _TCP_Server_DisconnectClient($hSocket)
    ; Parameters ....: $hSocket - Client socket.
    ; Return values .: Success - True
    ; Failure - False
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......: The client socket is the $hSocket parameter of a _TCP_RegisterEvent callback function.
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Server_DisconnectClient($hSocket)
    Local $iElement, $i
    $iElement = 0
    For $i = 1 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][0] = $hSocket Then
    $iElement = $i
    ExitLoop
    EndIf
    Next
    If $iElement Then
    ___ASockShutdown($hSocket)
    TCPCloseSocket($hSocket)
    ___ArrayDelete($__TCP_SOCKETS, $iElement)
    Return True
    EndIf
    Return False
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Server_ClientList
    ; Description ...: Returns the sockets of all connected clients.
    ; Syntax.........: _TCP_Server_ClientList()
    ; Parameters ....:
    ; Return values .: An 1 dimensional array of all connected clients.
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Server_ClientList()
    Local $aReturn[1], $i
    For $i = 1 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][0] Then
    ReDim $aReturn[UBound($aReturn)+1]
    $aReturn[UBound($aReturn)-1] = $__TCP_SOCKETS[$i][0]
    EndIf
    Next
    $aReturn[0] = UBound($aReturn)-1
    Return $aReturn
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Server_Broadcast
    ; Description ...: Sends data to all connected clients.
    ; Syntax.........: _TCP_Server_Broadcast($sData)
    ; Parameters ....: $sData - The data to send.
    ; Return values .: True
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Server_Broadcast($sData)
    Local $i
    For $i = 1 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][0] Then TCPSend($__TCP_SOCKETS[$i][0], $sData)
    Next
    Return True
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Client_Create
    ; Description ...: Creates a new client.
    ; Syntax.........: _TCP_Client_Create($sIP , $iPort)
    ; Parameters ....: $sIP - The IP address to connect to.
    ; $iPort - Port on which the created socket will be connected.
    ; Return values .: Client socket handle.
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Client_Create($sIP , $iPort)
    ReDim $__TCP_SOCKETS[UBound($__TCP_SOCKETS)+1][7]
    local $hSocket = ___ASocket()
    $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][0] = $hSocket
    $__TCP_SOCKETS[UBound($__TCP_SOCKETS)-1][1] = 0x0400 + (UBound($__TCP_SOCKETS)-1)
    ___ASockSelect( $hSocket, $__TCP_WINDOW, 0x0400 + (UBound($__TCP_SOCKETS)-1), BitOR( $FD_READ, $FD_WRITE, $FD_CONNECT, $FD_CLOSE ) )
    GUIRegisterMsg( 0x0400 + (UBound($__TCP_SOCKETS)-1), "___TCP_Client_OnSocketEvent" )
    ___ASockConnect( $hSocket, $sIP, $iPort )
    Return $hSocket
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_RegisterEvent
    ; Description ...: Registers an event.
    ; Syntax.........: _TCP_RegisterEvent($hSocket, $iEvent, $sFunction)
    ; Parameters ....: $hSocket - Socket of the server or a client.
    ; $iEvent - Event number. It can be any these values:
    ; * $TCP_SEND
    ; * $TCP_RECEIVE
    ; * $TCP_CONNECT => Client only
    ; * $TCP_DISCONNECT
    ; * $TCP_NEWCLIENT => Server only
    ; Return values .: Success - True
    ; Failure - False
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_RegisterEvent($hSocket, $iEvent, $sFunction)
    Local $iSelected = 0
    Local $i
    If $__TCP_SOCKETS[0][0] Then
    $iSelected = 0
    Else
    For $i = 0 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][0] = $hSocket Then
    $iSelected = $i
    ExitLoop
    EndIf
    Next
    If Not $iSelected Then Return 0
    EndIf
    Switch $iEvent
    Case $TCP_SEND
    $__TCP_SOCKETS[$iSelected][3] = $sFunction
    Case $TCP_RECEIVE
    $__TCP_SOCKETS[$iSelected][2] = $sFunction
    Case $TCP_CONNECT
    $__TCP_SOCKETS[$iSelected][4] = $sFunction
    Case $TCP_DISCONNECT
    $__TCP_SOCKETS[$iSelected][5] = $sFunction
    Case $TCP_NEWCLIENT
    $__TCP_SOCKETS[$iSelected][6] = $sFunction
    Case Else
    Return False
    EndSwitch
    Return True
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Server_ClientIP
    ; Description ...: Converts a client socket handle to IP address.
    ; Syntax.........: _TCP_Server_ClientIP($hSocket)
    ; Parameters ....: $hSocket - Client socket handle.
    ; Return values .: A string with the IP address.
    ; Author ........: Unknown
    ; Modified.......: Kip
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Server_ClientIP($hSocket)
    Local $pSocketAddress, $aReturn
    $pSocketAddress = DllStructCreate("short;ushort;uint;char[8]")
    $aReturn = DllCall("Ws2_32.dll", "int", "getpeername", "int", $hSocket, "ptr", DllStructGetPtr($pSocketAddress), "int*", DllStructGetSize($pSocketAddress))
    If @error Or $aReturn[0] <> 0 Then Return 0
    $aReturn = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($pSocketAddress, 3))
    If @error Then Return 0
    $pSocketAddress = 0
    Return $aReturn[0]
    EndFunc
    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _TCP_Send
    ; Description ...: Sends data to a server or client.
    ; Syntax.........: _TCP_Send($hSocket, $sText)
    ; Parameters ....: $hSocket - Client or server socket handle.
    ; $sText - Data to send.
    ; Return values .:
    ; Author ........: Kip
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ;
    ; ;==========================================================================================
    Func _TCP_Send($hSocket, $sText)
    Return TCPSend($hSocket, $sText)
    EndFunc
    Func ___TCP_Client_OnSocketEvent( $hWnd, $iMsgID, $WParam, $LParam )
    Local $iError = ___HiWord( $LParam )
    Local $iEvent = ___LoWord( $LParam )
    Local $hSocket, $iElement, $i, $sDataBuff
    Abs($hWnd)
    Abs($WParam)
    $hSocket = 0
    $iElement = 0
    For $i = 1 to UBound($__TCP_SOCKETS)-1
    If $__TCP_SOCKETS[$i][1] = $iMsgID Then
    $hSocket = $__TCP_SOCKETS[$i][0]
    $iElement = $i
    ExitLoop
    EndIf
    Next
    If $hSocket Then
    Switch $iEvent
    Case $FD_READ; Data has arrived!
    $sDataBuff = TCPRecv( $hSocket, 8192)
    Call($__TCP_SOCKETS[$i][2], $hSocket, $sDataBuff, $iError)
    $sDataBuff = ""
    Case $FD_WRITE
    Call($__TCP_SOCKETS[$i][3], $hSocket, $iError)
    Case $FD_CONNECT
    Call($__TCP_SOCKETS[$i][4], $hSocket, $iError)
    Case $FD_CLOSE
    ___ASockShutdown( $hSocket )
    TCPCloseSocket( $hSocket )
    Call($__TCP_SOCKETS[$i][5], $hSocket, $iError)
    ___ArrayDelete($__TCP_SOCKETS, $iElement)
    EndSwitch
    EndIf
    EndFunc
    ;==================================================================================================================
    ;
    ; Zatorg's Asynchronous Sockets UDF Starts from here.
    ;
    ;==================================================================================================================
    Func ___ASocket($iAddressFamily = 2, $iType = 1, $iProtocol = 6)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $hSocket = DllCall($hWs2_32, "uint", "socket", "int", $iAddressFamily, "int", $iType, "int", $iProtocol)
    If @error Then
    SetError(1, @error)
    Return -1
    EndIf
    If $hSocket[ 0 ] = -1 Then
    SetError(2, ___WSAGetLastError())
    Return -1
    EndIf
    Return $hSocket[ 0 ]
    EndFunc ;==>_ASocket
    Func ___ASockShutdown($hSocket)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall($hWs2_32, "int", "shutdown", "uint", $hSocket, "int", 2)
    If @error Then
    SetError(1, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    Return True
    EndFunc ;==>_ASockShutdown
    Func ___ASockClose($hSocket)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall($hWs2_32, "int", "closesocket", "uint", $hSocket)
    If @error Then
    SetError(1, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    Return True
    EndFunc ;==>_ASockClose
    Func ___ASockSelect($hSocket, $hWnd, $uiMsg, $iEvent)
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall( _
    $hWs2_32, _
    "int", "WSAAsyncSelect", _
    "uint", $hSocket, _
    "hwnd", $hWnd, _
    "uint", $uiMsg, _
    "int", $iEvent _
    )
    If @error Then
    SetError(1, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    Return True
    EndFunc ;==>_ASockSelect
    ; Note: you can see that $iMaxPending is set to 5 by default.
    ; IT DOES NOT MEAN THAT DEFAULT = 5 PENDING CONNECTIONS
    ; 5 == SOMAXCONN, so don't worry be happy
    Func ___ASockListen($hSocket, $sIP, $uiPort, $iMaxPending = 5); 5 == SOMAXCONN => No need to change it.
    Local $iRet
    Local $stAddress
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    $stAddress = ___SockAddr($sIP, $uiPort)
    If @error Then
    SetError(@error, @extended)
    Return False
    EndIf
    $iRet = DllCall($hWs2_32, "int", "bind", "uint", $hSocket, "ptr", DllStructGetPtr($stAddress), "int", DllStructGetSize($stAddress))
    If @error Then
    SetError(3, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    $stAddress = 0; Deallocate
    SetError(4, ___WSAGetLastError())
    Return False
    EndIf
    $iRet = DllCall($hWs2_32, "int", "listen", "uint", $hSocket, "int", $iMaxPending)
    If @error Then
    SetError(5, @error)
    Return False
    EndIf
    If $iRet[ 0 ] <> 0 Then
    $stAddress = 0; Deallocate
    SetError(6, ___WSAGetLastError())
    Return False
    EndIf
    Return True
    EndFunc ;==>_ASockListen
    Func ___ASockConnect($hSocket, $sIP, $uiPort)
    Local $iRet
    Local $stAddress
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    $stAddress = ___SockAddr($sIP, $uiPort)
    If @error Then
    SetError(@error, @extended)
    Return False
    EndIf
    $iRet = DllCall($hWs2_32, "int", "connect", "uint", $hSocket, "ptr", DllStructGetPtr($stAddress), "int", DllStructGetSize($stAddress))
    If @error Then
    SetError(3, @error)
    Return False
    EndIf
    $iRet = ___WSAGetLastError()
    If $iRet = 10035 Then; WSAEWOULDBLOCK
    Return True; Asynchronous connect attempt has been started.
    EndIf
    SetExtended(1); Connected immediately
    Return True
    EndFunc ;==>_ASockConnect
    ; A wrapper function to ease all the pain in creating and filling the sockaddr struct
    Func ___SockAddr($sIP, $iPort, $iAddressFamily = 2)
    Local $iRet
    Local $stAddress
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    $stAddress = DllStructCreate("short; ushort; uint; char[8]")
    If @error Then
    SetError(1, @error)
    Return False
    EndIf
    DllStructSetData($stAddress, 1, $iAddressFamily)
    $iRet = DllCall($hWs2_32, "ushort", "htons", "ushort", $iPort)
    DllStructSetData($stAddress, 2, $iRet[ 0 ])
    $iRet = DllCall($hWs2_32, "uint", "inet_addr", "str", $sIP)
    If $iRet[ 0 ] = 0xffffffff Then; INADDR_NONE
    $stAddress = 0; Deallocate
    SetError(2, ___WSAGetLastError())
    Return False
    EndIf
    DllStructSetData($stAddress, 3, $iRet[ 0 ])
    Return $stAddress
    EndFunc ;==>__SockAddr
    Func ___WSAGetLastError()
    If $hWs2_32 = -1 Then $hWs2_32 = DllOpen( "Ws2_32.dll" )
    Local $iRet = DllCall($hWs2_32, "int", "WSAGetLastError")
    If @error Then
    ;ConsoleWrite("+> _WSAGetLastError(): WSAGetLastError() failed. Script line number: " & @ScriptLineNumber & @CRLF)
    SetExtended(1)
    Return 0
    EndIf
    Return $iRet[ 0 ]
    EndFunc ;==>_WSAGetLastError
    ; Got these here:
    ; http://www.autoitscript.com/forum/index.ph…620&hl=MAKELONG
    Func ___MakeLong($LoWord, $HiWord)
    Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF)); Thanks Larry
    EndFunc ;==>_MakeLong
    Func ___HiWord($Long)
    Return BitShift($Long, 16); Thanks Valik
    EndFunc ;==>_HiWord
    Func ___LoWord($Long)
    Return BitAND($Long, 0xFFFF); Thanks Valik
    EndFunc ;==>_LoWord
    ; ========================================= Array functions
    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _ArrayDelete
    ; Description ...: Deletes the specified element from the given array.
    ; Syntax.........: _ArrayDelete(ByRef $avArray, $iElement)
    ; Parameters ....: $avArray - Array to modify
    ; $iElement - Element to delete
    ; Return values .: Success - New size of the array
    ; Failure - 0, sets @error to:
    ; |1 - $avArray is not an array
    ; |3 - $avArray has too many dimensions (only up to 2D supported)
    ; |(2 - Deprecated error code)
    ; Author ........: Cephas <cephas at clergy dot net>
    ; Modified.......: Jos van der Zande <jdeb at autoitscript dot com> - array passed ByRef, Ultima - 2D arrays supported, reworked function (no longer needs temporary array; faster when deleting from end)
    ; Remarks .......: If the array has one element left (or one row for 2D arrays), it will be set to "" after _ArrayDelete() is used on it.
    ; Related .......: _ArrayAdd, _ArrayInsert, _ArrayPop, _ArrayPush
    ; Link ..........;
    ; Example .......; Yes
    ; ===============================================================================================================================
    Func ___ArrayDelete(ByRef $avArray, $iElement)
    If Not IsArray($avArray) Then Return SetError(1, 0, 0)
    Local $iUBound = UBound($avArray, 1) - 1
    If Not $iUBound Then
    $avArray = ""
    Return 0
    EndIf
    ; Bounds checking
    If $iElement < 0 Then $iElement = 0
    If $iElement > $iUBound Then $iElement = $iUBound
    ; Move items after $iElement up by 1
    Switch UBound($avArray, 0)
    Case 1
    For $i = $iElement To $iUBound - 1
    $avArray[$i] = $avArray[$i + 1]
    Next
    ReDim $avArray[$iUBound]
    Case 2
    Local $iSubMax = UBound($avArray, 2) - 1
    For $i = $iElement To $iUBound - 1
    For $j = 0 To $iSubMax
    $avArray[$i][$j] = $avArray[$i + 1][$j]
    Next
    Next
    ReDim $avArray[$iUBound][$iSubMax + 1]
    Case Else
    Return SetError(3, 0, 0)
    EndSwitch
    Return $iUBound
    EndFunc ;==>_ArrayDelete

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™