1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Maximus1

Beiträge von Maximus1

  • Consolewrite für die GUI?

    • Maximus1
    • 18. Oktober 2014 um 20:01

    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.

  • Consolewrite für die GUI?

    • Maximus1
    • 18. Oktober 2014 um 18:07

    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 macht was anderes als erwartet

    • Maximus1
    • 28. September 2014 um 15:49
    [autoit]

    ShellExecuteWait("rar.exe"," a -ep1 -p"&$pwd&" "&$archivname&" "&'"'&$sFileSelectFolder&'"',"")

    [/autoit]

    jetzt klappt es. das script hat sich an leerzeichen im pfad verschluckt.

  • shellexecutewait macht was anderes als erwartet

    • Maximus1
    • 28. September 2014 um 01:57

    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.

    [autoit]

    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:

    Spoiler anzeigen

    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

  • sounddevice switcher für vista und win7

    • Maximus1
    • 7. Oktober 2013 um 20:52

    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)

    [/autoit][autoit][/autoit][autoit]

    FileInstall("SDAD.exe", @TempDir & "")
    Local $reg[1]
    Local $devnamen[1]
    Local $devnamenalt[1]
    Local $blase = 1

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    _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)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $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

    [/autoit][autoit][/autoit][autoit]

    TrayCreateItem("")
    $noblase = TrayCreateItem("Kein Traytip")
    TrayCreateItem("")
    $exititem = TrayCreateItem("Beenden")

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit][/autoit]
  • childgui die 3000.

    • Maximus1
    • 12. September 2013 um 00:43

    das die zeile wieder geht liegt an der -1.
    was die nun bewirkt wüsste ich gern.

  • childgui die 3000.

    • Maximus1
    • 12. September 2013 um 00:15

    wenn ich $hGUI angebe, dann kommt aber das childfenster nicht mehr.

  • childgui die 3000.

    • Maximus1
    • 11. September 2013 um 23:59

    das wars....

    ein exitloop nach dem @guienable bewirkt wunder.

    danke dir :)

  • childgui die 3000.

    • Maximus1
    • 11. September 2013 um 23:48

    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. :rock:
    in der childgui habe ich 6 buttons und wenn ich eine funtion drauf lege, dann geht das auch. :rock:
    will ich die childgui schliessen geht das auch, ABER.... :thumbup:

    1. die MainGUI hüpft in den hintergrund. ?(
    2. Die MainGUI ist nicht mehr ansprechbar und lässt sich nicht schliessen :cursing:

    hier nun ein funktionstüchtiger ausschnitt der genau das verhalten an den tag legt.
    [hide]

    [autoit]


    #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>

    [/autoit][autoit][/autoit][autoit]

    #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")

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    Case $idButton_Setup
    _apktoolsettings()

    [/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd
    #endregion Buttonaction
    #region Functions

    [/autoit][autoit][/autoit][autoit]

    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)

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit][/autoit]


    [/hide]

    warum ist das so?
    wie muss das richtig sein?
    wie kann ich das für immer umgehen?

  • Autoit Programm als Service schreiben

    • Maximus1
    • 11. September 2013 um 23:39

    kannst du evtl. was mit GUICtrlSendMsg anfangen?

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 23. Mai 2013 um 01:01

    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.

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 22. Mai 2013 um 15:58

    "(#{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.

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 22. Mai 2013 um 15:34

    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.

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 22. Mai 2013 um 15:22
    Zitat von misterspeed

    Das 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.

    Alles anzeigen


    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 ", "")

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetData($Progress1, ($i / $zeilen) * 100)
    GUICtrlSetData($Label1, $i & " von " & $zeilen)

    [/autoit][autoit][/autoit][autoit]

    $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

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit]


    Zitat von AspirinJunkie


    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. :(


    Zitat von AspirinJunkie

    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.

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 22. Mai 2013 um 14:59

    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.

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 22. Mai 2013 um 14:50

    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.

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 22. Mai 2013 um 14:37

    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.

  • stringreplace bricht ab und meint es gäbe ein problem mit den array

    • Maximus1
    • 22. Mai 2013 um 13:19

    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.

    [autoit]


    #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>

    [/autoit][autoit][/autoit][autoit]

    AutoItSetOption("GUIOnEventMode", 1)
    Global $avArray[1]
    ;~ Global $stringleft = ' ##['
    ;~ Global $stringleft2 = '## ['
    ;~ Global $stringright = ']' & @LF
    ;~ $stringclean = 0

    [/autoit][autoit][/autoit][autoit]

    #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 ###

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(1000) ; Idle around
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func CLOSEClicked()
    Exit
    EndFunc ;==>CLOSEClicked

    [/autoit][autoit][/autoit][autoit]

    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 ---

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    Func Verarbeitung()
    Global $avArray[1]
    $stringleft = ' ##['
    $stringleft2 = '#['
    $stringleft3 = '# ['
    $stringright = ']' & @LF

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

    GUICtrlSetData($Progress1, ($i / $zeilen) * 100)
    GUICtrlSetData($Label1, $i & " von " & $zeilen)

    [/autoit][autoit][/autoit][autoit]

    $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

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;~ $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

    [/autoit][autoit][/autoit][autoit][/autoit]

    Dateien

    Kopie von on event test FileReadLine.au3 6,23 kB – 390 Downloads
  • Prgressbar mit for schleife synchronisieren.

    • Maximus1
    • 16. Mai 2013 um 12:47
    Zitat von RedHead

    vielleicht so:

    [autoit]

    For $i = 0 To 15349
    GUICtrlSetData($h_progress, ($i / 15349) * 100)
    Next

    [/autoit]


    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.

  • Prgressbar mit for schleife synchronisieren.

    • Maximus1
    • 16. Mai 2013 um 11:50

    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.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™