Verwende mal statt der Zeile:
[autoit]GUICtrlSetData ($SplashInLabel[2], $ReadLine)
[/autoit]
Diese hier:
If IsArray($SplashInLabel) Then GUICtrlSetData($SplashInLabel[2], $ReadLine)
[/autoit]Verwende mal statt der Zeile:
[autoit]GUICtrlSetData ($SplashInLabel[2], $ReadLine)
[/autoit]
Diese hier:
If IsArray($SplashInLabel) Then GUICtrlSetData($SplashInLabel[2], $ReadLine)
[/autoit]Ok vllt hilft dir ja mein Script weiter^^
#include <Array.au3>
#include "_CSV.au3"
Global $aTreeView[1][2]; [x][0] = CtrlID, [x][1] = PositionNr
Global $aCSV = _ParseCSV('test.csv', ';')
_ArrayDisplay($aCSV)
GUICreate("")
$aTreeView[0][0] = GUICtrlCreateTreeView(5, 5, 390, 390)
For $i = 0 To UBound($aCSV) - 1
If _ArraySearch($aTreeView, $aCSV[$i][0], 0, 0, 0, 2, 1, 0) > -1 Then ConsoleWrite('Positionsparameter existiert schon: ' & $aCSV[$i][0] & @LF)
Select
Case StringRegExp($aCSV[$i][0], '^\d+\.\d+$')
_ArrayAdd($aTreeView, $aCSV[$i][0] & '|' & GUICtrlCreateTreeViewItem($aCSV[$i][1], $aTreeView[0][0]))
ConsoleWrite('Top Item: ' & $aCSV[$i][0] & @LF)
Case StringRegExp($aCSV[$i][0], '^(\d+\.){2,}\d+$')
$iHit = _ArraySearch($aTreeView, StringLeft($aCSV[$i][0], StringInStr($aCSV[$i][0], '.', 0, -1)-1), 0, 0, 0, 2, 1, 0)
If $iHit > -1 Then
_ArrayAdd($aTreeView, $aCSV[$i][0] & '|' & GUICtrlCreateTreeViewItem($aCSV[$i][1], $aTreeView[$iHit][1]))
ConsoleWrite('Child Item: ' & $aCSV[$i][0] & @LF)
Else
ConsoleWrite('Parent ID existiert nicht: ' & $aCSV[$i][0] & @LF)
EndIf
Case Else
ConsoleWrite('Positionsparameter ungültig: ' & $aCSV[$i][0] & @LF)
EndSelect
Next
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd
Mit der csv aus Post4 von dir sollte das funktionieren.
Im include _CSV.au3 hab ich nur die _ParseCSV funktion drin. Musste ich mir vorhin googln^^
(obwohl die OutlookEX.au3 auch gegangen wäre)
Wo hat das ganze was mit Autoit zu tun?
D.h. zu dem Zeitpunkt an dem du $SplashInLabel[2] verwendest existiert es noch nicht als Array.
Wahrscheinlich hast du die Variable schon Deklariert aber sie ist kein Array wenn du sie verwendest.
Am besten prüfst du vor der verwendung mit IsArray() ob die Variable ein Array ist. Falls ja kannst du sie verwenden, falls nein musst du etwas anderes machen.
Ich tippe mal darauf dass du $SplashInLabel[2] verwendest bevor du überhaupt die _ProgressGui Funktion aufgerufen hast.
Mit einer "normalen" Variable fällt das natürlich nicht auf weil dann das GUICtrlSetData einfach immer fehlschlägt bis das Control existiert...
Ok könnte auch sein dass ich da was falsch verstanden habe^^
Ich hatte den aufbau der Treeview so verstanden, dass eine Nr. 9.3.1 ein ChildItem zum 9.3 ist.
Ein 9.3.4.1 ist das Child zum 9.3.4. Das wiederum ist ein Child von 9.3
Mit deiner CSV also so ein aufbau (- steht für ein Child, -- ein Child des Childs )
9.1;USG_P-023698.SLDPRT;ET-00109324;;;;;;;;;;
9.2;Kopie_D0229799.sldprt;ET-00066022;;;;;;;;;;
9.3;USG_A-007252.SLDASM;ET-00109239;;;;;;;;;;
-9.3.1;USG_P-022234.sldprt;ET-00098129;;;;;;;;;;
-9.3.2;USG_P-000420.SLDPRT;ET-00045705;;;;;;;;;;
-9.3.3;USG_P-023801.SLDPRT;ET-00110462;;;;;;;;;;
-9.3.4;USG_A-007279.SLDASM;ET-00109329;;;;;;;;;;
--9.3.4.1;USG_P-023700.SLDPRT;ET-00109328;;;;;;;;;;
--9.3.4.2;USG_P-023629.sldprt;ET-00108109;;;;;;;;;;
-9.3.5;USG_P-023676.SLDPRT;ET-00109288;;;;;;;;;;
-9.3.6;USG_P-023741.SLDPRT;ET-00109388;;;;;;;;;;
-9.3.7;USG_P-023644.SLDPRT;ET-00109238;;;;;;;;;;
-9.3.8;USG_P-023702.SLDPRT;ET-00109331;;;;;;;;;;
-9.3.9;USG_P-023675.SLDPRT;ET-00109287;;;;;;;;;;
-9.3.10;SM620D0218513.sldprt;ET-00048228;;;;;;;;;;
-9.3.11;USG_P-023643.SLDPRT;ET-00109237;;;;;;;;;;
-9.3.12;USG_A-007294.SLDASM;ET-00109387;;;;;;;;;;
--9.3.12.1;USG_P-023629.sldprt;ET-00108109;;;;;;;;;;
--9.3.12.2;USG_P-023740.SLDPRT;ET-00109386;;;;;;;;;;
-9.3.13;USG_P-023678.SLDPRT;ET-00109290;;;;;;;;;;
-9.3.14;USG_P-023674.SLDPRT;ET-00109285;;;;;;;;;;
9.4;USG_P-023685.SLDPRT;ET-00109306;;;;;;;;;;
9.5;Kopie_D0248382.sldasm;ET-00066299;;;;;;;;;;
-9.5.1;Kopie_D0235178.sldasm;ET-00066066;;;;;;;;;;
--9.5.1.1;Kopie_D0228903.sldprt;ET-00066018;;;;;;;;;;
--9.5.1.2;Kopie_Sicherungsring DIN 471 FST 20.sldprt;ET-00066801;;;;;;;;;;
--9.5.1.3;Kopie_D0235161.sldprt;ET-00066065;;;;;;;;;;
--9.5.1.4;Kopie_Sicherungsring DIN 472 FST 47.sldprt;ET-00066805;;;;;;;;;;
--9.5.1.5;Kopie_Rillenkugellager 6204-2RSR.sldprt;ET-00066688;;;;;;;;;;
9.6;SM620D00320275_A.sldprt;ET-00047154;;;;;;;;;;
9.7;USG_A-007272.SLDASM;ET-00109309;;;;;;;;;;
Du willst es anders oder?
D.h. du scheiterst nur an einem Error?
Welchen Error bekommst du denn?
Und zu welchen Zeitpunkt? (also was hast du zuvor gemacht)
Interessant wäre dein Script gewesen in dem man den Fehler sieht^^
Aber ich verstehe das richtig dass du mehrere GUI's verwendest oder?
Eventuell wird ein GUISwitch() benötigt
Ok ich glaub ich weiß worans liegt^^
Dein Script läuft mit normalen Rechten und das Program mit Adminrechten oder?
Mach mal ein #RequireAdmin in dein Script und teste nochmal
Keine weiteren Vorschläge? Gerne kann ich das Programm auch zur Verfügung stellen.
Das wäre vermutlich nicht schlecht
Manchmal ist es etwas Bastelei bis man eine fremde GUI gesteuert bekommt.
Fällt aber im Fehlerfall auf die Schnauze
Aber ja hast natürlich recht
Also ich würde das ganze mit einem zweidimensionalen Array abbilden, das so aussieht:
[autoit]Global $aTreeview[1][2]; [x][0] = CtrlID, [x][1] = PositionNr
[/autoit]
So kannst du wenn du ein neues Item anlegen willst immer rausfinden wer der zugehörige Parent sein soll. (Nämlich die ID wo die PositionsNr passt)
Im Prinzip kannst du dann wenn du eine ID 1.2.3 anlegen willst einfach das Array durchsuchen nach der PositionsNR 1.2 (letze zahl wegschneiden).
Wenn du einen Treffer hast dann hast du auch die zugehörige Parent-ControlID die du brauchst um das Item anzugelegen
Das Array dann einfach mit der neuen ControlID + PositionsNR füttern.
Soweit zum ablauf. Ich hätte auch ein fertiges Beispiel, aber ich denke es ist besser wenn dus erstmal selbst probiert.
Könnte sonst etwas kompliziert sein^^
OnEvent hat egtl nichts mit deinem Problem zu tun. Du hast einfach was zusammengebastelt das zwar funktionieren kann aber sehr umständlich ist.
Send und Hotkeyset sind einfach hier nicht ideal, aber shadow667 hat ja eh schon eine bessere Lösung gepostet
Was nicht heißt dass es im OnEventModus nicht geht oder schlechter ist. Es wäre nur anders, aber wenn du es wieder mit Hotkeys machst einfach nicht schön.
Also wenn das jetzt ein Battle werden soll wer das kürzere Script schreibt dann ist folgendes vom Prinzip nichts anderes als deins und hat 45% Zeichen weniger
$a=StringRegExp(FileRead("sid.txt"),"(\S.*?)\h+(S[\d-]+)",3)
If @error Then Exit
For $i = 0 To UBound($a)-2 Step 2
MsgBox(0,"","samid: '"&$a[$i]&"'"&@LF&"sid: '"&$a[$i+1]&"'")
Next
Und selbst da geht noch was^^
Herzlich willkommen und viel Spaß im Forum
So vielleicht?
#include <MsgBoxConstants.au3>
[/autoit] [autoit][/autoit] [autoit]Local $objTextFile, $strLine
$strFileName = "sid.txt"
$objTextFile = FileOpen($strFileName, 0)
$strLine = FileReadLine($objTextFile)
While not @error
$SID_array = StringRegExp($strLine, '\b(.+)\b\s+(S[\d-]+)', 2)
If IsArray($SID_array) Then
Local $name = $SID_array[1]
Local $SID = $SID_array[2]
MsgBox($MB_SYSTEMMODAL, "HINWEIS", 'name "' & $name & '"' & @crlf & 'SID "' & $SID & '"')
EndIf
$strLine = FileReadLine($objTextFile)
WEnd
Also normalerweise läuft das so, dass du deinen Versuch postst. Sonst sehen wir ja nicht was du falsch machst.
Wenn du immer nur eine RDP Session haben willst dann würde ich so vorgehen:
Beide GUI's gleich zu Anfang erstellen, RDP GUI versteckt lassen, Auswahlgui anzeigen
Erweiterten GUIGetMsgMode (oder den OnEventModus)
Wenn Connect button betätigt wird dann Auswahl Gui Hiden, RDP Gui anzeigen und die Verbindung aufbauen.
Wenn RDP Gui geschlossen oder RDP Session beendet wird dann wieder Auswahlgui anzeigen (oder Script beenden, je nachdem was du willst)
Edit1:
Bei längeren Scripten bitte die Spoiler benutzen
Öhm welchen Wert du genau willst kann ich dir nicht sagen.^^
Nur irgendeinen wirst du setzen müssen. Ich hab einfach mal 123 (Pixel) angegeben. So entsteht ein Quadrat mit der Kantenlänge von 246 Pixeln.
Den Bereich, den du willst, musst du schon selber angeben
Naja einfach alles irrelevante weglassen.
Ist doch ganz egal woher der String kommt und in welcher spalte einer Datenbank das Ding steht
Dieser vorletzte satz von dir ist eigentlich das einzig wichtige. Der geht aber in dem ganzen anderen Rest unter.
Wenn du lernst dein Problem besser zu beschreiben wirst du dich selbst auch viel leichter tun und viele Dinge selbst lösen können
Bitte nicht als Beleidigung auffassen. Wir helfen ja gerne
Indem du der variable einen wert zuweist?
[autoit]$radius=123
[/autoit]Wow also wenn ich das richtig verstehe schaffst du es eine Kleinigkeit sehr kompliziert zu schreiben.
Willst du einfach nur überprüfen ob $strData_A mit - anfängt und mit - aufhört?
Dann brauchst du Stringleft und Stringright.