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. Weisgarnix

Beiträge von Weisgarnix

  • Kontext-Menü Einträge erstellen

    • Weisgarnix
    • 25. Mai 2011 um 00:05

    Die Dinger findest du prinzipiell sowohl global für alle User im HKLM, als auch für den aktuellen User im HKCU jeweils unter \Software\Classes\
    Wie das genau tut weiß ich auch nicht so genau, vielleicht hilft dir das weiter:
    http://msdn.microsoft.com/en-us/library/…v=VS.85%29.aspx
    Bleib am Ball, würde mich ebenfalls interessieren ;)

  • Client-IP an Server schicken

    • Weisgarnix
    • 24. Mai 2011 um 12:05

    Okay, ich habe fertig und es funzt ;)
    Client (autoit):

    Spoiler anzeigen
    [autoit]

    #include <Inet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HttpSetUserAgent("DynIPService v1.0")
    $adress = IniRead("settings.ini", "settings", "adress", "http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php")
    $password = IniRead("settings.ini", "settings", "password", "blablabla")
    $PublicIP = _GetIP()
    $result=BinaryToString(InetRead($adress&"?pw="&$password&"&action=change"))
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 9)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(15000)
    $newPublicIP = _GetIP()
    If $newPublicIP <> $PublicIP Then
    $PublicIP = $newPublicIP
    $result=BinaryToString(InetRead($adress&"?pw="&$password&"&action=change"))
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 9)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - "&$result)
    FileClose($file)
    EndIf
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 9)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)
    WEnd

    [/autoit]

    Server (php):

    Spoiler anzeigen
    PHP
    <?php
    if ($_GET['pw'] != "blablabla"):
    	echo "Sie sind nicht berechtigt, die IP-Adresse einzusehen oder zu ändern!";
    else:
    	if ($_GET['action'] == "show"):
    		readfile("ip.txt");
    	elseif ($_GET['action'] == "change"):
    		if ($_SERVER[HTTP_USER_AGENT] != "DynIPService v1.0"):
    			echo "Sie sind nicht berechtigt, die IP-Adresse zu ändern!";
    		else:	
    			$handle = fOpen("log.txt", "a+");
    			fWrite($handle, date("d.m.Y,H:i:s")." - IP-Adresse: ".$_SERVER['REMOTE_ADDR']."\n");
    			fClose($handle);
    			$handle = fOpen("ip.txt", "a+");
    			ftruncate($handle, 0);
    			fWrite($handle, $_SERVER['REMOTE_ADDR']);
    			fClose($handle);
    			echo "Neue IP-Adresse ".$_SERVER['REMOTE_ADDR']." wurde gespeichert.";
    		endif;	
    	else:
    		echo "Keine Aktion ausgewählt!";
    	endif;
    endif;
    ?>
    Alles anzeigen

    Falls jemand weiß, wie ich den Zugriff auf die ip.txt von außerhalb unterbinden kann (und auf die log.txt), vermulich per htaccess, immer her damit :D

  • Unbekannter Fehler, vermutlich in GUICtrlGetState($variable)

    • Weisgarnix
    • 23. Mai 2011 um 21:01

    Danke dir, das wars. jo, klingt komisch, is aber so^^

  • Unbekannter Fehler, vermutlich in GUICtrlGetState($variable)

    • Weisgarnix
    • 23. Mai 2011 um 16:31
    Zitat von moritz1243

    Der Fehler liegt beim G -> Unbekannter Fehler :P


    Sry, hab ich korrigiert.
    Aber am Quellcode ändert das ja nichts :D

  • Unbekannter Fehler, vermutlich in GUICtrlGetState($variable)

    • Weisgarnix
    • 23. Mai 2011 um 10:41

    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
    [autoit]

    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 :P
    EndIf
    $lw1 = $lw1+1
    $lw2 = 0
    WEnd
    EndFunc

    [/autoit]

    Gesammter Programmcode:

    Spoiler anzeigen
    [autoit]

    #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 ****

    [/autoit] [autoit][/autoit] [autoit]

    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>

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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")

    [/autoit] [autoit][/autoit] [autoit]

    $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]

    [/autoit] [autoit][/autoit] [autoit]

    ;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]

    [/autoit] [autoit][/autoit] [autoit]

    $lw1=0
    $lw2=0
    While ($lw1 < ($AnzKategorien*2))
    $TabSheetKategorien[$lw1] = GUICtrlCreateTabItem($Kategorien[$lw1+1][1])
    $inifile=$Kategorien[$lw1+2][1]

    [/autoit] [autoit][/autoit] [autoit]

    $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)

    [/autoit] [autoit][/autoit] [autoit]

    $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)

    [/autoit] [autoit][/autoit] [autoit]

    $AktuellBildBox[$lw2] = GUICtrlCreateGroup("Logo/Bild", 592, 120, 337, 277)
    $AktuellBild[$lw2] = GUICtrlCreatePic("", 600, 144, 320, 240)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $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)

    [/autoit] [autoit][/autoit] [autoit]

    $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)

    [/autoit] [autoit][/autoit] [autoit]

    ;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)

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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 :P
    EndIf
    $lw1 = $lw1+1
    $lw2 = 0
    WEnd
    EndFunc

    [/autoit]
  • Client-IP an Server schicken

    • Weisgarnix
    • 19. April 2011 um 19:59

    Jo stimmt schon, werde das umbasteln.

    Wie täusche ich einen anderen User-Agent vor?

  • Client-IP an Server schicken

    • Weisgarnix
    • 19. April 2011 um 17:41

    Ui, ganz schön viele Antworten, Danke dafür erstmal ;)

    Einen Login bzw. ein Passwort zum Aufrufen derSeite brauche ich/braucht man nicht. Die log-Dateien auf dem Server ("ip.txt" und "log.txt") sind mit chmod 777 ausgestattet, daran liegt es also auch nicht.

    Eine DNS kostet Geld und nicht jeder Router unterstützt das.

    Ich habe defakto nur einen Client, daher ist auch eine weitere Unterscheidung nicht notwendig. Dieser verbindet sich mit dem Server, also ruft das php-Script auf dem Server auf, falls die IP eine andere ist, als sie es noch vor 15 Sekunden war. Das Intervall sollte nicht zu groß sein, um einen möglichst nahtlosen Übergang herzustellen bei einem IP-Wechsel.
    Das mit dem Datum usw. dachte ich, wäre praktisch, da ich so, wenn ich weiß, wann es zu Fehlern kam, direkt nachschauen kann und weiß, wo das ist. Ich habe nicht vor, das System dann geplant alle paar Tage zu warten, und wollte auch keine Log-Dateien von MB-Größe riskieren :D Was ich genau reinschrieben werde, und wie ich das handhaben werde, kann cih ja noch entscheiden. Momentan pasiert gar nichts, es wird weder Clientseitig, noch serverseitig irgendetwas in die Logdateien geschrieben. Es sieht also fast so aus, als ob das Programm nicht mal bis zur ersten INetGet-Zeile kommt und bereits in der ersten Zeile, "$PublicIP = _GetIP()" versagt, ich weiß nicht weiter, ich finde den/die Fehler nicht.

    Einen DynDNS-Dienst wollte ich umgehen, es geht ja hierbei nicht darum, Möglichkeiten zu finden, wie ich das realisieren soll, sondern den Fehler in meinem Code zu finden. Fast alles gibt es schon, also sollte am besten niemals mehr jemand überhaupt programmieren lernen? :P

  • Client-IP an Server schicken

    • Weisgarnix
    • 19. April 2011 um 15:33

    So? passiert nach wie vor gar nichts :(

    [autoit]

    #include <Inet.au3>
    #include <IE.au3>

    [/autoit][autoit][/autoit][autoit]

    $PublicIP = _GetIP()
    INetGet("http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php?ip="&$PublicIP)
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(15000)
    $newPublicIP = _GetIP()
    If $newPublicIP <> $PublicIP Then
    $PublicIP = $newPublicIP
    INetGet("http://weisgarnix.bplaced.net/armin/dynip/dynipservice.php?ip="&$PublicIP)
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse hat sich geändert! Neue IP-Adresse in nächster Zeile.")
    FileClose($file)
    EndIf
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)
    WEnd

    [/autoit]
  • Client-IP an Server schicken

    • Weisgarnix
    • 19. April 2011 um 15:06

    Hi. Ich möchte eine Serversoftware auf meinem Rechner auch von außerhalb ansprechen können, Beispielhaft einen Teamspeak-Server oder sonst was. Dazu sind Änderungen an den Einstellungen im Router nötig, das ist mir klar, aber um erstmal nur meine Internet-IP zu publizieren, brauche ich das noch nicht. Dennoch tut von meinem Script scheinbar gar nichts.
    Die Funktionsweise ist einfach. Alle 30 Sekunden oder so überprüft das im Hintergrund laufende Tool, ob die Online-IP noch dieselbe ist wie vor 30 Sekunden. Ist das nicht der Fall, wird sie an ein php-Script per GET üübermittelt, welches diese geänderte IP in eine Textdatei speichert. Damit ich Statistiken zur Fehlerbetrachtung, zur Verfügbarkeit etc. habe und um heruaszubekommen, wie oft sich die IP ändert, speichere ich diese Daten in Log-Dateien. Haken: Nichtienmal das passiert. Ich weiß nicht, ab welcher Stelle mein Script nicht tut, Log-Dateien werden keine erstellt, weder serverseitig, noch clientseitig.

    Hier die Quellcodes:

    Spoiler anzeigen
    [autoit]

    #include <Inet.au3>
    #include <IE.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $PublicIP = _GetIP()
    $oIE = _IECreate ( "www.meineseite.de/dynipservice.php?ip="&$PublicIP, 0, 0, 1, 0 )
    _IEQuit ( $oIE )
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(15000)
    $newPublicIP = _GetIP()
    If $newPublicIP <> $PublicIP Then
    $PublicIP = $newPublicIP
    $oIE = _IECreate ( "www.meineseite.de/dynipservice.php?ip="&$PublicIP, 0, 0, 1, 0 )
    _IEQuit ( $oIE )
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse hat sich geändert! Neue IP-Adresse in nächster Zeile.")
    FileClose($file)
    EndIf
    $file = FileOpen(@YEAR&"\"&@MON&"\"&@MDAY&"\log.txt", 1)
    FileWriteLine($file, @HOUR&":"&@MIN&":"&@SEC&" - IP-Adresse: "&$PublicIP)
    FileClose($file)
    WEnd

    [/autoit]

    Und hier serverseitig die PHP-Datei, die einkommende Anfragen bearbeitet:

    PHP
    <?php
    $CurrentIP=$_GET['ip']);
    $handle = fOpen("log.txt", "a+");
    fWrite($handle, date("d.m.Y,H:i:s")." - IP-Adresse: ".$CurrentIP."\n");
    fClose($handle);
    $handle = fOpen("ip.txt", "a+");
    ftruncate($handle, 0);
    fWrite($handle, $CurrentIP);
    fClose($handle);
    echo "Neue IP-Adresse $CurrentIP wurde gespeichert.";
    ?>
    Alles anzeigen
  • Controls als Arrays

    • Weisgarnix
    • 21. März 2011 um 13:24

    Hi autoBert!

    Danke für die Hilfe, so was ähnliches hatte ich irgendwo gelesen aber konnte es nicht auf mein Projekt adaptieren :(

    AnzElemente ist 26-1, das habe ich so festgelegt, weil eh nicht mehr Platz als 13 Elemente / "Spalte" ist, geht er halt die nicht erstellten auch durch, aber da sie nicht "gefüllt"/"initialisiert" wurden sondern nur das Array der Größe erstellt wurde, können sie es ja auch nicht sein, die angeklickt wurden.

    Versuche mich nun daran, ich danke vielmals! ;)

    *Edit* Wofür brauche ich den Modulo?
    Du vergleichst da Äpfel mi Birnen, ich habe vorne am "To" und hinten mal dasselbe Array gesetzt, denke, das war ein Versehen.
    Dennoch, wofür der Modulo 4? Und welchen Modulo brauche ich für die anderen Elemente, die nicht eine Checkbox sind, sondern $Icons[][] oder $Titel[][] oder $Hersteller[][]? Den Modulo-Part blick ich irgendwie nicht... :(

    [autoit]

    $AktuellTab = 0

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $PageControl1
    $AktuellTab = _GUICtrlTab_GetCurSel($PageControl1)
    Case $Icons[$AktuellTab][0] To $Icons[$AktuellTab][25]
    if mod($nMsg - $Icons[$AktuellTab][0],4) Then
    $AktuellIcon = -1;es kann kein Icon sein
    else
    $AktuellIcon = ($nMsg - $Icons[$AktuellTab][0])/4
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Edit again: Ich glaube, ich komme so langsam dahinter. Jedes vierte Element während der Konstruktion durch Schleifen war eine Checkbox. für Rest 3 ists dann ein Titel, für Rest 1 ein Icon und für Rest 2 ein Titel usw.
    Ich habe allerdings Probleme mit der Kurzschreibweise. Was bedeutet der Teil

    [autoit]

    if mod($nMsg - $Checkboxen[$iAktTab][0],4) Then
    $iAktCheckBox = -1 ;es kann keine Checkbox sein
    else
    $iAktCheckBox = ($nMsg - $Checkboxen[$iAktTab][0]) /4
    EndIf

    [/autoit]


    Ausfürlich? mod returned doch den Rest, oder nicht? Ich kenne die Kurzschreibweise if true then aber nicht if 0 then bzw if 7 then, woher weiß ich, auf welche Ziffer autoit dann reagiert und in den then-Teil geht?

    Und noch eine Frage: Fängt er dann sozusagen für diese Abfrage mit $Checkboxen[$AktuellTab][0] an und gibt diesem Control für diese Abfrage die ID 0 oder ist das die ID, die diesem Control beim Erstellen zugewiesen wurde? Falls letzteres der Fall ist, dürfte es verdammt schwer werden, da die Anzahl der vorherigen Controls ja variabel ist, oder?

  • Controls als Arrays

    • Weisgarnix
    • 21. März 2011 um 01:39

    Da ich den bisherigen Quellcode teilweise von jemand anderem habe, der mir erlaubt hat, dran weiterzuarbeiten, weil er momentan nicht so viel Zeit hat, weiß ich nicht, wie einverstanden er damit ist, dass cih den Quellcode hier veröffentliche. Wie dem auch sei, ohne Veröffentlichung komme cih nicht weiter :(

    die beiden Ini-Dateien:
    1. Ini-Datei:

    Spoiler anzeigen
    Code
    [Einstellungen]
    ;Nicht verändern.
    Datum=14.03.2011
    ;Anzahl Kategorien
    Kategorien=2
    ;Anzahl Zusammenstellungen
    Zusammenstellungen=1
    
    
    ;KategorieX...="ini-Datei" /X hochzählen, bei 1 beginnend
    [Kategorien]
    Kategorie1Name=Laufzeitumgebungen
    Kategorie1INI=runtimes.ini
    Kategorie2Name=Sicherheit
    Kategorie2INI=sicherheit.ini
    
    
    [Zusammenstellung1]
    ;Elemente der jeweiligen Kategorie, mit , voneinander getrennt
    Kategorie1=1,2,3,4,5,6,7,8,9,10,11,12
    Kategorie2=2,5,6,8,11,12,17
    Kategorie3=9,10
    Kategorie4=
    Kategorie5=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
    Alles anzeigen


    2. Ini-Datei:

    Spoiler anzeigen
    Code
    [Daten]
    ;Infos für folgende Zeilen:
    ;Einfach dem Schema folgen.
    ;nirgends dürfen Anführungszeichen vorkommen! Falls doch, müssen diese als "&Chr(34)&" entschärft werden (inklusive der Anführungszeichen!).
    ;Erlaubte Dateitypen sind nur *.bmp und *.jpg für die Bilder sowie *.ico und *.exe, *.dll für Icons. (Hintergrundfarbe ist ca. RGB F4F3EE.)
    ;Weitere Hinweise beachten!
    
    
    ;Pfad zur txt-Datei mit der Beschreibung
    Beschreibung=datei.txt
    ;Grafikgröße: 64x64
    Grafik=runtimes.jpg
    ;Anzahl der Einträge
    Elemente=11
    
    
    ;Für jedes Element:
    ;[ElementX] /Einfach X hochzählen (mit 1 beginnend)!
    ;Setupdatei=String /Pfad zur Setup-Datei
    ;Parameter=Parameter /Falls kein Parameter benötigt wird: Parameter=
    ;Name=String
    ;Version=String
    ;Hersteller=String
    ;Icon=String /Pfad zum Icon
    ;Grafik=String /Pfad zur Grafik, Grafikgröße 400x300
    ;URL=String /Homepage inklusive http://
    ;Sprache=de /oder en, nix anderes!
    ;Freeware=ja /ja=Freeware, nein=nicht Freeware
    ;Beschreibung=datei.txt
    
    
    [Element1]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element2]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element3]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element4]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element5]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element6]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element7]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element8]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element9]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element10]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    
    
    [Element11]
    Setupdatei=
    Parameter=
    Name=Flash Player ActiveX
    Version=10.2.04
    Hersteller=Adobe
    Icon=
    Grafik=
    URL=
    Sprache=de
    Freeware=ja
    Beschreibung=datei.txt
    Alles anzeigen

    Desweiteren hat er die initialisierung aufgrund der Codelänge ausgelagert, was hoffentlich kein Problem macht, sonst lager ichs halt wieder ein.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Func _InitializeGui()
    Dim $onlineoffline
    $ping = Ping("www.google.com")
    If $ping > 0 then
    $onlineoffline = "data\website_online.jpg"
    Else
    $onlineoffline = "data\website_offline.jpg"
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Form2 = GUICreate("Autoinstall Software-Collection ", 1024, 769, 208, 145)
    $Pic15 = GUICtrlCreatePic("data\header_left.jpg", 0, 0, 174, 48)
    GUICtrlSetTip(-1, "Website im Webbrowser öffnen")
    GUICtrlSetCursor (-1, 0)
    $Pic16 = GUICtrlCreatePic("data\background.jpg", 174, 0, 706, 48)
    $Help = GUICtrlCreatePic("data\help.jpg", 880, 0, 48, 48)
    GUICtrlSetTip(-1, "Hilfe und Anleitung")
    GUICtrlSetCursor (-1, 4)
    $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, 672)
    GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")

    [/autoit] [autoit][/autoit] [autoit]

    $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]

    [/autoit] [autoit][/autoit] [autoit]

    ;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]

    [/autoit] [autoit][/autoit] [autoit]

    $lw1=0
    $lw2=0
    While ($lw1 < ($AnzKategorien*2))
    $TabSheetKategorien[$lw1] = GUICtrlCreateTabItem($Kategorien[$lw1+1][1])
    $inifile=$Kategorien[$lw1+2][1]

    [/autoit] [autoit][/autoit] [autoit]

    $Beschreibung[$lw2] = GUICtrlCreateEdit("", 16, 120, 489, 65, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
    $file = FileOpen(IniRead($inifile,"Daten","Beschreibung","fehlt.txt"), 0)
    GUICtrlSetData($Beschreibung[$lw2], FileRead($file))
    FileClose($file)

    [/autoit] [autoit][/autoit] [autoit]

    $Grafik[$lw2] = GuiCtrlCreatePic(IniRead($inifile, "Daten", "Grafik", ""), 512, 120, 64, 64)

    [/autoit] [autoit][/autoit] [autoit]

    $Software[$lw2] = GUICtrlCreateGroup("Software", 16, 191, 561, 553)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $AktuellBildBox[$lw2] = GUICtrlCreateGroup("Logo/Bild", 592, 120, 417, 337)
    $AktuellBild[$lw2] = GUICtrlCreatePic("", 600, 144, 400, 300)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $AktuellBeschreibungBox[$lw2] = GUICtrlCreateGroup("Beschreibung", 592, 527, 417, 217)
    $AktuellBeschreibung[$lw2] = GUICtrlCreateEdit("", 600, 544, 401, 193, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
    GUICtrlCreateGroup("", -99, -99, 1, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $AktuellWebsite[$lw2] = GUICtrlCreatePic($onlineoffline, 588, 464, 48, 48)
    GUICtrlSetTip(-1, "Website im Browser öffnen")
    GUICtrlSetCursor (-1, 0)
    ;GUICtrlSetState(-1, $GUI_HIDE)
    $AktuellSprache[$lw2] = GUICtrlCreatePic("data\german.jpg", 652, 464, 48, 48)
    GUICtrlSetTip(-1, "Sprache: deutsch")
    ;GUICtrlSetState(-1, $GUI_HIDE)
    $AktuellInstall[$lw2] = GUICtrlCreatePic("data\install.jpg", 959, 464, 48, 48)
    GUICtrlSetTip(-1, "Jetzt installieren!")
    GUICtrlSetCursor (-1, 0)
    ;GUICtrlSetState(-1, $GUI_HIDE)
    $AktuellFreeware[$lw2] = GUICtrlCreatePic("data\key.jpg", 711, 464, 48, 48)
    GUICtrlSetTip(-1, "Keine Freeware!")
    GUICtrlSetCursor (-1, 4)
    GUICtrlSetState(-1, $GUI_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    ;Eintragen der Elemente in die Softwareliste
    $AnzElemente = IniRead($inifile, "Daten", "Elemente", 0)
    $lw3=0
    While ($lw3 < $AnzElemente)
    ;...
    $temp = Mod($lw3, 2)
    If ($temp == 0) Then
    ;linke Spalte
    $Checkboxen[$lw2][$lw3] = GUICtrlCreateCheckbox("", 24, Floor(223+40*($lw3/2)), 16, 16)
    $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)
    $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
    ;...
    $lw3=$lw3+1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ;ü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("")
    EndFunc

    [/autoit]

    Die Main-au3 sieht so aus (ruft bisher eigentlich nur _InitializeGui() auf):

    Spoiler anzeigen
    [autoit]

    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>

    [/autoit] [autoit][/autoit] [autoit]

    #include <generategui.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #RequireAdmin

    [/autoit] [autoit][/autoit] [autoit]

    _InitializeGui()
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Reichen diese Infos, um zu verstehen, in welchem Loch cih stecke?^^ ich müsste die Indizes des angeklickten Controls wieder rausfinden :(
    Relevant sind die hier (die sollen nachher anklickbar sein):
    $Icons[][]
    $Hersteller[][]
    $Titel[][]

    Danke schonmal auf jeden Fall!

    *Edit* Ich habe ihn gerade erreicht und gefragt: Es ist ihm vollkommen egal, was ich mit dem Code wo mache ;)

  • Controls als Arrays

    • Weisgarnix
    • 20. März 2011 um 23:34

    So, hi erstmal.

    Ich habe Quellcode der Form

    [autoit]

    $Label[$i][$j] = GUICtrlCreateLabel(IniRead($inifile, "Sektion"&$j, "key", "standart value"), 10, 10+10*$i)

    [/autoit]


    Den ich per schleifen fülle, das tut auch alles wunderbar, ich kann die gui initialisieren auf diese Art und Weise.
    Nun solllte sich bei Klick auf $Label[3][23] was tun, genauso wie bei Klick auf $Label[12][1] usw, aber was sich tut, ist immer von den beiden Indizes abhängig, wird sozusagen daraus errechnet oder eine Funktion mit diesen Indizes als Parameter führt dann irgendwas mithilfe dieser Indizes aus. Leider finde cih keinen Weg, an diese Indizes zu kommen.

    Weiß jemand eine Lösung?

    Meine Idee war es, im OnEventMode das passende Makro per Stringoperation zu zerstückeln, um an die beiden Indizes zu kommen, aber das tut nicht, da es eben Handles und keine Strings sind, und ich keine Funktion gefunden habe, die es mir erlaubt, den Namen der Handles zu bekommen, sprich den Variablennamen des Controls letztenendes.

  • "@comspec" wichtiger befehl wird nicht ausgeführt!

    • Weisgarnix
    • 3. Januar 2011 um 00:03

    Ersetz mal deine " die du bereits in den Parametern hast, durch den entsprechenden Char (Gänsefüßchen sind Chr(34)), also: ", die du bereits in der Konsole angeben würdest, mit "&Chr(34)& ersetzen. Dann kannst du dir auch die ' sparen.

  • Farbwert in HTML Farbwert umrechnen

    • Weisgarnix
    • 2. Januar 2011 um 22:35

    Falls deine Werte mit RGB gegeben sind, hast du ja:
    R[0,255],G[0,255],B[0,255] (Rot, Gelb, Blau)
    Der "html"-Wert ist nichts anderes als diese Werte in ebenjenier Reihenfolge, aber als Hexadezimalwert hinter ein # zu setzen.
    also "#"&Hex(R)&Hex(G)&Hex(B)
    Welche Funktion in Hex umwandelt, musste nachschauen.
    *edit* Grad geschaut die Funktion heißt in Autoit ebenfalls Hex(Wert)

  • Automatischer Zeilenumbruch

    • Weisgarnix
    • 2. Januar 2011 um 22:08

    Kleiner Fehler bei der Arraygrenze...

    Korrigierte Funktion _edithelp($inputstring)
    [autoit]

    Func _edithelp($inputstring)
    $outputstring = StringReplace($inputstring, @CRLF, @CRLF)
    $countcrlf = @extended
    $stringarray = _StringExplode($outputstring, @CRLF, 0)
    $i = 0 ; zählt Arrayeinträge hoch
    While ( $i <= $countcrlf)
    If ( StringLen($stringarray[$i]) > 0 ) Then
    While ( StringLen($stringarray[$i]) > 150 )
    $j=150 ; merkt sich aktuelle Testposition
    $isspace = _isspace($stringarray[$i],$j)
    While ( $isspace = False )
    $j = $j - 1
    $isspace = _isspace($stringarray[$i],$j)
    WEnd
    _makespaces($j)
    $textline = StringMid($stringarray[$i],1,$j)
    $ausgabetext = $ausgabetext&$textline
    _makecorrectspaces($j)
    _crlf()
    $stringarray[$i]=StringMid($stringarray[$i],$j+1)
    WEnd
    _makespaces(StringLen($stringarray[$i]))
    $ausgabetext = $ausgabetext&$stringarray[$i]
    _makecorrectspaces(StringLen($stringarray[$i]))
    _crlf()
    EndIf
    $i = $i + 1
    WEnd
    EndFunc

    [/autoit]
  • Automatischer Zeilenumbruch

    • Weisgarnix
    • 28. Dezember 2010 um 15:46

    Ich hoffe, ich hab beim Zusammenstellen des benötigten Codes keine Fehler gemacht, wenn doch, beschwert euch, ansosnten viel Spaß damit ;)
    PS: Ich weiß, mit Returns wärs schöner geworen, aber das kann ja derjenige, ders braucht, selber noch reinbasteln ;)

    Spoiler anzeigen
    [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.6.1
    Author: Weisgarnix

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    Gibt einen Text zentriert aus
    Zur freien Verwendung für jedermann freigegeben!

    [/autoit] [autoit][/autoit] [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $Breite = 150 ; Hier kann die Breite, auf die zentriert werden soll, angegeben werden.
    Dim $ausgabetext

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktionsaufruf, das Ergebnis steht nachher in $ausgabetext
    _edithelp("DeinString")
    ClipPut($ausgabetext)

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _edithelp($inputstring)
    ; Erstellt eine mit korrekten Zeilenumbrüchen gespickte
    ; Ausgabe des Inputtextes.

    [/autoit] [autoit][/autoit] [autoit]

    Func _edithelp($inputstring)
    $outputstring = StringReplace($inputstring, @CRLF, @CRLF)
    $countcrlf = @extended
    $stringarray = _StringExplode($outputstring, @CRLF, 0)
    $i = 0 ; zählt Arrayeinträge hoch
    While ( $i < $countcrlf)
    If ( StringLen($stringarray[$i]) > 0 ) Then
    While ( StringLen($stringarray[$i]) > $Breite )
    $j=$Breite ; merkt sich aktuelle Testposition
    $isspace = _isspace($stringarray[$i],$j)
    While ( $isspace = False )
    $j = $j - 1
    $isspace = _isspace($stringarray[$i],$j)
    WEnd
    _makespaces($j)
    $textline = StringMid($stringarray[$i],1,$j)
    $ausgabetext = $ausgabetext&$textline
    _makecorrectspaces($j)
    _crlf()
    $stringarray[$i]=StringMid($stringarray[$i],$j+1)
    WEnd
    _makespaces(StringLen($stringarray[$i]))
    $ausgabetext = $ausgabetext&$stringarray[$i]
    _makecorrectspaces(StringLen($stringarray[$i]))
    _crlf()
    EndIf
    $i = $i + 1
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _findfirstspace($inputstring)
    ; Findet beim 150. Zeichen beginnend rückwärts laufend das erste Leerzeichen
    Func _isspace($inputstring, $position)
    If ( StringInStr($inputstring, " ", 0, 1, $position, 1) = 0) Then
    Return False
    Else
    Return True
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;;;;;;;;;;;;;;;;;;
    ; Ausgabemethoden ;
    ;;;;;;;;;;;;;;;;;;;

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _crlf()
    ; Erstellt einen Zeilenumbruch.

    [/autoit] [autoit][/autoit] [autoit]

    Func _crlf()
    $ausgabetext = $ausgabetext&@CRLF
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _makespaces()
    ; Erstellt die größere Hälfte der Leerzeichen.

    [/autoit] [autoit][/autoit] [autoit]

    Func _makespaces($j)
    $i=0
    While $i<(($Breite-$j)/2)
    $ausgabetext = $ausgabetext&" "
    $i = $i+1
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _makecorrectspaces()
    ; Erstellt die gleich große/kleinere zweite Hälfte der Leerzeichen.

    [/autoit] [autoit][/autoit] [autoit]

    Func _makecorrectspaces($j)
    If Mod($j, 2) = 1 Then
    $j=$j+1
    EndIf
    $i=0
    While $i<(($Breite-$j)/2)
    $ausgabetext = $ausgabetext&" "
    $i = $i+1
    WEnd
    EndFunc

    [/autoit]
  • Automatischer Zeilenumbruch

    • Weisgarnix
    • 28. Dezember 2010 um 12:41

    Hab mir den verlinkten Code rekonstruiert und angeschaut.
    Ist mein Code denn garnciht zu retten? So wie er da steht, tut er das nicht, was er soll.

    Habe mal testhalber einen langen Text mit mehreren Absätzen und langen vor allem benutzt. Er trennt im Allgemeinen korrekt (Mehrere CLRFs direkt hintereinander muss ich noch iwie bugfixen, vlt mit if StringLen($bla) != 0... das soll also nicht das Problem sein.
    Problem ist, dass er an irgendeiner Stelle entweder in der Funktion _isspace($bla,$blabla) oder in meiner _edithelp($blablabla) nicht das tut was er macht, und zwar trennt er nicht am ersten vom 150sten zeichen aus rückwärts gefundenen Leerzeichen, sondern einfach immer genau am 150sten Leerzeichen. Sieht zufällig jemand den Fehler?

    Edit: Den ersten der genannten Bugs bin ich losgeworden, hab einfach an einer Stelle vergessen, einen Zeilenumbruch einzufügen.

    zum nervigeren Fehler: kanns sein, dass der Fehler bereits in der Funktion liegt, die mir sagen soll, ob das momentan getestete zeichen ein leerzeichen ist?

    Spoiler anzeigen
    [autoit]

    ; Funktion _findfirstspace($inputstring)
    ; Findet beim 150. Zeichen beginnend rückwärts laufend das erste Leerzeichen
    Func _isspace($inputstring, $position)
    If ( StringInStr($inputstring, " ", 0, 1, $position, $position) = 0) Then
    Return False
    Else
    Return True
    EndIf
    EndFunc

    [/autoit]

    Edit, der letzte: Nun tuts so wie es soll! ;)

    [autoit]

    StringInStr($inputstring, " ", 0, 1, $position, 1)

    [/autoit]


    Macht mehr Sinn, "$count" (siehe Hilfe) sagt, wie weit von der Anfangsposition gesucht werden soll, nicht absolut, bis zur wievielten Stelle im String gesucht werden soll.

    Thx @ all, werde das Gesamtpaket, wenn gewünscht, hier posten ;)

  • Automatischer Zeilenumbruch

    • Weisgarnix
    • 28. Dezember 2010 um 04:29

    Oh je, nun habe ich die ganze zeit zu coden versucht, nun sehe ich, dass ich euch fleißig gewesen seid.
    habe weder euren, noch meinen Code getestet, ich hau mich nun für ein paar Stündchen aufs Ohr, bitte Meinungen zu mienem vermutlich viel zu komplizierten Code. Es werden noch Wetten angenommen, ob er das tut was er soll hehe

    PS: Die 3 unteren Minifunktionen tun das, was sie sollen. Die beiden oberen sind die spannenden^^

    Spoiler anzeigen
    [autoit]

    ; Funktion _edithelp($inputstring)
    ; Erstellt eine mit korrekten Zeilenumbrüchen gespickte
    ; Ausgabe des Inputtextes.

    [/autoit] [autoit][/autoit] [autoit]

    Func _edithelp($inputstring)
    $outputstring = StringReplace($inputstring, @CRLF, @CRLF)
    $countcrlf = @extended
    $stringarray = _StringExplode($outputstring, @CRLF, 0)
    $i = 0 ; zählt Arrayeinträge hoch
    While ( $i < $countcrlf)
    While ( StringLen($stringarray[$i]) > 150 )
    $j=150 ; merkt sich aktuelle Testposition
    $isspace = _isspace($stringarray[$i],$j)
    While ( $isspace = False )
    $j = $j - 1
    $isspace = _isspace($stringarray[$i],$j)
    WEnd
    _makespaces($j)
    $textline = StringMid($stringarray[$i],1,$j)
    $ausgabetext = $ausgabetext&$textline
    _makecorrectspaces($j)
    _crlf()
    $stringarray[$i]=StringMid($stringarray[$i],$j+1)
    WEnd
    _makespaces(StringLen($stringarray[$i]))
    $ausgabetext = $ausgabetext&$stringarray[$i]
    _makecorrectspaces(StringLen($stringarray[$i]))
    $i = $i + 1
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _findfirstspace($inputstring)
    ; Findet beim 150. Zeichen beginnend rückwärts laufend das erste Leerzeichen
    Func _isspace($inputstring, $position)
    If ( StringInStr($inputstring, " ", 0, 1, $position, $position) = 0) Then
    Return False
    Else
    Return True
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _crlf()
    ; Erstellt einen Zeilenumbruch.

    [/autoit] [autoit][/autoit] [autoit]

    Func _crlf()
    $ausgabetext = $ausgabetext&@CRLF
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _makespaces()
    ; Erstellt die größere Hälfte der Leerzeichen.

    [/autoit] [autoit][/autoit] [autoit]

    Func _makespaces($j)
    $i=0
    While $i<((156-$j)/2)
    $ausgabetext = $ausgabetext&" "
    $i = $i+1
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; Funktion _makecorrectspaces()
    ; Erstellt die gleich große/kleinere zweite Hälfte der Leerzeichen.

    [/autoit] [autoit][/autoit] [autoit]

    Func _makecorrectspaces($j)
    If Mod($j, 2) = 1 Then
    $j=$j+1
    EndIf
    $i=0
    While $i<((156-$j)/2)
    $ausgabetext = $ausgabetext&" "
    $i = $i+1
    WEnd
    EndFunc

    [/autoit]
  • Automatischer Zeilenumbruch

    • Weisgarnix
    • 28. Dezember 2010 um 03:04

    schlau ja, die eine habe ich zugemacht, die andere habe ich übersehen ... danke dir ;)

    Ok, so leicht kann ichs mir wohl nicht machen.
    Ich will den Text nachher in einer Ausgabedatei mittig speichern. Zum mittig machen hab ich mir ne kleine Funktion gebastelt, allerdings nur für "Einzeiler", d.h., ich muss mir den Inhalt meiner Variablen doch Häppchenweise aufstückeln... :(

  • Automatischer Zeilenumbruch

    • Weisgarnix
    • 28. Dezember 2010 um 02:56

    kann ich an der Stelle $ES_CENTER nicht verwenden? Der meldet mir beim kompiliieren dabei einen Fehler :(

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™