aber auch einfach gehts nicht
Bedeutet auch mit meiner Änderung nicht?
aber auch einfach gehts nicht
Bedeutet auch mit meiner Änderung nicht?
1. Warum hast du Filewrite doppelt?
2. Ändere das mal wie folgt:
Case $hButton
FileOpen($file); Das brauchst du trotzdem, da du die Datei (richtigerweise) nach dem Einlesen schließt!
if FileWrite($file, GuiCtrlRead($IEdit)) then
MsgBox(0,"Fertig!","Datei wurde gespeichert!")
Else
MsgBox(0,"Fehler!","Datei konnte nicht gespeichert werden!")
Endif
FileClose($file)
Zusätzlicher Tipp: Sollte sich der Inhalt von $file nicht ändern, empfehle ich, diese zudem auch als Const zu definieren.
Btw.: Das Suchwort "Update" ist hierbei auch vollkommen verkehrt.
Das was du willst, ist:
1. Datei öffnen/lesen (Fileopen), hast du ja gefunden
2. In das Edit den Inhalt schreiben
3. Den Inhalt auslesen
4. Das ausgelesene in eine Datei schreiben
Etwas dynamischer könntest du das machen, indem du auch die Funktionen zu den einzelnen Buttons in ein entsprechendes Array packst und dann so ausführst (die beiden Zahlen müssten immer zusammen passen und die Funktion muss es natürlich geben):
Einen Tipp noch: Das Ubound ist unnötig, sofern dein $rechnerarr durch Stringsplit gefüllt wird und nicht explizit $STR_NOCOUNT mit angegeben wurde.
Du kannst das einfacher so setzen: Global $rechnerbtn[$rechnerarr[0]]
Das was du möchtest, kenne ich nur mit einem Buttonarray. Beispiel: https://www.autoitscript.com/forum/topic/12…create-buttons/
Zumal du im Code damit dann garnicht arbeiten kannst.
Du kennst den Variablennamen nicht und kannst ihn dann gar nicht ansprechen.
Im Code musst du deine Variablennamen durchaus Sinnvoll wählen.
Assign($Arrayname, $data, $ASSIGN_FORCEGLOBAL) ist das Gleiche wie Global $Arrayname = $data bzw.
Assign($Arrayname, 'Daten', $ASSIGN_FORCEGLOBAL) ist das Gleiche wie Global $Arrayname = 'Daten'
(Ich bevorzuge dir korrekten Konstanten zu nutzen anstatt der Zahl)
Ich weiß nicht ob man deinen Wunsch mit "Execute()" hin bekommen könnte, halte es aber nach wie vor für nicht Sinnvoll.
Und wenn du dir das erforderliche aus einem Beispiel holst. Sprich: erstelle eine Mail mit Outlook mit eingebettetem Bild, speichere diese Mail dann als html und schaue dir den code an.
Da ich aktuell nicht weiß wie du in der UDF der Text etc. zusammengesezt wird, weiß ich nicht ob dir das hilft aber einen Versuch wäre es doch Wert.
casi4712 : Das Problem hierbei war schlicht und einfach: Du hast viele If-Bedingungen aber nie den "not" bzw. "else" Fall bearbeitet. Wenn du den Stecker ziehst ist das Ergebnis wohl kein Objekt und du springst somit früher raus, wofür es keine Behandlung gab, in allen anderen Fällen jedoch funktionierte.
Versuch mal immer auch den "Else" Fall abzuarbeiten. Wenn de rcode steht kannst du immer noch schauen ob du diese besser zusammen fassen kannst (was hier bei Velted und meiner letzten Variante der Fall ist). Dann stolperst du weniger.
casi4712 :Mit der Änderung aus Beitrag #52 könnte es klappen. Gelesen hast du es ja schon, wie sieht es mit einem Test aus?
Velted Ob du das nun mit Return rausspringen und ansonsten das letzte Guictrlsetdata ausführst oder das mit dem else block oben machst (wie es in meiner Änderung steht) ist vollkommen egal und eher Geschmackssache (ich mag lieber klare Else definitionen). Aber eine Sache fällt mir beim Schreiben durchaus auf: Für alle anderen "Else" Fälle gibt es keine Definition in meiner Variante und somit keine Rücksetzung, daher:
casi4712 : Entweder du nimmst die Variante von Velted oder mach es so:
Func _ActiveIP()
Local $objAdapter
Local $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $sHost & "\root\cimv2")
$IP = 'kein Netz' ;Auf Default zurücksetzen
$Gateway = '' ;Auf Default zurücksetzen
If IsObj($objWMIService) Then
Local $colAdapter = $objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x30)
If IsObj($colAdapter) Then
For $objAdapter In $colAdapter
If ($objAdapter.IPAddress(0)) Then
If $objAdapter.DefaultIPGateway(0) Then
If IsString($objAdapter.IPAddress(0)) And _
IsString($objAdapter.DefaultIPGateway(0)) Then
$IP = $objAdapter.IPAddress(0) ;Wird nur gesetzt, wenn etwas gefunden wurde
$Gateway = $objAdapter.DefaultIPGateway(0) ;Wird nur gesetzt, wenn etwas gefunden wurde
;~ Exitloop ;Optional! Mit Exitloop: Ausgabe ERSTER Fund, Ohne Exitloop: Ausgabe LETZTER Fund!
EndIf
EndIf
EndIf
Next
Endif
EndIf
GUICtrlSetData($IPLabel, $IP) ;Wird immer gesetzt: Default, wenn nichts gefunden wurde oder die IP
EndFunc ;==>_ActiveIP
Alles anzeigen
Tipp: Bau dir zu Testzwecken ein manuelles Auslesen (auf einen Button, der dann deine Funktion aufruft (inkl. einer Ausgabe in einer MsgBox ($objAdapter.IPAddress(0)) oder so und ohne die Adlib registrierung) wenn du ihn drückst).
Dann schaut du was er dir ausgibt, nachdem du das Kabel gesteckt hast und nochmal nachdem du es gezogen hast.
Du musst nun step by Step das Problem finden.
Nein, ich meine diese hier (hier fehlt immer noch das Auskommentieren in Zeile 103, siehe unten). Und pack mal das Return hinter die if Abfrage (bzw. das kann eigentlich weg, da du nichts zurück gibst)), das habe ich versehentlich mit rein kopiert.:
If ($objAdapter.IPAddress(0)) Then
If $objAdapter.DefaultIPGateway(0) Then
If IsString($objAdapter.IPAddress(0)) and _
IsString($objAdapter.DefaultIPGateway(0)) Then
$IP = $objAdapter.IPAddress(0)
GUICtrlSetData($IPLabel, $IP)
$Gateway = $objAdapter.DefaultIPGateway(0)
;- GUICtrlSetData($GatewayLabel, $Gateway)
Else
GUICtrlSetData($IPLabel , "Kein Netz")
;- GUICtrlSetData($GatewayLabel, "")
Endif
EndIf
EndIf
;- Return ;wird eigentlich nicht benötigt, da du keinen Wert zurück gibst.
Alles anzeigen
Und ob du wirklich alle !50! Millisekunden die Abfrage laufen lassen willst, solltest du dir echt überlegen.
Das bedeutet, das diese Abfrage 20mal je Sekunde läuft und ist daher total überdimensioniert. Die Default 250ms sind schon in Ordnung, wobei auch 500ms gehen würden.
Wenn du meine Änderung noch drinne hast, finde ich es nicht unlogisch.
Denn, nun wird geprüft ob du wirklich einen String zurück bekommst, ansonsten konnte er es nicht auslesen = keine Verbindung.
Meines Wissens ist eine, außerhalb einer Funktion, deklarierte Variable immer global, auch wenn sie mit Local deklariert wurde. Die Verwendung von Global ist aber 'transparenter'
.
Nur am Rande : Auf Dim zur Variablendeklaration sollte man lt. Hilfe ja eh verzichten.
Ich weiß aber hier scheint noch viel Unwissenheit zu herrschen beim TE (nicht böse gemeint), daher sollte man alles klar definieren um zu Wissen was/wie läuft.
Deswegen empfehle ich ja auch die Verwendung von #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 bzw. Opt('MustDeclareVars', 1)
Noch ein Nachtrag, da ich es gerade gesehen habe (unabhängig von meinem vorherigen Post):
Du deklarierst hier Variablen immer noch falsch:
Sorry, eine Zeile vergessen auszukommentieren aber mein Copebeispiel war nichts für F5!
Das war komplett unabhängig zu betrachten.
Aber kommentiere die Zeile mal aus, wie ich es obennachkommentiert habe, dann sollte es funktionieren.
Schon mal geprüft, was du überhaupt als Rückgabewert bekommst in dem nicht funktionierenden Fall (Consolewrite() und per F5 starten)?
Bei folgendem bitte korrigieren falls ich falsch liege:
Bau mal folgendes ein (bzw. ersetze Zeile 101-113):
For $objAdapter In $colAdapter
If ($objAdapter.IPAddress(0)) Then
If $objAdapter.DefaultIPGateway(0) Then
If IsString($objAdapter.IPAddress(0)) and _
IsString($objAdapter.DefaultIPGateway(0)) Then
$IP = $objAdapter.IPAddress(0)
GUICtrlSetData($IPLabel, $IP)
$Gateway = $objAdapter.DefaultIPGateway(0)
;- GUICtrlSetData($GatewayLabel, $Gateway)
Return
Else
GUICtrlSetData($IPLabel , "Kein Netz")
;- GUICtrlSetData($GatewayLabel, "")
Endif
EndIf
EndIf
Next
Alles anzeigen
Ich muss überzeugt werden, wenn man andere Meinung ist oder andere Vorstellungen eines Lösungsweges hat. Ansonsten bin ich stur. Meistens zumindest. Leider, das gebe ich auch zu, bin ich zu oft zu verbissen. Wenn ich für etwas eine Lösung haben möchte, dann muss es die auch geben. Das kann dann auch schon mal Tage oder Wochen dauern, bis ich sage "Dann halt nicht". Das kann Arbeitszeit kosten und das ist dann nicht unbeding first class.
Das kommt mir irgendwie bekannt vor ![]()