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 ![]()
Beiträge von Weisgarnix
-
-
Okay, ich habe fertig und es funzt

Client (autoit):Spoiler anzeigen
[autoit]#include <Inet.au3>
[/autoit] [autoit][/autoit] [autoit]HttpSetUserAgent("DynIPService v1.0")
[/autoit] [autoit][/autoit] [autoit]
$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)While 1
[/autoit]
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)
WEndServer (php):
Spoiler anzeigen
PHP
Alles anzeigen<?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; ?>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

-
Danke dir, das wars. jo, klingt komisch, is aber so^^
-
Der Fehler liegt beim G -> Unbekannter Fehler

Sry, hab ich korrigiert.
Aber am Quellcode ändert das ja nichts
-
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()
[/autoit]
; 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
EndFuncGesammter Programmcode:
Spoiler anzeigen
[autoit]#RequireAdmin
[/autoit] [autoit][/autoit] [autoit]
#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>
[/autoit] [autoit][/autoit] [autoit]
#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
[/autoit] [autoit][/autoit] [autoit]
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.")
EndIfDim $onlineoffline
[/autoit] [autoit][/autoit] [autoit]
$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")
[/autoit] [autoit][/autoit] [autoit]
$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...
[/autoit] [autoit][/autoit] [autoit]
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
[/autoit] [autoit][/autoit] [autoit]
$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))
[/autoit] [autoit][/autoit] [autoit]
$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)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellBildBox[$lw2] = GUICtrlCreateGroup("Logo/Bild", 592, 120, 337, 277)
[/autoit] [autoit][/autoit] [autoit]
$AktuellBild[$lw2] = GUICtrlCreatePic("", 600, 144, 320, 240)
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellBeschreibungBox[$lw2] = GUICtrlCreateGroup("Beschreibung", 592, 416, 417, 217)
[/autoit] [autoit][/autoit] [autoit]
$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)
[/autoit] [autoit][/autoit] [autoit]
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
[/autoit] [autoit][/autoit] [autoit]
$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
[/autoit] [autoit][/autoit] [autoit]
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
WEndFunc _UnMarkAll($cat, $anzelements)
[/autoit] [autoit][/autoit] [autoit]
$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)
EndFuncFunc _SelectOne($cat, $element)
[/autoit] [autoit][/autoit] [autoit]
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)
EndFuncFunc _InstallNow()
[/autoit]
; 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 -
Jo stimmt schon, werde das umbasteln.
Wie täusche ich einen anderen User-Agent vor?
-
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
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?

-
So? passiert nach wie vor gar nichts
[autoit]
#include <Inet.au3>
[/autoit][autoit][/autoit][autoit]
#include <IE.au3>$PublicIP = _GetIP()
[/autoit][autoit][/autoit][autoit]
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)While 1
[/autoit]
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 -
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>
[/autoit] [autoit][/autoit] [autoit]
#include <IE.au3>$PublicIP = _GetIP()
[/autoit] [autoit][/autoit] [autoit]
$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)While 1
[/autoit]
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)
WEndUnd hier serverseitig die PHP-Datei, die einkommende Anfragen bearbeitet:
PHP
Alles anzeigen<?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."; ?> -
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?
[autoit]
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...
$AktuellTab = 0
[/autoit][autoit][/autoit][autoit]While 1
[/autoit]
$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
WEndEdit 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.
[autoit]
Ich habe allerdings Probleme mit der Kurzschreibweise. Was bedeutet der Teilif mod($nMsg - $Checkboxen[$iAktTab][0],4) Then
[/autoit]
$iAktCheckBox = -1 ;es kann keine Checkbox sein
else
$iAktCheckBox = ($nMsg - $Checkboxen[$iAktTab][0]) /4
EndIf
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?
-
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
Alles anzeigen[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
2. Ini-Datei:Spoiler anzeigen
Code
Alles anzeigen[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.txtDesweiteren 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>
[/autoit] [autoit][/autoit] [autoit]
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>Func _InitializeGui()
[/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("Autoinstall Software-Collection ", 1024, 769, 208, 145)
[/autoit] [autoit][/autoit] [autoit]
$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")$AnzKategorien=IniRead("settings.ini","Einstellungen","Kategorien","1")
[/autoit] [autoit][/autoit] [autoit]
$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];26 mögliche Elemente je Kategorie sollten reichen - passen ja eh nur 26 auf eine Seite...
[/autoit] [autoit][/autoit] [autoit]
Dim $Checkboxen[$AnzKategorien][26]
Dim $Icons[$AnzKategorien][26]
Dim $Titel[$AnzKategorien][26]
Dim $Hersteller[$AnzKategorien][26]$lw1=0
[/autoit] [autoit][/autoit] [autoit]
$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))
[/autoit] [autoit][/autoit] [autoit]
$file = FileOpen(IniRead($inifile,"Daten","Beschreibung","fehlt.txt"), 0)
GUICtrlSetData($Beschreibung[$lw2], FileRead($file))
FileClose($file)$Grafik[$lw2] = GuiCtrlCreatePic(IniRead($inifile, "Daten", "Grafik", ""), 512, 120, 64, 64)
[/autoit] [autoit][/autoit] [autoit]$Software[$lw2] = GUICtrlCreateGroup("Software", 16, 191, 561, 553)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellBildBox[$lw2] = GUICtrlCreateGroup("Logo/Bild", 592, 120, 417, 337)
[/autoit] [autoit][/autoit] [autoit]
$AktuellBild[$lw2] = GUICtrlCreatePic("", 600, 144, 400, 300)
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellBeschreibungBox[$lw2] = GUICtrlCreateGroup("Beschreibung", 592, 527, 417, 217)
[/autoit] [autoit][/autoit] [autoit]
$AktuellBeschreibung[$lw2] = GUICtrlCreateEdit("", 600, 544, 401, 193, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellWebsite[$lw2] = GUICtrlCreatePic($onlineoffline, 588, 464, 48, 48)
[/autoit] [autoit][/autoit] [autoit]
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);Eintragen der Elemente in die Softwareliste
[/autoit] [autoit][/autoit] [autoit]
$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;übriger Code für die einzelnen Kategorien
[/autoit]
;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("")
EndFuncDie Main-au3 sieht so aus (ruft bisher eigentlich nur _InitializeGui() auf):
Spoiler anzeigen
[autoit]AutoitSetOption("TrayIconHide" ,1)
[/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>#include <generategui.au3>
[/autoit] [autoit][/autoit] [autoit]#RequireAdmin
[/autoit] [autoit][/autoit] [autoit]_InitializeGui()
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW)While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEndReichen 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

