Generell ist das Vorgehen ok, wenn aber sehr viele neue Elemente erstellt werden, ist dieses Verfahren (ReDim) relativ langsam.
Es bietet sich dann an, erstmal alles in einen String zu packen und diesen am Ende der Schleife mit StringSplit zu splitten.
Das hängt aber vom Verwendungszweck ab. Willst Du ein konkretes Problem lösen oder war die Frage allgemein gestellt?
Beiträge von Oscar
-
-
Man könnte Dateinamen und Such-Array "auf den gleichen Nenner" bringen und dann per StringInStr suchen lassen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Global $aNames[5] = ['Peter Soundso', 'Gabi von Gestern', 'Michael Mustermann', 'Michael Mittermeier', 'Muster Gestern']Global $aFilenames[6] = ['mek249ß0320ß-d3.3s22Gabi-von.gestern.i92390dmdmer.doc', 'blaGabi.doc', '4711Gestern.txt', 'michaelmustermann92ß392ß3ß2sallsa.txt', '333wasarmichael-mittermeier.rtf', '0815Peter.exe']
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To UBound($aFilenames) - 1
[/autoit]
For $j = 0 To UBound($aNames) - 1
If StringInStr(StringRegExpReplace($aFilenames[$i], '[\.,\+-\s]', ''), StringRegExpReplace($aNames[$j], '[\.,\+-\s]', '')) Then
ConsoleWrite('Treffer: ' & $aFilenames[$i] & @CR)
ExitLoop
EndIf
Next
Next
Das passt zumindest für die genannten Beispiele. Wenn da noch andere Zeichen zwischen den Namen stehen können, müsste man das RegExp-Pattern entsprechend anpassen. -
Hmm...Ich habe dort jetzt mal einen DWORD-Schlüssel "Period" erstellt (gab es nicht) und den Wert 65531 eingetragen. Danach einen Neustart durchgeführt.
Im Einstellungsdialog habe ich dann die Uhrzeit aktualisieren lassen und dann kam das:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
Kann es sein, dass das unter Windows7 (64 Bit) nicht funktioniert? -
Die automatische Aktualisierung von Windows fragt den Zeitserver nur einmal in der Woche ab und da kann es dann schonmal zu ein paar Sekunden Abweichung kommen.
Ich wollte gern, dass meine Uhren synchron laufen.
-
Ja, es wird wohl darauf hinauslaufen. Und alles nur, weil man zum stellen der Uhrzeit AdminRechte benötigt.
Vielleicht sollte ich mir überlegen, das automatische stellen der Uhr Windows zu überlassen.
Ich muss erstmal drüber schlafen... -
Ok, das ist schonmal nicht schlecht. Obwohl das ja wieder in einer Passwort-Abfrage/-Speicherung mündet.
Obwohl, dann geht ja auch RunAs mit Eintrag im @StartupDir.

-
volle: Solange Du alles kompatible MP3s abspielst ist auch alles in Ordnung. Es gibt aber verschiedene Arten der Codierung beim MPEG-Format.
@NoName: Ja, die Fehlermeldung kenne ich. :wacko: Deshalb benutze ich ja beim StarPlayer auch die BASS-UDF.

