danke euch beiden.
ich habe mir die debug.au3 angesehen und habe anhand derer und try und error nun per GUICtrlCreateList und GUICtrlSetData die ausgabe hinbekommen.
ich habe eigentlich die ganze zeit "fast" alles richtig gehabt.
danke euch beiden.
ich habe mir die debug.au3 angesehen und habe anhand derer und try und error nun per GUICtrlCreateList und GUICtrlSetData die ausgabe hinbekommen.
ich habe eigentlich die ganze zeit "fast" alles richtig gehabt.
ich möchte ausgaben die ich festlege in der gui anzeigen lassen.
also wenn zum beispiel ein fehler aufgetreten ist definiere ich den (wie das geht ist mir klar) und in einem bereich der gui will ich den anzeigen lassen (ist mir unklar).
dieser bereich soll in nahezu echtzeit, oder aber nach beendigung der funktion unterhalb der eventuell schon bestehenden meldungen angezeigt werden.
ich habe diverses mit GUICtrlCreateListView gelesen, aber ich steige da nicht durch. vielleicht ist das ja auch der falsche weg.
kann mir jemand mal bitte auf die sprünge helfen?
ShellExecuteWait("rar.exe"," a -ep1 -p"&$pwd&" "&$archivname&" "&'"'&$sFileSelectFolder&'"',"")
[/autoit]jetzt klappt es. das script hat sich an leerzeichen im pfad verschluckt.
ich habe folgendes problem.
ich versuche am ende einer ordnerstruktur den inhalt von ordnern zu packen.
die stuktur sieht folgndermaßen aus. d:\bilder\januar ....februar ....märz etc.....
wenn ich nun mit shellexecutewait versuche den ordner januar zu packen, packt der auch februar, märz, april, usw. in dieses archiv.
rar geht also superrecursiv vor. lasse ich -r weg geht nur ganz kurz das fenster auf, ist aber zu schnell weg um was zu erkennen.
ShellExecuteWait("rar.exe"," a -ep1 -r -p"&$pwd&" "&InputBox("","archivname","123")&" "&$sFileSelectFolder,"")
[/autoit]die rar.exe ist im scriptverzeichnis
die liste der commands von rar sind folgende:
Usage: rar <command> -<switch 1> -<switch N> <archive> <files...>
<@listfiles...> <path_to_extract\>
<Commands>
a Add files to archive
c Add archive comment
ch Change archive parameters
cw Write archive comment to file
d Delete files from archive
e Extract files without archived paths
f Freshen files in archive
i[par]=<str> Find string in archives
k Lock archive
l[t[a],b] List archive contents [technical[all], bare]
m[f] Move to archive [files only]
p Print file to stdout
r Repair archive
rc Reconstruct missing volumes
rn Rename archived files
rr[N] Add data recovery record
rv[N] Create recovery volumes
s[name|-] Convert archive to or from SFX
t Test archive files
u Update files in archive
v[t[a],b] Verbosely list archive contents [technical[all],bare]
x Extract files with full path
<Switches>
- Stop switches scanning
@[+] Disable [enable] file lists
ac Clear Archive attribute after compression or extraction
ad Append archive name to destination path
ag[format] Generate archive name using the current date
ai Ignore file attributes
ao Add files with Archive attribute set
ap<path> Set path inside archive
as Synchronize archive contents
c- Disable comments show
cfg- Disable read configuration
cl Convert names to lower case
cu Convert names to upper case
df Delete files after archiving
dh Open shared files
dr Delete files to Recycle Bin
ds Disable name sort for solid archive
dw Wipe files after archiving
e[+]<attr> Set file exclude and include attributes
ed Do not add empty directories
en Do not put 'end of archive' block
ep Exclude paths from names
ep1 Exclude base directory from names
ep2 Expand paths to full
ep3 Expand paths to full including the drive letter
f Freshen files
hp[password] Encrypt both file data and headers
ht[b|c] Select hash type [BLAKE2,CRC32] for file checksum
id[c,d,p,q] Disable messages
ieml[addr] Send archive by email
ierr Send all messages to stderr
ilog[name] Log errors to file (registered versions only)
inul Disable all messages
ioff Turn PC off after completing an operation
isnd Enable sound
k Lock archive
kb Keep broken extracted files
log[f][=name] Write names to log file
m<0..5> Set compression level (0-store...3-default...5-maximal)
ma[4|5] Specify a version of archiving format
mc<par> Set advanced compression parameters
md<n>[k,m,g] Dictionary size in KB, MB or GB
ms[ext;ext] Specify file types to store
mt<threads> Set the number of threads
n<file> Additionally filter included files
n@ Read additional filter masks from stdin
n@<list> Read additional filter masks from list file
o[+|-] Set the overwrite mode
oc Set NTFS Compressed attribute
oh Save hard links as the link instead of the file
oi[0-4][:min] Save identical files as references
ol Save symbolic links as the link instead of the file
or Rename files automatically
os Save NTFS streams
ow Save or restore file owner and group
p[password] Set password
p- Do not query password
qo[-|+] Add quick open information [none|force]
r Recurse subdirectories
r- Disable recursion
r0 Recurse subdirectories for wildcard names only
ri<P>[:<S>] Set priority (0-default,1-min..15-max) and sleep time in ms
rr[N] Add data recovery record
rv[N] Create recovery volumes
s[<N>,v[-],e] Create solid archive
s- Disable solid archiving
sc<chr>[obj] Specify the character set
sfx[name] Create SFX archive
si[name] Read data from standard input (stdin)
sl<size> Process files with size less than specified
sm<size> Process files with size more than specified
t Test files after archiving
ta<date> Process files modified after <date> in YYYYMMDDHHMMSS format
tb<date> Process files modified before <date> in YYYYMMDDHHMMSS format
tk Keep original archive time
tl Set archive time to latest file
tn<time> Process files newer than <time>
to<time> Process files older than <time>
ts<m,c,a>[N] Save or restore file time (modification, creation, access)
u Update files
v<size>[k,b] Create volumes with size=<size>*1000 [*1024, *1]
vd Erase disk contents before creating volume
ver[n] File version control
vn Use the old style volume naming scheme
vp Pause before each volume
w<path> Assign work directory
x<file> Exclude specified file
x@ Read file names to exclude from stdin
x@<list> Exclude files listed in specified list file
y Assume Yes on all queries
z[file] Read archive comment from file
ich brauche nochmal eure hilfe.
ich habe wie viele andere mittlerweile probleme beim umschalten des sound devices und daher mal genauer geschaut wieso und weshalb.
ich glaube ich habe es hinbekommen, aber jetzt dauert das umschalten ewigkeiten.
kann mir jemand erklären warum?
[autoit]
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=1320412398_emblem-sound.ico
#AutoIt3Wrapper_Outfile=soundchanger mit tray test.exe
#AutoIt3Wrapper_Res_Description=Einfaches Umschalten der Soundger�te unter Vista und Windows 7.
#AutoIt3Wrapper_Res_Fileversion=1.1.0.0
#AutoIt3Wrapper_Res_File_Add=SDAD.exe
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Constants.au3>
#include <Array.au3>
Opt("TrayMenuMode", 3)
FileInstall("SDAD.exe", @TempDir & "")
Local $reg[1]
Local $devnamen[1]
Local $devnamenalt[1]
Local $blase = 1
If @CPUArch = "X64" Then ; wenn x64 dann nimm den 64er regschl�ssel
Global $key = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
Else
Global $key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
EndIf
For $i = 1 To 20
Local $var = RegEnumKey($key, $i)
If @error <> 0 Then ExitLoop
$devices = RegRead($key & "" & $var, "DeviceState") ; status des ger�tes (nutzbar?!?)
If $devices = 1 Then ; wenn nutzbar dann steht da eine 1, also nimm das mit auf
$devname = RegRead($key & "" & $var & "" & "Properties", "{b3f8fa53-0004-438e-9003-51a46e139bfc},6") ; name des ger�tes
$devname2 = RegRead($key & "" & $var & "" & "Properties", "{a45c254e-df1c-4efd-8020-67d146a850e0},2") ; alternativer name des ger�tes
_ArrayAdd($reg, $var) ; regschl�ssel
_ArrayAdd($devnamen, $devname) ; ger�tenamen
_ArrayAdd($devnamenalt, $devname2) ; ger�tenamen
EndIf
Next
;~ _ArrayDisplay($devnamen)
_ArrayDelete($devnamen, 0)
_ArrayDelete($reg, 0)
_ArrayDelete($devnamenalt, 0)
;~ _ArrayDisplay($devnamenalt)
$devs = UBound($devnamen) - 1
;MsgBox(0, "", $devs)
$dev0 = TrayCreateItem($devnamen[0]&" " & $devnamenalt[0])
$dev1 = TrayCreateItem($devnamen[1]&" " & $devnamenalt[1])
;~ MsgBox(0, "", $devs)
If $devs > 1 Then
If $devs = 2 Then $dev2 = TrayCreateItem($devnamen[2]&" " & $devnamenalt[2])
If $devs = 3 Then $dev3 = TrayCreateItem($devnamen[3]&" " & $devnamenalt[3])
EndIf
TrayCreateItem("")
$noblase = TrayCreateItem("Kein Traytip")
TrayCreateItem("")
$exititem = TrayCreateItem("Beenden")
TraySetState()
TraySetClick(1)
;~ MsgBox(0, "", $devs)
While 1
$msg = TrayGetMsg()
Sleep(500)
Select
Case $msg = $dev0
Run(@TempDir & "\SDAD.exe" & " " & $reg[0] & " " & "communications", "", @SW_HIDE)
Run(@TempDir & "\SDAD.exe" & " " & $reg[0] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[0], 5, 1)
TrayItemSetState($dev0&" "&$devnamenalt[0], $TRAY_DISABLE)
;~ Sleep(3000)
Case $msg = $dev1
Run(@TempDir & "\SDAD.exe" & " " & $reg[1] & " " & "communications", "", @SW_HIDE)
Run(@TempDir & "\SDAD.exe" & " " & $reg[1] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[1], 5, 1)
TrayItemSetState($dev1&" "&$devnamenalt[1], $TRAY_DISABLE)
;~ Sleep(3000)
EndSelect
If $devs > 1 Then
Select
Case $msg = $dev2
Run(@TempDir & "\SDAD.exe" & " " & $reg[2] & " " & "communications", "", @SW_HIDE)
Run(@TempDir & "\SDAD.exe" & " " & $reg[2] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[2], 5, 1)
TrayItemSetState($dev2&" "&$devnamenalt[2], $TRAY_DISABLE)
;~ Sleep(3000)
EndSelect
EndIf
If $devs > 2 Then
Select
Case $msg = $dev3
Run(@TempDir & "\SDAD.exe" & " " & $reg[3] & " " & "communications", "", @SW_HIDE)
Run(@TempDir & "\SDAD.exe" & " " & $reg[3] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[3], 5, 1)
TrayItemSetState($dev3&" "&$devnamenalt[3], $TRAY_DISABLE)
;~ Sleep(3000)
EndSelect
EndIf
Select
Case $msg = $noblase
If $blase = 1 Then
$blase = 0
Else
$blase = 1
TrayTip("", "Traytips werden wieder angezeigt", 5, 1)
EndIf
Case $msg = $exititem
ExitLoop
EndSelect
WEnd
das die zeile wieder geht liegt an der -1.
was die nun bewirkt wüsste ich gern.
wenn ich $hGUI angebe, dann kommt aber das childfenster nicht mehr.
das wars....
ein exitloop nach dem @guienable bewirkt wunder.
danke dir
ich hab ja diverse probleme mit AUTOIT, aber was mich neben regex zur verzweifling bringt ist der ganze childgui kram.
Childgui ist für mich wie ein blinker mit 3 stufen.
geht, geht ein bisschen und geht nicht.
zum script....
ich habe ein fenster das per button eine childgui öfnet. soweit so gut.
in der childgui habe ich 6 buttons und wenn ich eine funtion drauf lege, dann geht das auch.
will ich die childgui schliessen geht das auch, ABER....
1. die MainGUI hüpft in den hintergrund.
2. Die MainGUI ist nicht mehr ansprechbar und lässt sich nicht schliessen
hier nun ein funktionstüchtiger ausschnitt der genau das verhalten an den tag legt.
[hide]
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
#include <GuiImageList.au3>
#include <Array.au3>
#include <Constants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <Misc.au3>
#include <ScrollBarConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <String.au3>
#include <_GetFile.au3>
#region Var
Global $sIni = @ScriptDir & "\Settings.opt"
Global $filefoldername[1]
$APKfolder = "nix"
#endregion Var
If Not FileExists($sIni) Then
Global $sCMDLine = FileSelectFolder("Choose your starting folder.", "")
$iMsgBoxAnswer = MsgBox(270372, "Default?", "Do you want to save this folder for the next Time you use this tool?")
Select
Case $iMsgBoxAnswer = 6 ;Yes
IniWrite($sIni, "APKTOOL", "Path", $sCMDLine)
Case $iMsgBoxAnswer = 7 ;No
EndSelect
Else
$sCMDLine = IniRead($sIni, "APKTOOL", "Path", "Path not Found")
EndIf
#region GUI init CMD init
$hGUI = GUICreate("Test", 800, 400, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_CLIPCHILDREN))
$PID = Run(@ComSpec & " /k CD " & $sCMDLine, "", @SW_HIDE)
$hWnd = 0
$stPID = DllStructCreate("int")
Do
$WinList = WinList()
For $i = 1 To $WinList[0][0]
If $WinList[$i][0] <> "" Then
DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $WinList[$i][1], "ptr", DllStructGetPtr($stPID))
If DllStructGetData($stPID, 1) = $PID Then
$hWnd = $WinList[$i][1]
ExitLoop
EndIf
EndIf
Next
Sleep(100)
Until $hWnd <> 0
$stPID = 0
If $hWnd <> 0 Then
$nExStyle = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $hWnd, "int", -20)
$nExStyle = $nExStyle[0]
DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", -20, "int", BitOR($nExStyle, $WS_EX_MDICHILD))
DllCall("user32.dll", "int", "SetParent", "hwnd", $hWnd, "hwnd", $hGUI)
WinSetState($hWnd, "", @SW_SHOW)
WinMove($hWnd, "", 0, 0, 720, 420)
EndIf
#endregion GUI init CMD init
#region GUI conrtols
Global Const $iStartx = 610, $iBtnWidth = 100, $iStarty = 10
Global Const $idButton_Setup = GUICtrlCreateButton("Setup APKTool", $iStartx + 85, $iStarty + 270, $iBtnWidth, 40)
Global Const $idButton_Exit = GUICtrlCreateButton("Exit", $iStartx + 85, $iStarty + 315, $iBtnWidth, 40)
GUISetState()
#endregion GUI conrtols
#region Buttonaction
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $idButton_Exit
_GDIPlus_Shutdown()
GUIDelete()
ProcessClose($PID)
Exit
Case $idButton_Setup
_apktoolsettings()
EndSwitch
WEnd
#endregion Buttonaction
#region Functions
Func _apktoolsettings()
GUISetState(@SW_DISABLE, $hGUI)
$child_GUI = GUICreate("Child GUI", 274, 101, 470, 212, BitOR($GUI_SS_DEFAULT_GUI, $WS_CHILD))
$Button1 = GUICtrlCreateButton("Load actual apktool.jar", 5, 5, 129, 25)
$Button2 = GUICtrlCreateButton("Load actual aapt.exe", 5, 35, 129, 25)
$Button3 = GUICtrlCreateButton("Load 2.apk - 5.apk", 4, 65, 129, 25)
$Button4 = GUICtrlCreateButton("Button1", 140, 5, 129, 25)
$Button5 = GUICtrlCreateButton("Load actual aapt", 140, 35, 129, 25)
$Button6 = GUICtrlCreateButton("Button 6", 140, 65, 129, 25)
GUISetState(@SW_SHOW)
While 2
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
GUIDelete($child_GUI)
GUISetState(@SW_ENABLE, $hGUI)
Case $Button1
ProgressOn("Download", "Downloading...", "0%")
$url = "http://miui.connortumbleson.com/other/apktool/apktool_1.5.2.jar" ;Set URL
$folder = @ScriptDir & "\apktool_1.5.2.jar" ;Set folder
$hInet = InetGet($url, $folder, 1, 1) ;Forces a reload from the remote site and return immediately and download in the background
$FileSize = InetGetSize($url) ;Get file size
While Not InetGetInfo($hInet, 2) ;Loop until download is finished
Sleep(500) ;Sleep for half a second to avoid flicker in the progress bar
$BytesReceived = InetGetInfo($hInet, 0) ;Get bytes received
$Pct = Int($BytesReceived / $FileSize * 100) ;Calculate percentage
ProgressSet($Pct, $Pct & "%") ;Set progress bar
WEnd
ProgressOff()
Case $Button2
Case $Button3
Case $Button4
Case $Button5
Case $Button6
EndSwitch
WEnd
EndFunc ;==>_apktoolsettings
[/hide]
warum ist das so?
wie muss das richtig sein?
wie kann ich das für immer umgehen?
kannst du evtl. was mit GUICtrlSendMsg anfangen?
ja die hilfe ist mir oft auch eine hilfe, aber manches ist mir dann doch zu kryptisch erklärt und ich weiss nach dem lesen nicht was man mir da erklären wollte.
daher ja auch die frage ob es das auch in ausführlicher gibt.
"(#{1,2}\[.*|127.0.0.1\s\s)"
...verstehe ich nicht.
127.0.0.1 ist klar, aber was zum beispiel bedeutet das alles bis hin zu 127.0.0.1?
\s ist theroretisch auch klar, aber \s+ oder \s\s ?
wo kann mal etwas ausführlicher was über StringRegExpReplace lesen ?
ich verstehe das nicht.
ne das passt gar nicht.
127.0.0.1 wird gar nicht gelöscht.
ok das passt, aber mir jetzt aufgefallen das nun über 1500 einträge flöten gehen. das können nicht alles reine comment zeilen sein.
If StringInStr($avArray[$i], "# [", 2) Then _ArrayDelete($avArray, $i)
muss ich mir mal ansehen, da die zu rigoros vorgeht.
auf jeden fall ist das ja mal richtig fix.
ich danke euch und versuche mal den rest in der art zuende zu bringen.
Alles anzeigenDas Problem ist hier nicht der Startindex, bzw die Arraygröße, das ist anfangs korrekt soweit ich das sehe, denn hier kommt das Array von _filereadtoarray und ist 1-based. Die Variable $zeilen entspricht ubound(), hier wird korrekterweise noch 1 subtrahiert im Schleifenkopf, also auch richtig. Das Problem liegt hier aber darin, dass innerhalb der Schleife Elemente des Arrays gelöscht werden. Konkret sieht die Schleife verkürzt so aus:
Zahlenbeispiel:
Dein Array enthält anfangs 10 Einträge, also 9 Textzeilen (ubound-1).
Die Schleife beginnt bei i=1, also die erste der 9 Zeilen.
Nun gehen wir davon aus, dass dieser Index gelöscht wird, weil die letzte if Bedingung erfüllt ist.
i wird demzufolge um 1 reduziert, also auf 0 gesetzt.
Die Schleife startet den nächsten Durchgang, dabei wird i wieder auf 1 gesetzt. Dein Problem ab hier.... das Array ist nun um eine Zeile kleiner (9-1, also 8 Textzeilen), aber deine Variable $zeilen ist immernoch 10-1, sprich 9 Textzeilen.
Spätestens dann, wenn die Schleife an einem nicht mehr existierendem Index des Arrays ankommt stürzt dein Script ab.
Du müsstest also auch die Variable für die Abbruchbedingung um 1 reduzieren, wenn du während der Schleife das Array verkleinerst. Alternativ solltest du vielleicht gleich ubound im Schleifenkopf verwenden, da dann die Arraygröße dynamisch ermittelt werden dürfte.
das wars.
habe nun zeilen mit reduzieren lassen (zeile 23) und eine abbruchkontition bei $i = $zeilen hinzugefügt (zeile 2).
ist das so richtig, oder gibt es da elegantere lösungen?
[autoit]For $i = 1 To $zeilen - 1
If $i = $zeilen Then ExitLoop
If _IsPressed("1B") Then ExitLoop
ConsoleWrite("$i:" & $i & @TAB & "Ubound($avArray):" & UBound($avArray) & @CRLF)
$avArray[$i] = StringReplace($avArray[$i], "127.0.0.1 ", "")
GUICtrlSetData($Progress1, ($i / $zeilen) * 100)
GUICtrlSetData($Label1, $i & " von " & $zeilen)
$stringclean = 0
$string = _StringBetween($avArray[$i], $stringleft, ""); $stringright)
If Not @error Then
$avArray[$i] = StringReplace($avArray[$i], $stringleft & $string[0], "")
EndIf
$string2 = _StringBetween($avArray[$i], $stringleft2, ""); $stringright)
If Not @error Then
$avArray[$i] = StringReplace($avArray[$i], $stringleft2 & $string2[0], "")
EndIf
$string3 = _StringBetween($avArray[$i], $stringleft3, ""); $stringright)
If Not @error Then
_ArrayDelete($avArray, $i)
$i = $i - 1
$zeilen = $zeilen - 1
EndIf
Next
[/autoit]
Du hast also schon die beschriebene Zeile eingefügt und bist nicht stutzig geworden dass $i und Ubound($...) den selben Wert erreichen?
Dir ist klar das der maximale Index eines Arrays Ubound($...) - 1 ist?
da das auf der arbeit recht lange dauert (sehr langsamer rechner) habe ich immer die gelegenheit genutzt um was anderes zu erledigen. das der eine wert rauf und der andere runter, ist mir nicht in den sinn gekommen.
Tipp: Wenn man ein Array durchgeht und dabei Elemente löschen will sollte man es eher von hinten nach vorne durchgehen.
von hinten nach vorne hatte ich zu anfang mal, aber das dauert ewig. wenn man die werte abcheckt und einfach nicht mit ins array nimmt ist das schneller als wenn man nochmals das array durchgeht.
so weit war ich auch schon und das gesamte script läuft super, bis zu dem punkt wo die letzte zeile des arrays dran ist.
dann kommt das anfangs beschriebene.
das ist es ja was mich stutzig macht.
sorry, aber du hilfst mir gerade gar nicht, weil ich nicht weiss auf was du hinaus willst.
hast du dir den code denn schon angesehen?
das array ist mit einer position generiert und die for schleife fängt mit 1 an. also muss avarray[$i] avarray[1] sein.
D:\Temp\Kopie von on event test FileReadLine.au3 (129) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
das problem dabei ist nur das genau die codezeile ja super funktioniert hat, bevor ich optimierungen vorgenommen habe.
da fand das script ja auch kein problem damit.
jetzt habe ich die zeile direkt an den anfang der for schleife gestellt und nichts geht mehr. vorher stand die ziemlich weit am ende.
ich habe die ganzen tage etwas zusammengeschustert, das mit hosts dateien nach squid kompatiblen dateien konvertieren soll.
eigentlich geht es auch, aber $avArray[$i] = StringReplace($avArray[$i], "127.0.0.1 ", "") macht zicken, wenn das array am ende ist.
es kommt dann:
$avArray[$i] = StringReplace($avArray[$i], "127.0.0.1 ", "")
^ ERROR
warum?
und warum wird mir der autoit code der hier im forums editor steht nichzt im post angezeigt?
ich habe die aktuelle version (hat noch den namen des ursprünglichen projekts) angefügt.
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=host2squid.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Add_Constants=n
#AutoIt3Wrapper_Run_Tidy=y
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <File.au3>
#include <String.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
AutoItSetOption("GUIOnEventMode", 1)
Global $avArray[1]
;~ Global $stringleft = ' ##['
;~ Global $stringleft2 = '## ['
;~ Global $stringright = ']' & @LF
;~ $stringclean = 0
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("host 2 squid", 464, 152, 192, 114)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$Progress1 = GUICtrlCreateProgress(24, 24, 425, 20)
$Open = GUICtrlCreateButton("Open", 40, 88, 60, 49)
GUICtrlSetOnEvent($Open, "Open")
$Download = GUICtrlCreateButton("Download", 100, 88, 60, 49)
GUICtrlSetOnEvent($Download, "Download")
$Save = GUICtrlCreateButton("Save", 297, 88, 120, 49)
GUICtrlSetState($Save, $GUI_DISABLE)
GUICtrlSetOnEvent($Save, "Save")
$Label1 = GUICtrlCreateLabel("", 170, 88, 120, 17)
$Label2 = GUICtrlCreateLabel("", 170, 108, 120, 17)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
Sleep(1000) ; Idle around
WEnd
Func CLOSEClicked()
Exit
EndFunc ;==>CLOSEClicked
Func Download()
Local $hDownload = InetGet("http://www.mvps.org/winhelp2002/hosts.txt", @ScriptDir & "\hosts.txt", 1, 1)
GUICtrlSetData($Label2, "Die Liste wird geladen")
Do
Local $aData = InetGetInfo($hDownload) ; Get all information.
GUICtrlSetData($Progress1, ($aData[0] / $aData[1]) * 100)
Until InetGetInfo($hDownload, 2) ; Check if the download is complete.
Local $aData = InetGetInfo($hDownload) ; Get all information.
InetClose($hDownload) ; Close the handle to release resources.
GUICtrlSetData($Label2, "Fertig Heruntergeladen")
#region --- CodeWizard generated code Start ---
;MsgBox features: Title=No, Text=Yes, Buttons=Yes and No, Icon=None
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(4, "Verarbeiten des Downloads?", "Bytes read: " & $aData[0] & @CRLF & _
"Size: " & $aData[1] & @CRLF & _
"Complete?: " & $aData[2] & @CRLF & _
"Successful?: " & $aData[3] & @CRLF)
Select
Case $iMsgBoxAnswer = 6 ;Yes
Global $file = @ScriptDir & "\hosts.txt"
Verarbeitung()
Case $iMsgBoxAnswer = 7 ;No
EndSelect
#endregion --- CodeWizard generated code Start ---
EndFunc ;==>Download
[/autoit][autoit][/autoit][autoit]Func Open()
Global $file = FileOpenDialog("", @HomeDrive, "host dateien(*.acl;*.txt)", 1)
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Else
Verarbeitung()
EndIf
EndFunc ;==>Open
[/autoit][autoit][/autoit][autoit]Func Save()
$var = FileSaveDialog("", @HomeDrive, "acl datei(*.acl)", 16) & ".acl"
If @error Then
MsgBox(4096, "", "Save cancelled.")
Else
If FileExists($var) Then
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(4, "File Exists", "Overwrite?")
Select
Case $iMsgBoxAnswer = 6 ;Yes
_FileCreate($var)
FileOpen($var, 1)
$stringtofile = ""
GUICtrlSetData($Label2, "Die Liste wird gespeichert")
For $y = 0 To UBound($avArray) - 1
$stringtofile = $avArray[$y] & @CRLF
FileWrite($var, $stringtofile)
Next
FileClose($var)
GUICtrlSetData($Label2, "")
Case $iMsgBoxAnswer = 7 ;No
MsgBox(4096, "", "Save cancelled.")
EndSelect
EndIf
EndIf
EndFunc ;==>Save
Func Verarbeitung()
Global $avArray[1]
$stringleft = ' ##['
$stringleft2 = '#['
$stringleft3 = '# ['
$stringright = ']' & @LF
GUICtrlSetData($Progress1, 0)
GUICtrlSetState($Open, $GUI_DISABLE)
GUICtrlSetState($Download, $GUI_DISABLE)
_FileReadToArray($file, $avArray)
$zeilen = UBound($avArray)
GUICtrlSetData($Label2, "ESC zum abbrechen")
For $i = 1 To $zeilen - 1
If _IsPressed("1B") Then ExitLoop
$avArray[$i] = StringReplace($avArray[$i], "127.0.0.1 ", "")
If @error Then
EndIf
GUICtrlSetData($Progress1, ($i / $zeilen) * 100)
GUICtrlSetData($Label1, $i & " von " & $zeilen)
$stringclean = 0
$string = _StringBetween($avArray[$i], $stringleft, ""); $stringright)
If Not @error Then
$avArray[$i] = StringReplace($avArray[$i], $stringleft & $string[0], "")
EndIf
$string2 = _StringBetween($avArray[$i], $stringleft2, ""); $stringright)
If Not @error Then
$avArray[$i] = StringReplace($avArray[$i], $stringleft2 & $string2[0], "")
EndIf
$string3 = _StringBetween($avArray[$i], $stringleft3, ""); $stringright)
If Not @error Then
_ArrayDelete($avArray, $i)
$i = $i - 1
EndIf
Next
;~ $zeilen = _FileCountLines($file)
;~ GUICtrlSetData($Label2, "ESC zum abbrechen")
;~ For $i = 1 To $zeilen
;~ GUICtrlSetData($Progress1, ($i / $zeilen) * 100)
;~ $zeile = FileReadLine($file, $i)
;~ $zeile = StringReplace($zeile, "127.0.0.1 ", "")
;~ $stringclean = 0
;~ $string = _StringBetween($zeile, $stringleft, ""); $stringright)
;~ If Not @error Then
;~ $stringclean = StringReplace($zeile, $stringleft & $string[0], "")
;~ EndIf
;~ $string2 = _StringBetween($zeile, $stringleft2, ""); $stringright)
;~ If Not @error Then
;~ $stringclean = StringReplace($zeile, $stringleft2 & $string2[0], "")
;~ EndIf
;~ If StringIsAlNum($stringclean) = 0 Then
;~ If $stringclean <> "" Then _ArrayAdd($avArray, $stringclean)
;~ Else
;~ If $zeile <> "" Then _ArrayAdd($avArray, $zeile)
;~ EndIf
;~ GUICtrlSetData($Label1, $i & " von " & $zeilen)
;~ If _IsPressed("1B") Then ExitLoop
;~ Next
;~ GUICtrlSetData($Label2, "Die Liste wird bereinigt...")
;~ _ArrayUnique($avArray)
MsgBox(0, "", "27 zeilen löschen")
For $i = 1 To 27
_ArrayDelete($avArray, 0)
Next
;~ GUICtrlSetData($Label2, "")
_ArrayDisplay($avArray)
;~ FileClose($file)
;~ GUICtrlSetState($Open, $GUI_ENABLE)
;~ GUICtrlSetState($Download, $GUI_ENABLE)
;~ GUICtrlSetState($Save, $GUI_ENABLE)
EndFunc ;==>Verarbeitung
vielleicht so:
[autoit]For $i = 0 To 15349
[/autoit]
GUICtrlSetData($h_progress, ($i / 15349) * 100)
Next
Perfekt!!!
wusste doch das es was einfaches war, bin echt nur nicht drauf gekommen.
@m-obi: auch dir danke, aber das ist wohl zuviel des guten bei einem solch kleinen projekt wie meinem.
ich habe eine for schleife, welche sich durch die zuvor eingelesene datei definiert. somit ist der to wert immer unterschiedlich.
ich gehe mal von 15349 als to wert aus.
wie kann ich dem progressbar klar machen wann das nächste prozent dazu kommt?
15349 = 100%
153,49 = 1%
das ist mir klar, aber wie bekomme ich das sinnvoll in die for next schleife um den progressbar mit brauchbaren daten zu füttern?
ich stehe da gerade massiv auf dem schlauch.