-
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.
-
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.
-
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) -
Kleiner Fehler bei der Arraygrenze...
Korrigierte Funktion _edithelp($inputstring)
[autoit]Func _edithelp($inputstring)
[/autoit]
$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 -
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
[/autoit] [autoit][/autoit] [autoit]
Author: WeisgarnixScript Function:
[/autoit] [autoit][/autoit] [autoit]
Gibt einen Text zentriert aus
Zur freien Verwendung für jedermann freigegeben!#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]#include <StaticConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#Include <String.au3>Dim $Breite = 150 ; Hier kann die Breite, auf die zentriert werden soll, angegeben werden.
[/autoit] [autoit][/autoit] [autoit]
Dim $ausgabetext; Funktionsaufruf, das Ergebnis steht nachher in $ausgabetext
[/autoit] [autoit][/autoit] [autoit]
_edithelp("DeinString")
ClipPut($ausgabetext); Funktion _edithelp($inputstring)
[/autoit] [autoit][/autoit] [autoit]
; Erstellt eine mit korrekten Zeilenumbrüchen gespickte
; Ausgabe des Inputtextes.Func _edithelp($inputstring)
[/autoit] [autoit][/autoit] [autoit]
$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; Funktion _findfirstspace($inputstring)
[/autoit] [autoit][/autoit] [autoit]
; 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 ;
;;;;;;;;;;;;;;;;;;;; Funktion _crlf()
[/autoit] [autoit][/autoit] [autoit]
; Erstellt einen Zeilenumbruch.Func _crlf()
[/autoit] [autoit][/autoit] [autoit]
$ausgabetext = $ausgabetext&@CRLF
EndFunc; Funktion _makespaces()
[/autoit] [autoit][/autoit] [autoit]
; Erstellt die größere Hälfte der Leerzeichen.Func _makespaces($j)
[/autoit] [autoit][/autoit] [autoit]
$i=0
While $i<(($Breite-$j)/2)
$ausgabetext = $ausgabetext&" "
$i = $i+1
WEnd
EndFunc; Funktion _makecorrectspaces()
[/autoit] [autoit][/autoit] [autoit]
; Erstellt die gleich große/kleinere zweite Hälfte der Leerzeichen.Func _makecorrectspaces($j)
[/autoit]
If Mod($j, 2) = 1 Then
$j=$j+1
EndIf
$i=0
While $i<(($Breite-$j)/2)
$ausgabetext = $ausgabetext&" "
$i = $i+1
WEnd
EndFunc -
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)
[/autoit]
; 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
EndFuncEdit, 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

-
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 hehePS: Die 3 unteren Minifunktionen tun das, was sie sollen. Die beiden oberen sind die spannenden^^
Spoiler anzeigen
[autoit]; Funktion _edithelp($inputstring)
[/autoit] [autoit][/autoit] [autoit]
; Erstellt eine mit korrekten Zeilenumbrüchen gespickte
; Ausgabe des Inputtextes.Func _edithelp($inputstring)
[/autoit] [autoit][/autoit] [autoit]
$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; Funktion _findfirstspace($inputstring)
[/autoit] [autoit][/autoit] [autoit]
; 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; Funktion _crlf()
[/autoit] [autoit][/autoit] [autoit]
; Erstellt einen Zeilenumbruch.Func _crlf()
[/autoit] [autoit][/autoit] [autoit]
$ausgabetext = $ausgabetext&@CRLF
EndFunc; Funktion _makespaces()
[/autoit] [autoit][/autoit] [autoit]
; Erstellt die größere Hälfte der Leerzeichen.Func _makespaces($j)
[/autoit] [autoit][/autoit] [autoit]
$i=0
While $i<((156-$j)/2)
$ausgabetext = $ausgabetext&" "
$i = $i+1
WEnd
EndFunc; Funktion _makecorrectspaces()
[/autoit] [autoit][/autoit] [autoit]
; Erstellt die gleich große/kleinere zweite Hälfte der Leerzeichen.Func _makecorrectspaces($j)
[/autoit]
If Mod($j, 2) = 1 Then
$j=$j+1
EndIf
$i=0
While $i<((156-$j)/2)
$ausgabetext = $ausgabetext&" "
$i = $i+1
WEnd
EndFunc -
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...
-
kann ich an der Stelle $ES_CENTER nicht verwenden? Der meldet mir beim kompiliieren dabei einen Fehler
