Hallo und moinsen zusammen
Ich hab gestern Nacht spontan Lust gehabt, an meinem Projekt weiter zu basteln. Ergebnis: Nach 15 Minuten Einarbeitung in meinen damaligen Code hab ich losgelegt, nur leider kam nach 90 Minuten ein Scheiß bei raus, der nicht das tut, was er soll. Defakto hakt es an dem, was ich gestern hinzugefügt hatte.
Gestern ist er in die ersten If-Schleife nich rein sondern direkt in die zweite, daraufhin hab ich eben mal statt einen Else-Zweig einen ElseIf-Zweig eingefügt, mit dem Ergebnis, dass nun gar nichts zu passieren scheint außerdem läuft er gar nicht weiter zu den RunWaits
Besagte Funktion:
Spoiler anzeigen
Func _InstallNow()
; Schön aufbereiten in der Darstellung
$lw1=0 ; Laufvariable für Kategorien
$lw2=0 ; Laufvariable für Programme
While ($lw1 < $AnzKategorien)
While ($lw2 < $AnzElemente[$lw1])
If (GUICtrlGetState($Checkboxen[$lw1][$lw2]) = $GUI_CHECKED) Then
; Farbe ändern auf rot
GUICtrlSetData($Icons[$lw1][$lw2], "data\not_installed.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0xff0000)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0xff0000)
GUICtrlSetState($Checkboxen[$lw1][$lw2], $GUI_DISABLE)
ElseIf (GUICtrlGetState($Checkboxen[$lw1][$lw2]) = $GUI_UNCHECKED) Then
; ausgrauen
GUICtrlSetData($Icons[$lw1][$lw2], "data\not_install.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0xe2e2e2)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0xe2e2e2)
GUICtrlSetState($Checkboxen[$lw1][$lw2], $GUI_DISABLE)
EndIf
$lw2 = $lw2 + 1
WEnd
$lw1 = $lw1+1
$lw2 = 0
WEnd
; Nun wird installiert!
$lw1=0 ; Reinitialisierung Laufvariable für Kategorien
$lw2=0 ; Reinitialisierung Laufvariable für Programme
While ($lw1 < $AnzKategorien)
GUISwitch($Form2, $TabSheetKategorien[$lw1])
if ($lw1 <> 1) Then
While ($lw2 < $AnzElemente[$lw1])
If (GUICtrlGetState($Checkboxen[$lw1][$lw2]) = $GUI_CHECKED) Then
RunWait($ElementeInstall[$lw1][$lw2]&" "&$ElementeParameter[$lw1][$lw2])
; Farbe ändern auf grün
GUICtrlSetData($Icons[$lw1][$lw2], "data\installed.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0x00ff00)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0x00ff00)
EndIf
$lw2 = $lw2 + 1
WEnd
ElseIf ($lw1 = 1) Then
; nix machen, wird erst als letzte durchlaufen
EndIf
$lw1 = $lw1+1
$lw2 = 0
WEnd
EndFunc
Gesammter Programmcode:
Spoiler anzeigen
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=icon.ico
;#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=AutoItstall
#AutoIt3Wrapper_Res_Description=Installationsmenü
#AutoIt3Wrapper_Res_Fileversion=0.0.0.1
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
AutoitSetOption("TrayIconHide" ,1)
[/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <array.au3>
If(IniRead("settings.ini", "Einstellungen", "Hinweise", "ja")="ja") Then
MsgBox(48,"Wichtige Hinweise","1.) Sie sollten Hardwaretreiber vor der Software installieren! Die Hardwaretreiber finden Sie auf den Installationsmedien, die der Hardware beim Kauf beiliegen." & @CRLF & @CRLF & "2.) Sie sollten ihre Virenschutzsoftware während den automatische Installationen unbedingt deaktivieren! Es wird nur installiert und keine Anwendung gestartet. Überprüfen Sie gegebenenfalls nach Abschluss aller Installationen ihren Computer durch einen manuellen Suchvorgang nach Viren." & @CRLF & @CRLF & "3.) Es werden Administratorrechte benötigt, unter Windows Vista und neueren Windows-Betriebssystemen muss UAC (User Account Control) deaktiviert werden, dies kann nach diesem Hinweis über den Konfigurieren-Button rechts oben im Menü geschehen." & @CRLF & @CRLF & "4.) Während den automatischen Installationen sollten Sie nicht am Computer arbeiten!" & @CRLF & @CRLF & "5.) Nach Abschluss aller automatischen Installationen erfolgt ein automatischer Neustart.")
EndIf
Dim $onlineoffline
$ping = Ping("www.google.com")
If $ping > 0 then
$onlineoffline = "data\website_online.jpg"
Else
$onlineoffline = "data\website_offline.jpg"
EndIf
$Form2 = GUICreate("AutoItstall", 1024, 650, 208, 145)
$Pic15 = GUICtrlCreatePic("data\header.jpg", 0, 0, 174, 48)
;GUICtrlSetTip(-1, "Website im Browser öffnen")
GUICtrlSetCursor (-1, 0)
$Pic16 = GUICtrlCreatePic("data\background.jpg", 174, 0, 706, 48)
$Help = GUICtrlCreatePic("data\background_thin.jpg", 880, 0, 48, 48)
$About = GUICtrlCreatePic("data\about.jpg", 928, 0, 48, 48)
GUICtrlSetTip(-1, "Über dieses Programm")
GUICtrlSetCursor (-1, 4)
;$Combo1 = GUICtrlCreateCombo("Combo1", 648, 56, 369, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
;$Label33 = GUICtrlCreateLabel("Fertige Zusammenstellung auswählen", 464, 61, 181, 17)
$Install_Markierte = GUICtrlCreateButton("Installiere markierte Software jetzt!", 8, 56, 193, 25)
$Settings = GUICtrlCreatePic("data\settings.jpg", 976, 0, 48, 48)
GUICtrlSetTip(-1, "Einstellungen")
GUICtrlSetCursor (-1, 0)
$PageControl1 = GUICtrlCreateTab(8, 88, 1012, 557)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
$AnzKategorien=IniRead("settings.ini","Einstellungen","Kategorien","1")
$AnzZusammenstellungen=IniRead("settings.ini","Einstellungen","Zusammenstellungen","1")
; An Stelle [n][1] im Array steht ein Name, an Stelle [n+1][1] steht der Pfad zur Konfigurationsdatei, für alle ungeraden n.
$Kategorien=IniReadSection("settings.ini","Kategorien")
; Legt die Kategorien als Reiter-Array an.
Dim $TabSheetKategorien[($AnzKategorien*2)-1]
; Legt die in jedem Reiter vorhandenen Elemente an...
Dim $AktuellBildBox[$AnzKategorien]
Dim $AktuellBild[$AnzKategorien]
Dim $Software[$AnzKategorien]
Dim $AktuellBeschreibungBox[$AnzKategorien]
Dim $AktuellBeschreibung[$AnzKategorien]
Dim $Beschreibung[$AnzKategorien]
Dim $Grafik[$AnzKategorien]
Dim $AktuellWebsite[$AnzKategorien]
Dim $AktuellSprache[$AnzKategorien]
Dim $AktuellInstall[$AnzKategorien]
Dim $AktuellFreeware[$AnzKategorien]
Dim $AktuellParameter[$AnzKategorien]
Dim $AnzElemente[$AnzKategorien]
Dim $AktuellWebsiteGrafik[$AnzKategorien]
Dim $AktuellInstallGrafik[$AnzKategorien]
;26 mögliche Elemente je Kategorie sollten reichen - passen ja eh nur 26 auf eine Seite...
Dim $Checkboxen[$AnzKategorien][26]
Dim $Icons[$AnzKategorien][26]
Dim $Titel[$AnzKategorien][26]
Dim $Hersteller[$AnzKategorien][26]
Dim $ElementeBeschreibung[$AnzKategorien][26]
Dim $ElementeBild[$AnzKategorien][26]
Dim $ElementeWebsite[$AnzKategorien][26]
Dim $ElementeSprache[$AnzKategorien][26]
Dim $ElementeFreeware[$AnzKategorien][26]
Dim $ElementeInstall[$AnzKategorien][26]
Dim $ElementeParameter[$AnzKategorien][26]
$lw1=0
$lw2=0
While ($lw1 < ($AnzKategorien*2))
$TabSheetKategorien[$lw1] = GUICtrlCreateTabItem($Kategorien[$lw1+1][1])
$inifile=$Kategorien[$lw1+2][1]
$Beschreibung[$lw2] = GUICtrlCreateEdit("", 16, 120, 489, 65, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
$file0 = FileOpen(IniRead($inifile,"Daten","Beschreibung","fehlt.txt"), 0)
GUICtrlSetData($Beschreibung[$lw2], FileRead($file0))
FileClose($file0)
$Grafik[$lw2] = GuiCtrlCreatePic(IniRead($inifile, "Daten", "Grafik", ""), 512, 120, 64, 64)
[/autoit] [autoit][/autoit] [autoit]$Software[$lw2] = GUICtrlCreateGroup("Software", 16, 191, 561, 442)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$AktuellBildBox[$lw2] = GUICtrlCreateGroup("Logo/Bild", 592, 120, 337, 277)
$AktuellBild[$lw2] = GUICtrlCreatePic("", 600, 144, 320, 240)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$AktuellBeschreibungBox[$lw2] = GUICtrlCreateGroup("Beschreibung", 592, 416, 417, 217)
$AktuellBeschreibung[$lw2] = GUICtrlCreateEdit("", 600, 433, 401, 193, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$AktuellWebsiteGrafik[$lw2] = GUICtrlCreatePic($onlineoffline, 950, 130, 48, 48)
GUICtrlSetTip(-1, "Website im Browser öffnen")
GUICtrlSetCursor (-1, 0)
GUICtrlSetState(-1, $GUI_HIDE)
$AktuellSprache[$lw2] = GUICtrlCreatePic("data\german.jpg", 950, 200, 48, 48)
GUICtrlSetTip(-1, "Sprache: deutsch")
GUICtrlSetState(-1, $GUI_HIDE)
$AktuellFreeware[$lw2] = GUICtrlCreatePic("data\freeware.jpg", 950, 270, 48, 48)
GUICtrlSetTip(-1, "Keine Freeware!")
GUICtrlSetCursor (-1, 4)
GUICtrlSetState(-1, $GUI_HIDE)
$AktuellInstallGrafik[$lw2] = GUICtrlCreatePic("data\install.jpg", 950, 340, 48, 48)
GUICtrlSetTip(-1, "Jetzt installieren!")
GUICtrlSetCursor (-1, 0)
GUICtrlSetState(-1, $GUI_HIDE)
;Eintragen der Elemente in die Softwareliste
$AnzElemente[$lw2] = IniRead($inifile, "Daten", "Elemente", 0)
$lw3=0
While ($lw3 < $AnzElemente[$lw2])
;...
$temp = Mod($lw3, 2)
If ($temp == 0) Then
;linke Spalte
$Checkboxen[$lw2][$lw3] = GUICtrlCreateCheckbox("", 24, Floor(223+40*($lw3/2)), 16, 16)
;GUICtrlSetState(-1, $GUI_HIDE)
$Icons[$lw2][$lw3] = GUICtrlCreateIcon(IniRead($inifile, "Element"&$lw3+1, "Icon", "data\setup.ico"), -1, 40, Floor(215+40*($lw3/2)), 32, 32)
$Hersteller[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Hersteller", "unbekannter Hersteller"), 80, Floor(215+40*($lw3/2)))
$Titel[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Name", "?")&" v"&IniRead($inifile, "Element"&$lw3+1, "Version", "1"), 80, Floor(231+40*($lw3/2)))
Else
;Rechte Spalte
$Checkboxen[$lw2][$lw3] = GUICtrlCreateCheckbox("", 296, 203+40*($lw3/2), 16, 16)
;GUICtrlSetState(-1, $GUI_HIDE)
$Icons[$lw2][$lw3] = GUICtrlCreateIcon(IniRead($inifile, "Element"&$lw3+1, "Icon", "data\setup.ico"), -1, 296, 195+40*($lw3/2), 32, 32)
$Hersteller[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Hersteller", "unbekannter Hersteller"), 352, 195+40*($lw3/2))
$Titel[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Name", "?")&" v"&IniRead($inifile, "Element"&$lw3+1, "Version", "1"), 352, Floor(211+40*($lw3/2)))
EndIf
$file1 = FileOpen(IniRead($inifile, "Element"&$lw3+1, "Beschreibung", "fehlt.txt"), 0)
$ElementeBeschreibung[$lw2][$lw3] = FileRead($file1)
FileClose($file1)
$ElementeBild[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Grafik", "")
$ElementeWebsite[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "URL", "http://www.autoit.de")
$ElementeSprache[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Sprache", "en")
$ElementeFreeware[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Freeware", "ja")
$ElementeInstall[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Setupdatei", "data\dummy.exe")
$ElementeParameter[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Parameter", "")
;Laufvariable für die Elemente erhöhen
$lw3=$lw3+1
WEnd
;übriger Code für die einzelnen Kategorien
;Erhöhen der Laufvariablen, $lw1 zählt im Auslesearray, $lw2 zählt in den Zielarrays, beide zählen in den Kategorien hoch.
$lw1=$lw1+2
$lw2=$lw2+1
WEnd
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
$iAktTab = 0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Install_Markierte
_InstallNow()
Case $PageControl1
$iAktTab = _GUICtrlTab_GetCurSel($PageControl1)
Case $Checkboxen[$iAktTab][0] To $Titel[$iAktTab][$AnzElemente[$iAktTab] - 1]
ConsoleWrite("Ksg-ID: " & $nMsg & @TAB)
if mod($nMsg - $Checkboxen[$iAktTab][0],4) Then
$iAktCheckBox = -1 ;es kann keine Checkbox sein
else
$iAktCheckBox = ($nMsg - $Checkboxen[$iAktTab][0]) /4
EndIf
ConsoleWrite("Checkbox: " & $iAktCheckBox & @TAB)
if mod($nMsg - $Icons[$iAktTab][0],4) Then
$iAktIcon = -1 ;es kann kein Icon sein
else
$iAktIcon = ($nMsg - $Icons[$iAktTab][0]) /4
_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
_SelectOne($iAktTab, $iAktIcon)
EndIf
ConsoleWrite("Icon: " & $iAktIcon & @TAB)
if mod($nMsg - $Hersteller[$iAktTab][0],4) Then
$iAktHersteller = -1 ;es kann kein Hersteller sein
else
$iAktHersteller = ($nMsg - $Hersteller[$iAktTab][0]) /4
_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
_SelectOne($iAktTab, $iAktHersteller)
EndIf
ConsoleWrite("Hersteller: " & $iAktHersteller & @TAB)
if mod($nMsg - $Titel[$iAktTab][0],4) Then
$iAktTitel = -1 ;es kann kein Titel sein
else
$iAktTitel = ($nMsg - $Titel[$iAktTab][0]) /4
_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
_SelectOne($iAktTab, $iAktTitel)
EndIf
ConsoleWrite("Titel: " & $iAktTitel & @CRLF)
case $AktuellInstallGrafik[$iAktTab]
GUISetState(@SW_HIDE)
RunWait($AktuellInstall[$iAktTab]&" "&$AktuellParameter[$iAktTab])
GUISetState(@SW_SHOW)
case $AktuellWebsiteGrafik[$iAktTab]
ShellExecute($AktuellWebsite[$iAktTab])
case $AktuellFreeware[$iAktTab]
MsgBox(64,"Keine Freeware!","Die (dauerhafte) Benutzung dieser Software ist kostenpflichtig!"&@CRLF&"Sie können Ihre Registrierungsinformationen beim ersten Programmstart eingeben.")
EndSwitch
WEnd
Func _UnMarkAll($cat, $anzelements)
$temp=0
While ($temp < $anzelements+1)
GUICtrlSetBkColor($Hersteller[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetBkColor($Titel[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
$temp=$temp+1
WEnd
GUICtrlSetState($AktuellFreeware[$cat], $GUI_HIDE)
GUICtrlSetState($AktuellSprache[$cat], $GUI_HIDE)
EndFunc
Func _SelectOne($cat, $element)
GUICtrlSetBkColor($Hersteller[$cat][$element], 0x7A96DF)
GUICtrlSetBkColor($Titel[$cat][$element], 0x7A96DF)
GUICtrlSetData($AktuellBeschreibung[$cat], $ElementeBeschreibung[$cat][$element])
GUICtrlSetImage($AktuellBild[$cat], $ElementeBild[$cat][$element])
$AktuellInstall[$cat] = $ElementeInstall[$cat][$element]
$AktuellWebsite[$cat] = $ElementeWebsite[$cat][$element]
$AktuellParameter[$cat] = $ElementeParameter[$cat][$element]
If ($ElementeFreeware[$cat][$element] <> "ja") Then
GUICtrlSetState($AktuellFreeware[$cat], $GUI_SHOW)
EndIf
If (StringCompare($ElementeSprache[$cat][$element], "de")=0) Then
GUICtrlSetImage($AktuellSprache[$cat], "data\german.jpg")
GUICtrlSetState($AktuellSprache[$cat], $GUI_SHOW)
GUICtrlSetTip($AktuellSprache[$cat], "Sprache: deutsch")
EndIf
If (StringCompare($ElementeSprache[$cat][$element], "en")=0) Then
GUICtrlSetImage($AktuellSprache[$cat], "data\english.jpg")
GUICtrlSetState($AktuellSprache[$cat], $GUI_SHOW)
GUICtrlSetTip($AktuellSprache[$cat], "Sprache: englisch")
EndIf
GUICtrlSetState($AktuellInstallGrafik[$cat], $GUI_SHOW)
GUICtrlSetState($AktuellWebsiteGrafik[$cat], $GUI_SHOW)
EndFunc
Func _InstallNow()
; Schön aufbereiten in der Darstellung
$lw1=0 ; Laufvariable für Kategorien
$lw2=0 ; Laufvariable für Programme
While ($lw1 < $AnzKategorien)
While ($lw2 < $AnzElemente[$lw1])
If (GUICtrlGetState($Checkboxen[$lw1][$lw2]) = $GUI_CHECKED) Then
; Farbe ändern auf rot
GUICtrlSetData($Icons[$lw1][$lw2], "data\not_installed.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0xff0000)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0xff0000)
GUICtrlSetState($Checkboxen[$lw1][$lw2], $GUI_DISABLE)
ElseIf (GUICtrlGetState($Checkboxen[$lw1][$lw2]) = $GUI_UNCHECKED) Then
; ausgrauen
GUICtrlSetData($Icons[$lw1][$lw2], "data\not_install.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0xe2e2e2)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0xe2e2e2)
GUICtrlSetState($Checkboxen[$lw1][$lw2], $GUI_DISABLE)
EndIf
$lw2 = $lw2 + 1
WEnd
$lw1 = $lw1+1
$lw2 = 0
WEnd
; Nun wird installiert!
$lw1=0 ; Reinitialisierung Laufvariable für Kategorien
$lw2=0 ; Reinitialisierung Laufvariable für Programme
While ($lw1 < $AnzKategorien)
GUISwitch($Form2, $TabSheetKategorien[$lw1])
if ($lw1 <> 1) Then
While ($lw2 < $AnzElemente[$lw1])
If (GUICtrlGetState($Checkboxen[$lw1][$lw2]) = $GUI_CHECKED) Then
RunWait($ElementeInstall[$lw1][$lw2]&" "&$ElementeParameter[$lw1][$lw2])
; Farbe ändern auf grün
GUICtrlSetData($Icons[$lw1][$lw2], "data\installed.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0x00ff00)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0x00ff00)
EndIf
$lw2 = $lw2 + 1
WEnd
ElseIf ($lw1 = 1) Then
; nix machen, wird erst als letzte durchlaufen
EndIf
$lw1 = $lw1+1
$lw2 = 0
WEnd
EndFunc