Hey Phil-IT
wäre nett wenn du deine Themen immer als gelöst markierst sobald sie abgeschlossen sind.
Einfach den ersten Beitrag editieren, Präfix gelöst wählen und absenden
Beiträge von Schnitzel
-
-
Ok und was genau funktioniert manchmal nicht?
Hast du maximierte Fenster die den Bereich überlagern? -
Wie gesagt wurde Arraycreate entfernt. D.h. du musst dir selbst behelfen.
[autoit]
Versuchs mal damit:Local $oSave[1] = [_OOsetProp("FilterName", $filter)]
[/autoit] -
-
Du musst das handle angeben also
FileClose ($op1) -
Kann man den Fortschrittsbalken nicht abfragen?
_ArrayCreate vllt?
Edit:
Zumindest mit autoit versionen < 3.3.10.0
Mit 3.3.10.0 wurde _ArrayCreate entfernt. -
Sehe ich bisschen anders. Sauber programmieren ist sprachunabhängig und die Anzahl an Handles ist jetzt nicht Autoit sondern eine Windows limitation
Da wird man in anderen Sprachen genauso Probleme bekommen
Aber ja ich verstehe was du meinst. Schnelle einfache Lösung und so -
Schonmal daran gedacht die Dateien wieder zu schließen?
[autoit]
[/autoit]
$op1 = FileOpen('GDIPlus_Img_StatusIST.jpg',16);aktuelles Bild
$op2 = FileOpen('GDIPlus_Img_StatusRef.jpg',16);Referenzbild beim Start (INAKTIV)
Auch filehandles sollte man nicht unendlich haben ...
Edit:
Interessanter link dazu:
http://blogs.technet.com/b/markrussinov…29/3283844.aspxAlternativ kannst du dein Programm ja auch alle X Stunden neustarten lassen, ich habe auch schon einige Programme geschrieben welche eine lange Laufzeit aufwiesen, und gerade bei automatisierungen bekam ich oft ein Speicherleck. Da reichen schon ein oder zwei kleine Fehler, die summieren sich aber entsprechend der Laufzeit. Ich hatte schon nach 4 Stunden Laufzeit Speicherververbrauch von mehreren GB - Nur weil ich vergaß etwas GDI zu releasen.
Schlampig programmieren und das ganze durch einen unschönen workaround lösen? -
Welches script verwendest du denn?
-
Naja es macht sinn wenn er Dateitypen hat wo er nicht weiß was dahinter steckt. Allerdings müssen die dann auch erstmal in der Registry gepflegt sein und selbst mit einer Kombination aus PerceivedType und Content Type wird er nicht alle finden.
Die Magische Zahl ist da natürlich besser, braucht aber auch ein mapping.
Einen Teil der Datei einlesen und überprüfen ob bestimmte Zeichen enthalten sind is dafür langsam (Und evtl fehleranfällig wenn man zuwenig einliest)Im Prinzip haben wir drei Lösungen. Er wird schon die richtige für sich aussuchen^^
-
Naja das ist halt wieder Windows Gedanke. Wenn ich eine mp3 in avi umbenenn hab ich dann nen Film?
Aber im Prinzip hast du natürlich recht -
Als Windows user verlässt man sich doch normalerweise auf die Dateiendung oder
Also ich würde nicht die ganze Datei einlesen sondern nur die 100 Zeichen oder so. Das sollte dann doch aussagekräftig genug sein
-
So wie du es dir vorstellst ginge es natürlich. Dazu brauchst du eine While Schleife + _Excel_RangeRead + If-Abfrage
Du kannst aber auch die gesamte Excel in ein Array einlesen und nachsehen wie gros das Array ist:
Spoiler anzeigen
[autoit]#include <Excel.au3>
[/autoit] [autoit][/autoit] [autoit]$sPfad = StringLeft(@AutoItExe, StringInStr(@AutoItExe, '\', 0, -1)) & 'Examples\Helpfile\Extras\_Excel1.xls'
[/autoit] [autoit][/autoit] [autoit]$oAppl = _Excel_Open()
[/autoit]
$oWorkbook = _Excel_BookOpen($oAppl, $sPfad)
$aExcel = _Excel_RangeRead($oWorkbook)
$iResult = UBound($aExcel)
MsgBox(0,"Die Exceldatei hat soviele Zeilen:", $iResult)
_Excel_Close($oAppl) -
Woran erkennt man denn ob die Calc-Datei vollständig geladen wurde?
-
Google ist dein freund^^
http://www.autoitscript.com/forum/topic/71…on-pure-autoit/
Auf Seite 3 ist wohl noch ein gültiger downloadlink -
Also grundsätzlich darfst du nicht eine zweite Endlosschleife bauen (schon garnicht in einer Funktion) in der dann deine GuiEvents nicht abgefragt werden.
Adlibregister kann eine lösung für dich sein. Und zwar müsstest du dazu deine _START() Funktion so umbauen dass sie auch funktioniert wenn du sie immer wieder aufrufst.
(was auch immer die genau tut^^)
D.h. statt einer Endlosschleife in der Start Funktion brauchst du eine Start-Funktion die immer wieder per Adlibregister aufgerufen wird.
In der Startfunktion kannst du ja dann die gegebenheiten prüfen und darauf reagieren.
Achte aber darauf dass die Start funktion möglichst schnell durchläuft. In jedem fall um einiges schneller als der Zeitwert den du bei Adlibregister angibst -
Also grundsätzlich möglich ja aber mir fallen im Moment nur drei Wege ein sowas zu machen und alle haben so ihre Tücken.
Weg 1: Das Script solange laufen lassen bis das Datum erreicht ist, dann die Email senden
Weg 2: Ein externes Tool verwenden das sich um die Zeitsteuerung kümmert. Unter windows z.B. einen Scheduled Task erzeugen der dann die Email versendet
Weg 3: Die Daten für die Email in einer Datei zwischenspeichern und bei jedem Start des Tools überprüfen ob noch alte Daten da sind die versendet werden müssen.Alle drei Wege haben so ihre Nachteile.
1. Das Script muss ewig laufen -> bei absturz keine Email.
2. Der Rechner auf dem der Scheduled Task liegt muss laufen
3. Nur bei einem erneuten Scriptstart werden Emails versandtSoweit ich weiß bieten die SMTP server keine direkte Möglichkeit für eine verzögerte zustellung
-
Warum Deklarierst du überhaupt alles als Global am Anfang deines Scripts?
[autoit]
Bei sowas bekommt man ja Kopfweh -.-
Versuch selbst mal zu debuggen.
Wenn du so ne meldung bekommst wie: Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
dann prüf in der darüberliegenden Zeile ob die Variable die du verwendest ein array ist: isarray(), _arraydisplay,...
Und wieviele Elemente dein array hat: ubound()
Schau dir am besten dazu das Debug und das Array tutorial aus meiner Signatur an
dass damit was nicht stimmt:GUICtrlSetData($PBMarquee[3], $ReadLine)
[/autoit]
[autoit]
Sollte dir nach der zeile schon bewusst sein:Global $PBMarquee[3]
[/autoit]
Steht sogar in der Bemerkung zu Ubound ...Der Thread hier ist fast schon etwas verarsche.
Du hantierst immer wieder mit anderen Variablen rum und das ist nur ein rumgestochere ohne Ansatz von Eigeninitiative. Für das Script das du da zusammengebastelt hast fehlt dir einfach viel zu viel Hintergrundwissen... -
Willste beleidigen oder Helfen?, geheimerei? hat rein gar nichts damit zu tun der Rest der Script sind nur andere Funktionenen die Rein gar nichts mit dem problem zu tun haben
und 150% unabhängig von dem ganzen hier, deswegen habe ich mir die arbeit gespart damit ich und die Jenigen die helfen mögen das problem nicht aus den augen verlieren.
Ich muss Andy zustimmen. Das was in deinen ersten Post steht hat eigentlich garnichts mit dem Problem zu tun bzw. dadurch wird es nicht ersichtlich.
Konkret wurde es erst ab den Error. Und wenn man schon nen error bekommt dann ist debugging das A und O
"Steht eigentlich alles oben" ist auch wieder am Problem vorbei, weil das oben nicht zu gebrauchen ist.
Du deklarierst irgendwo eine Variable und bevor sie zum Array wird verwendest du sie schon als Array.Das du das Problem mit einer "normalen" Variable nicht hattest liegt nicht daran dass das Problem dort nicht auch auftrat. Es hatte nur nicht die Folgen dass das Script beendet wird.
Schlampig geschrieben war es mit der "normalen" Variable genauso...Edit1:
Wirf mal nen Blick in meine Signatur. Da ist unter Tutorials für den Einstieg in Autoit ein nützlicher Link um Fehler selbst zu finden.
Der Ersteller des Threads weiß wovon er spricht und sollte ruhig respektiert werden -
Wir haben hier zwei Probleme:
[autoit]
Erstens überschreibst du in Zeile 31 deine $Combo1 Variable. Damit hast du die ID der Combobox nirgends mehr gespeichert und du kannst nicht (mehr so leicht) auf die Combobox zugreifen.
Ersetze deine Zeile 31 durch das:GUICtrlSetData(-1, "Praktikant|Praktikant2|Praktikant3|Praktikant4")
[/autoit]
[autoit]
Außerdem solltest du den Wert erst dann auslesen wenn er verändert wurde, oder wenn du auf den Button zum Email senden klickst.
Wenn du den GuiGetMsgMode verwendest sieht das etwa so aus:While 1
[/autoit]
Switch GUIGetMsg()
case $Button1; wenn der Ausführen Button geklickt wurde dann:
$wert = GUICtrlRead($Combo1, 1)
MsgBox(0,"Sende die Email mit der info aus der Combobox", "Gewählter Account: " & $wert)
EndSwitch
WEnd