-
Die _Sound-Funktionen haben Probleme, wenn es sich nicht um "echte" MP3s handelt. Das heißt, es muss beim erstellen wirklich MPEG1 Layer III (wird als MP3 bezeichnet) verwendet worden sein.
Wird beispielsweise MPEG1 Layer I verwendet (diese werden oft auch mit der Endung MP3 angelegt), so werden die Zeiten nicht korrekt berechnet.Wenn Du das umgehen willst, benutze die BASS-UDF.
-
Bei RunAs müsste ich das Admin-Passwort abfragen und irgendwo speichern. Ungünstig!
Ich möchte es dem Benutzer ja möglichst erleichtern, damit er das Programm nicht selbst in die Aufgabenplanung packen muss (ist doch relativ kompliziert).Und beim Taskplaner finde ich auch keine Möglichkeit, um das Programm als Admin zu starten. Hmmm...
Verdammt, das muss doch irgendwie gehen...
-
Ich möchte, dass sich mein Programm in den Windows-Autostart packen kann.
Dazu rufe ich ein Hilfsprogramm auf:Spoiler anzeigen
[autoit]
[/autoit]
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=gfx\clock.ico
#AutoIt3Wrapper_outfile=SetAutoStart.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
If Not @Compiled Then Exit 0
If $CmdLine[0] <> 1 Then Exit 0
Switch $CmdLine[1]
Case 1
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'Digitaluhr', 'REG_SZ', Chr(34) & @ScriptDir & '\Digitaluhr3.exe' & Chr(34))
Case 0
RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'Digitaluhr')
EndSwitch
Dort werden dann AdminRechte angefordert, damit der RegKey erstellt werden kann. Soweit funktioniert das Ganze auch. Allerdings benötigt mein Programm selbst AdminRechte, um die Uhrzeit (bei Bedarf) stellen zu können.
Ich möchte aber kein #RequireAdmin ins Skript aufnehmen, weil ich dann jedes Mal beim Systemstart dieses bestätigen müsste.Also habe ich im Netz gesucht und bin auf die Aufgabenplanung gestossen. Dort kann man ein Programm automatisch mit AdminRechten starten lassen. Ausprobiert -> funktioniert.
Aber...ich möchte das mit AutoIt automatisieren, sodass man als Benutzer nur einen Menüpunkt auswählen muss.
Meine Frage ist nun:
Wie kriege ich mein Programm in die Aufgabenplanung und wie kann ich das wieder entfernen? -
Von mir auch die besten Wünsche zum neuen Lebensjahr.
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Dann so:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>$sFilename = @ScriptDir & '\test.txt'
[/autoit] [autoit][/autoit] [autoit]
$sFile = FileRead($sFilename) ; Datei einlesen
$array = StringRegExp($sFile, '(?s)\[\d+\](.+?)\[\/\d+\]', 3) ; Array erstellen
;~ _ArrayDisplay($array)
$index = 0
HotKeySet('{F8}', '_SendText')
HotKeySet('{ESC}', '_End')While Sleep(100)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _SendText()
[/autoit] [autoit][/autoit] [autoit]
Send($array[$index])
$index += 1
If $index = UBound($array) Then $index = 0
EndFuncFunc _End()
[/autoit]
Exit
EndFunc -
Wie mach ich ihm dann klar, wo ein Textblock endet ?
Wie können wir das wissen, wenn wir die Textdatei nicht haben?
Du musst halt in die Textdatei irgendeinen "Trenner" einbauen oder, falls der bereits vorhanden ist, diesen zum splitten benutzen.
-
Willst Du denn den Text komplett ausgeben?
Ich vermute mal (Kristallkugel befragt
) nur zeilenweise:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$sFilename = @ScriptDir & '\dateiname.txt'
$sFile = FileRead($sFilename) ; Datei einlesen
$array = StringSplit($sFile, @CRLF, 3) ; am Zeilenende splitten = Array erstellen
$index = 0
HotKeySet('{F8}', '_SendText')
HotKeySet('{ESC}', '_End')While Sleep(100)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _SendText()
[/autoit] [autoit][/autoit] [autoit]
Send($array[$index])
$index += 1
If $index = UBound($array) Then $index = 0
EndFuncFunc _End()
[/autoit]
Exit
EndFunc -
Wohl eher so:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Global $ini
[/autoit] [autoit][/autoit] [autoit]
$ini = @DesktopDir & "\Test.ini"GUICreate("GUI", 139, 60, 192, 124)
[/autoit] [autoit][/autoit] [autoit]
$hCheck = GUICtrlCreateCheckbox("Checkbox1", 24, 24, 97, 17)
GUISetState(@SW_SHOW)AdlibRegister('_Check')
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
AdlibUnRegister('_Check')
Exit
EndSwitch
WEndFunc _Check()
[/autoit]
If FileExists($ini) Then
GUICtrlSetState($hCheck, $GUI_ENABLE)
Else
GUICtrlSetState($hCheck, $GUI_DISABLE)
EndIf
EndFunc ;==>_Check -
Das klappt aber nicht so wie ich will.
Wie willst Du es denn haben?
Wenn Du willst, dass Dein Skript auch erkennt, wenn erst nach dem Skriptstart die Inidatei auftaucht, dann musst Du das auch regelmäßig abfragen (AdlibRegister wäre hier das Stichwort). -
Du musst dabei schon Variablen benutzen.

So geht's:
Spoiler anzeigen
[autoit]
[/autoit]
$sHTMLFilename = "c:/Downloads/index.htm"
$sFile = FileRead ($sHTMLFilename)
$sFile = StringReplace($sFile, "NVU", "Dreamweaver")
$hFile = FileOpen($sHTMLFilename, 2)
If $hFile <> -1 Then
FileWrite($hFile, $sFile)
FileClose($hFile)
EndIf -
So ein Projekt kann man ohne Arrays doch gar nicht vernünftig aufziehen. Du musst alle Dateinamen aus dem Verzeichnis einlesen (Array), dann die ID3-Tags zu jedem Titel auslesen (Array) und mit diesen Angaben eine Textdatei erstellen.
BTW: Ich verwende bei meinem Starplayer das m3u-Playlistformat. Das ist in der einfachsten Form nur eine Auflistung der MP3-Dateinamen (ein Titel pro Zeile). Dieses Format wird von den meisten Playern unterstützt. -
Hier (ID3Tag.au3) findest Du die UDF einzeln und mit Beispiel.
-
Schwierige Frage...
Also unter IE6.x läuft es jedenfalls.
Ob's auch mit noch älteren Versionen funktioniert weiß ich nicht.