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

Beiträge von Friesel

  • CMD Output speichern als Unicode

    • Friesel
    • 18. August 2014 um 23:30

    Moin!

    Diese Zeile hilft:

    [autoit]

    $line = _WinAPI_MultiByteToWideChar($line, 437, Default, True)

    [/autoit]

    Eine Auflistung verschiedener Codepages (2ter Parameter) findest du zB hier: http://de.wikipedia.org/wiki/Zeichensatztabelle


    Ins skript eingebaut:

    [autoit]

    #include <Constants.au3>
    #include <WinAPI.au3>

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

    $read = _CMDRead('Tree "Z:\test"')
    ConsoleWrite($read)
    $hFile = FileOpen('Tree-Output.txt',2+32)
    FileWrite($hFile, $read)
    FileClose($hFile)

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

    Func _CMDRead($command)
    Local $line

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

    $CMD = Run(@ComSpec & " /c " & $command, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

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

    While 1
    $line &= StdoutRead($CMD)
    If @error Then ExitLoop
    WEnd
    ;==>
    $line = _WinAPI_MultiByteToWideChar($line, 437, Default, True)
    ;<==
    Return $line
    EndFunc ;==>_CMDRead

    [/autoit]


    Sanfte Grüße :D

  • aus SciTE im Explorer Ordner öffnen

    • Friesel
    • 18. August 2014 um 21:12

    Moin!

    Hier noch der Vollständigkeit halber eine weitere Möglichkeit:

    [autoit]

    ShellExecute("explorer.exe", "/e,/select," & @ScriptFullPath)

    [/autoit]


    Sanfte Grüße :D

  • cpl / GUID Windows 8.1 - EInstellungen/PC-EInstellungen/Netzwerk/Arbeitsplatz

    • Friesel
    • 6. August 2014 um 19:28

    Moin!

    Sehe ich das richtig, dass du nicht die normale Systemsteuerung, sondern die PC-Einstellungen in der Modern UI (Metro) Oberfläche öffnen willst?

    Leider kann ich dir nicht sagen, wie man auf die Unterpunkte zugreift aber die Hauptseite der PC-Einstellungen kannst mit einem der folgenden Befehle öffnen:

    [autoit]

    Run("explorer.exe shell:Appsfolder\windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel")
    ;oder
    ShellExecute("explorer.exe", "shell:Appsfolder\windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel")
    ;oder
    ShellExecute("shell:Appsfolder\windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel")

    [/autoit]


    Vieleicht hilft dir das ja, weitere Informationen zum Thema zu finden...


    Sanfte Grüße :D

  • InetGet() ladet Fehlerhaft Dateien runter

    • Friesel
    • 6. August 2014 um 18:52

    *EDIT*
    Sorry, hatte übersehen, dass es sich dabei nur um einen Tippfehler handelte... :whistling:

    Zitat von TaPS
    [autoit]

    Local $dat = InetGet ("ftp://taps:bla@ftp.dateien.de/Data","test.rar")

    [/autoit]

    Das hier wäre jetzt die Zeile mit welcher ich downladen möchte.

    Moin!
    Also für mich sieht das so aus, als wolltest du die Datei "test.rar" aus dem Verzeichnis "ftp://taps:bla@ftp.dateien.de/Data" laden.


    Wenn dem so ist, dann wäre folgende Syntax korrekt:

    [autoit]

    Local $dat = InetGet ("ftp://taps:bla@ftp.dateien.de/Data/test.rar","test.rar")

    [/autoit]


    Erklärung: Der erste Parameter entält den kompletten Download-Link und der zweite den Dateinamen unter dem gespeichert werden soll.
    So, wie ich es oben angegeben habe, wird die Datei "test.rar" im Skriptverzeichnis gespeichert. Willst du sie zB in C: unter einem anderen Namen speichern, lautet die Syntax so:

    [autoit]

    Local $dat = InetGet ("ftp://taps:bla@ftp.dateien.de/Data/test.rar","C:\AndererName.rar")

    [/autoit]


    Sanfte Grüsse :D

  • Label nachträglich dynamisch hinzufügen

    • Friesel
    • 26. April 2014 um 02:42
    Zitat von Cryfall

    Was ist wohl die beste Methode einen Rechtsklick auf ein Label zu registrieren und auch zu wissen auf welches? Per Cursorposition auslesen bei Rechtsklick und mit den Labelpositionen vergleichen oder für jedes Label eine OnClick Funktion erzeugen?

    Moin!
    Wenn ich mich mal einmischen darf... :rolleyes:

    Ich würds so machen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>

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

    $hGui = GUICreate("LabelRightClick", 400, 400)
    ;==> Für Event Modus diese beiden Zeilen aktivieren (und Do/Until Schleife ändern)
    ;~ Opt("GUIOnEventMode", 1)
    ;~ GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "_RightClick")

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

    $idLabel1 = GUICtrlCreateLabel("Rechts mich!", 20, 20, 170, 360, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetFont(-1, 12, 800)
    GUICtrlSetBkColor(-1, 0x00FF00)

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

    $idLabel2 = GUICtrlCreateLabel("Mich auch!", 210, 20, 170, 360, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    GUICtrlSetFont(-1, 12, 800)
    GUICtrlSetBkColor(-1, 0xFF0000)

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

    GUISetState()

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

    Do
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_SECONDARYDOWN
    _RightClick()
    EndSwitch
    Until $nMsg = -3

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

    Func _RightClick()
    $aMouse = GUIGetCursorInfo($hGui)
    If IsArray($aMouse) Then ;==> nur zur Sicherheit; mache ich bei allen Arrays
    Switch $aMouse[4]
    Case $idLabel1
    MsgBox(0, "", "Rechts auf Links!", 0, $hGui)
    Case $idLabel2
    MsgBox(0, "", "Rechts auf Rechts!", 0, $hGui)
    EndSwitch
    EndIf
    EndFunc

    [/autoit]


    Sanfte Grüße :D

  • bestimmte Zeilen löschen

    • Friesel
    • 25. April 2014 um 22:27

    Moin!

    Hier mal mein Vorschlag mit einem Scripting Dictionary:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

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

    ;==> zur Vereinfachung/Veranschaulichung direkt Arrays deklarieren, anstatt einzulesen
    Global $aProtokoll[5] = [1,2,4,6,7]
    Global $afile2[10] = [1,2,3,4,5,6,7,8,9,10]

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

    If _DelDouble() = 0 Then MsgBox(0, "", "Keine Doubletten gefunden!")
    _ArrayDisplay($afile2)
    ;<==

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

    ;~ Global $aProtokoll
    ;~ Global $afile2

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

    ;~ $sFile2 = @ScriptDir & "\file2.csv"
    ;~ $sFile3 = @ScriptDir & "\protokoll.csv"

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

    ;~ _FileReadToArray($sFile2, $afile2)
    ;~ _FileReadToArray($sFile3, $aProtokoll)

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

    ;~ If _DelDouble() = 1 Then ;==> Datei nur schreiben, wenn etwas geändert wurde
    ;~ _FileWriteFromArray(@ScriptDir & "\file2.csv", $afile2, 1) ;==> Achtung: Startindex auf 1, da Index 0 die ursprüngliche Anzahl der Elemente enthält
    ;~ EndIf

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

    Func _DelDouble()
    Local $oDictionary = ObjCreate('Scripting.Dictionary')
    $oDictionary.CompareMode = 1
    For $i = 0 To UBound($aProtokoll) - 1
    $oDictionary.Add($aProtokoll[$i], 1)
    Next

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

    Local $iIndex = 0, $iChangeFlag = 0
    For $iElement In $afile2
    If $oDictionary.Exists($iElement) Then
    _ArrayDelete($afile2, $iIndex)
    $iChangeFlag = 1
    $iIndex -= 1
    EndIf
    $iIndex += 1
    Next
    Return $iChangeFlag
    EndFunc

    [/autoit]


    Sanfte Grüße :D

  • Ohne global in diesem Fall

    • Friesel
    • 22. April 2014 um 00:26

    Moin!

    Da du leider kein Skript zum Spielen mitlieferst, kann man nur erahnen, wie dein Programm aufgebaut ist.
    Ich vermute, du befindest in im "OnEvent-Modus" und hast auf globaler Ebene nur eine While/Wend Endlosschleife. Alle Aufgaben werden in Funktionen und somit auf lokaler Ebene abgearbeitet, wodurch der Wert einer Variablen nach Verlassen der Funktion (also des Gültigkeitsbereichs) verloren geht.
    Um das zu verhindern, gibt es das Schlüsselwort Static.
    Achtung! Die Funktion scheint in der AutoIt Version 3.3.8.1 Bugs zu haben, die aber in der neuesten Version gefixt sind. Siehe "Statische Variablen und AdlibRegister. Bug oder normales Verhalten?"
    Eine hiermit deklarierte Variable behält zwar ihren Wert nach Verlassen des Gültigkeitsbereichs, ist aber dennoch nur innerhalb dessen sichtbar. Somit belegt eine solche Variable zwar Arbeitsspeicher, "ballert" aber nicht den Namensraum zu, wie du es formuliert hast.
    In deinem speziellen Fall würde sich allerdings auch eine globale Variable anbieten, man muß ja nicht völlig drauf verzichten ;)
    Ansonsten könntest du auch überlegen, die Werte in einer Ini zu speichern, was den Vorteil hätte, dass diese auch nach Neustart des Programes verfügbar wären.


    Sanfte Grüße :D

  • Im Tray gestartetes Programm öffnen

    • Friesel
    • 11. April 2014 um 01:05

    Moin!

    Zitat von darvinlain

    Es handel sich um ein Programm das in den Tray startet (rechts neben der Uhrzeit), nun muss ich doppelklick darauf machen um damit das Fenster richtig aufgeht


    Das stimmt so nicht. In der Regel sind die Programmfenster versteckt und befinden sich nicht im Tray.
    (Falls aus dem Traymenü ein Programm gstartet wird, was zu diesem Zeitpunkt noch nicht läuft, mußt du dessen Processnamen herausfinden und diesen einfach starten, falls deine Rechte das erlauben)
    Auf die Ansteuerung des Icons mit der Maus will ich nicht eingehen; ich hab mal eine Alternative gebastelt...
    Was im Tray zu sehen ist, ist lediglich eine Ansteuerung für das Programm. Zum Anzeigen wird beispielsweise ein Befehl "Fenster anzeigen" an das versteckte Programm gesendet.
    Da es sich ja offensichtlich um ein fremdes Programm handelt, mußt du dessen Handle ermitteln, um dann mit AutoIt Befehle zu "senden".
    *Edit*
    Der einfachste Weg ist natürlich, den Titel des Fensters zu verwenden:

    [autoit]

    WinSetState("Fenstertitel", "", @SW_SHOWNORMAL)

    [/autoit]

    Skript (benötigt entweder die neueste AutoIt Version oder "WinAPIEx.au3"):

    [autoit]

    ;~ #include <WinAPIEx.au3> ;muß nur bei älterer AutoIt Version inkludiert werden (http://www.autoitscript.com/forum/topic/98712-winapiex-udf/)
    #include <WinAPIProc.au3> ;bei aktueller AutoIt Version inkludieren
    #include <Array.au3>

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

    $hWndProcess = _ProcessGetHandle("Process.exe") ;Name des anzuzeigenden Processes/Programmes
    WinSetState($hWndProcess, "", @SW_SHOWNORMAL) ;weitere mögliche Flags: @SW_SHOW, @SW_MAXIMIZE

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

    Func _ProcessGetHandle($sProcess) ;==> by FRiESEL @ AutoIt.de
    $iPid = ProcessExists($sProcess)
    If $iPid = 0 Then Return 0
    $ahProcessHandle = _WinAPI_EnumProcessWindows($iPid, False)
    If IsArray($ahProcessHandle) Then
    ;hier werden alle gefundenen Handles angezeigt.
    ;Normalerweise ist $ahProcessHandle[1][0] das gesuchte Handle, ansonsten mußt du es dir aus der Liste raussuchen...
    ;bitte auskommentieren, wenn Handle gefunden ist
    _ArrayDisplay($ahProcessHandle)
    $hWndChild = $ahProcessHandle[1][0]
    EndIf
    Return $hWndChild
    EndFunc ;==>_ProcessGetHandle

    [/autoit]


    Keine Garantie, daß es klappt, bei meinen Tests war dies zu 50% der Fall ;)


    Sanfte Grüße :D

  • [ControlClick] Suche korrekte Atribute

    • Friesel
    • 10. April 2014 um 14:53

    Na gut, dann antworte ich mal...

    Mein Script klickt dich durch bis einschliesslich zur Aufnahme. Mit Hilfe von AU3Info solltest du die Schritte nachvollziehen und weitere selbst hinbekommen können...
    Evtl. mußt du an den Sleep Werten schrauben, falls es nicht auf Anhieb klappt.

    [autoit]

    ControlClick("BBSplashForm", "", "TButton1", "LEFT")
    Sleep(300)
    ControlClick("[Class:TBBSplash2Form]", "", "TButton3", "LEFT")
    Sleep(2000)
    ControlClick("[Class:TWelcomeForm]", "", "TButton1", "LEFT")
    Sleep(1000)
    ControlClick("[Class:TMainRecForm]", "", "TPanel1", "LEFT")

    [/autoit]


    Sanfte Grüße :D

  • GUI eingefroren

    • Friesel
    • 3. April 2014 um 13:35

    Moin!
    Ich hab mir zwar jetzt nur deine Beschreibung durchgelesen, weil ich grad weder Zeit noch Lust habe mich durch dein Skript zu arbeiten,
    aber ich bin mir ziemlich sicher, dass du in der Hilfe Hilfe findest :whistling:
    Lies dir das hier und vor allem den Abschnitt "GUIGetMsg für Fortgeschrittene und mehrere Fenster" durch.

  • Statische Variablen und AdlibRegister. Bug oder normales Verhalten?

    • Friesel
    • 3. April 2014 um 09:27

    Alles klar, also ists ein Bug.
    Thread gelöst...

    Danke für die Info, AspirinJunkie! :thumbup:

  • Statische Variablen und AdlibRegister. Bug oder normales Verhalten?

    • Friesel
    • 3. April 2014 um 09:13

    Hi!

    Welche AutoIt Version benutzt du?

    Bei mir sieht die Ausgabe mit ver. 3.3.8.1. so aus:

    Spoiler anzeigen
    Code
    Zuerst normaler Aufruf, dann AdlibRegister:
    $iStaic1: 1
    $iStaic1: 0
    $iStaic1: 0
    $iStaic1: 1
    $iStaic1: 0
    $iStaic1: 0
    $iStaic1: 0
    $iStaic1: 0
    
    
    Zuerst AdlibRegister, dann normaler Aufruf:
    $iStaic1: 1
    $iStaic1: 0
    $iStaic1: 0
    $iStaic1: 0
    $iStaic1: 0
    $iStaic1: 1
    $iStaic1: 0
    $iStaic1: 0
    Alles anzeigen

    Die zweite 1 kommt jeweils, wenn sich die Aufrufmethode ändert.

    *Edit*
    Mit meiner installierten Beta (3.3.9.22.) ist die Ausgabe identisch...

  • StringRegExp(), Häufigkeit der RegEx-Treffer in einer Datei, zeilenweise bestimmen.

    • Friesel
    • 3. April 2014 um 08:20

    Moin!

    Es muss garnicht so kompliziert sein!
    Mit StringRegExpReplace kannst du das Datumsformat direkt ändern.
    (siehe StringRegExpReplace Konsolen Ausgabe im Beispiel)

    Zitat von UserIsGrateful

    [...]Nun zu StringRegExp() - dies gibt mir den ersten Treffer bspw. in ein Array zurück, jedoch möchte ich alle Treffer einer Zeile im Array haben[...]


    Das stimmt nicht! Setzt man das Flag in StringRegExp auf 3, werden alle Treffer im Array gespeichert.
    (siehe StringRegExp im Beispiel)

    Beispiel:

    [autoit]

    #include <Array.au3>

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

    $sTestDB = "301000000070000005^309500117^1301^100177504^002592193300^50001^2^Nachname^Name1^1942-04-11 00:00:00.000^2^10787^003^W01^^1306^71^70^-1^^0^^2013-01-10 00:00:00.000^2013-09-01 00:00:00.000^751227401^72^1^2^10787^309517036^0^10787^17171^1000^0^-2900^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^1886141120^500^0^^1800-01-01 00:00:00.000^0^0^0^01200113^^0^0^Text^^628846864^4^0^0^0^^^^^0^1800-01-01 00:00:00.000^0^^^^0^0^723208500^0^0^0^^0^^L245155046^2211^^100975500^" & @CRLF & _
    "301000000081430411^591430411^1301^100975500^005745916602^30009^2^Nachname^Name2^1995-07-22 00:00:00.000^1^06369^X13^W01^^1306^18^17^-1^^0^^2013-01-10 00:00:00.000^2013-01-10 00:00:00.000^937078923^96^23^2^04289^591430411^0^04289^9044000^0^0^0^0^0^0^0^0^0^0^0^1^0^0^0^0^0^1^0^0^2602326946^300^0^^1800-01-01 00:00:00.000^0^0^0^5130106^^0^0^^^904103775259^0^0^0^0^^^^^0^1800-01-01 00:00:00.000^0^^^^0^0^962602600^0^0^0^^0^^X707941439^0^^^" & @CRLF & _
    "301000000090000031^304208930^1301^101775500^002153095100^50001^2^Nachname^Name3^1941-12-14 00:00:00.000^2^26382^201^G03^^1403^72^71^-1^^0^^2013-01-02 00:00:00.000^2013-01-03 00:00:00.000^201023301^16^1^2^26384^302800843^0^26382^4905^0^350^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^2919209661^500^0^^1800-01-01 00:00:00.000^0^0^0^01020113^^0^0^^^100183611896^0^0^0^0^^^^^0^1800-01-01 00:00:00.000^0^^^^0^0^160114500^0^0^0^^0^^0^0^^100975500^"

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

    ;~ $sTestDB = ClipGet() ;==> falls die Daten in der Zwischenablage sind

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

    ;==> Daten "verwurschteln"
    $sResult = StringRegExpReplace($sTestDB, '\^(\d{4})-(\d{2})-(\d{2}) ', '\^$3.$2.$1 ')
    ;==> $sResult enthält jetzt das gewünschte Datumsformat. Siehe Konsole...
    ConsoleWrite($sResult)

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

    ;==> Daten in Array speichern
    $aResult = StringRegExp($sResult, '\^(\d{2}\.\d{2}\.\d{4}) ', 3)

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

    _ArrayDisplay($aResult)

    [/autoit]


    Sanfte Grüße :D

  • Statische Variablen und AdlibRegister. Bug oder normales Verhalten?

    • Friesel
    • 3. April 2014 um 05:17

    Moin!

    Wie der Titel schon sagt, habe ich ein Problem mit statischen Variablen, wenn eine Funktion von AdlibRegister aufgerufen wird.
    Bei "normalem" Aufruf, verhält sich Static wie erwartet: Beim ersten Durchlauf wird die Variable initialisiert und erhält einen Wert. Danach wird die Initialisierung ignoriert und die Variable erhält und behält den Wert, der ihr innerhalb der Funktion zugewiesen wird.
    Im Klartext (siehe Beispiel): Der Wert beim ersten Durchlauf ist 1, danach immer 0.
    Wird die Funktion danach durch AdlibRegister aufgerufen, erfolgt offensichtlich erneut die Initialisierung und der Wert wird wieder auf 1 gesetzt. Im nächsten Durchlauf ist dann wieder alles so wie es sollte...
    Im Umgekehrten Fall verhält es sich genauso: AdlibRegister zuerst und dann "normaler" Aufruf veranlasst ebenfalls eine erneute Initialisierung.

    *Edit*
    Ich umgehe das Problem jetzt einfach, indem ich Timer verwende. Gefällt mir sogar besser so :thumbup:
    Aber die Frage bleibt, ob das Beschriebene ein Bug ist...


    Beispiel:

    [autoit]

    ConsoleWrite("Zuerst normaler Aufruf, dann AdlibRegister:" &@CRLF)
    _StaticTest1()
    _StaticTest1()
    _StaticTest1()
    AdlibRegister("_StaticTest1", 1000)
    Sleep(5000)
    AdlibUnRegister("_StaticTest1")
    ConsoleWrite(@CRLF & "Zuerst AdlibRegister, dann normaler Aufruf:" &@CRLF)
    AdlibRegister("_StaticTest2", 1000)
    Sleep(5000)
    AdlibUnRegister("_StaticTest2")
    _StaticTest2()
    _StaticTest2()
    _StaticTest2()

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

    Func _StaticTest1()
    Local Static $iStatic = 1
    ConsoleWrite("$iStaic1: " & $iStatic & @CRLF)
    $iStatic = 0
    EndFunc

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

    Func _StaticTest2()
    Local Static $iStatic = 1
    ConsoleWrite("$iStaic1: " & $iStatic & @CRLF)
    $iStatic = 0
    EndFunc

    [/autoit]


    Das kann doch kein erwünschtes Verhalten sein, oder doch?


    Sanfte Grüße :D

  • array negativ sortieren

    • Friesel
    • 15. März 2014 um 14:27

    Moin!

    Um meine Funktion auch wieder ins Spiel zu bringen, hier mein Vorschlag :party:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global $aArray1[10]
    Global $aArray2[10]
    For $i = 0 To 9
    $aArray1[$i] = $i & " - Element"
    $aArray2[$i] = $i + 5 & " - Element"
    Next

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

    _ArrayDisplay($aArray1, "Erstes Array")
    _ArrayDisplay($aArray2, "Zweites Array")

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

    _ArrayConcatenate($aArray1, $aArray2)

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

    _ArrayDisplay($aArray1, "$aArray1 & $aArray2")

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

    $aUniqueEx = _ArrayUniqueEx($aArray1, 2)
    _ArrayDisplay($aUniqueEx, "Einzigartige Elemente")

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

    Func _ArrayUniqueEx($aArrayTemp, $iType = 0, $iStartIndex = 0) ;_ArrayUnique mod by FRiESEL
    If $iType = -1 Then $iType = 0
    If $iType <> 0 And $iType <> 1 And $iType <> 2 Then Return SetError(1, 0, 0)
    Local $vDelim = Chr(01), $sHold, $sHoldDouble, $sHoldSingle
    For $i = $iStartIndex To UBound($aArrayTemp) - 1
    If Not StringInStr($vDelim & $sHold, $vDelim & $aArrayTemp[$i] & $vDelim) Then
    $sHold &= $aArrayTemp[$i] & $vDelim
    Else
    $sHoldDouble &= $aArrayTemp[$i] & $vDelim
    EndIf
    Next
    For $i = $iStartIndex To UBound($aArrayTemp) - 1
    If Not StringInStr($vDelim & $sHoldDouble, $vDelim & $aArrayTemp[$i] & $vDelim) Then
    $sHoldSingle &= $aArrayTemp[$i] & $vDelim
    EndIf
    Next
    Switch $iType
    Case 0
    If $sHold Then $aArrayTemp = StringSplit(StringTrimRight($sHold, StringLen($vDelim)), $vDelim, 1)
    Case 1
    If $sHoldDouble Then $aArrayTemp = StringSplit(StringTrimRight($sHoldDouble, StringLen($vDelim)), $vDelim, 1)
    Case 2
    If $sHoldSingle Then $aArrayTemp = StringSplit(StringTrimRight($sHoldSingle, StringLen($vDelim)), $vDelim, 1)
    EndSwitch
    Return $aArrayTemp
    EndFunc ;==>_ArrayUniqueEx

    [/autoit]


    Sanfte Grüße :D

  • array negativ sortieren

    • Friesel
    • 15. März 2014 um 03:33

    Moin!
    Hier mein Vorschlag:

    Ich habe _ArrayUnique so erweitert, dass es 3 unterschiedliche Funktionen hat (je nach Argument):
    1. Entfernung aller mehrfach auftretenden Elemente (wie _ArrayUnique)
    2. Anzeige der entfernten Elemente
    3. Entfernung aller Elemente, die nicht einzigartig sind (das, was du suchst)

    Das Ganze hab' ich mal dreist _ArrayUniqueEx genannt:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global $ii = 0, $aArray[100]
    For $i = 0 To 99
    Switch $ii
    Case 0
    $aArray[$i] = "Einzigartig"
    Case 1
    $aArray[$i] = "Zweizigartig"
    Case 2
    $aArray[$i] = "Dreizigartig"
    Case 3
    $aArray[$i] = StringFormat("%02s Absolut Einzig", $i)
    $ii = -1
    EndSwitch
    $ii += 1
    Next

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

    _ArrayDisplay($aArray, "Orginal Array")
    $aUniqueEx = _ArrayUniqueEx($aArray) ;==> entfernt mehrfache Elemente (wie _ArrayUnique)
    _ArrayDisplay($aUniqueEx, "ArrayUnique")
    $aUniqueEx = _ArrayUniqueEx($aArray, 1) ;==> liefert Array mit den entfernten Elementen zurück
    _ArrayDisplay($aUniqueEx, "Entfernte Elemente")
    $aUniqueEx = _ArrayUniqueEx($aArray, 2) ;==> liefert Array mit den einzigartigen Elementen zurück
    _ArrayDisplay($aUniqueEx, "Einzigartige Elemente")

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

    Func _ArrayUniqueEx($aArrayTemp, $iType = 0, $iStartIndex = 0) ;_ArrayUnique mod by FRiESEL
    If $iType = -1 Then $iType = 0
    If $iType <> 0 And $iType <> 1 And $iType <> 2 Then Return SetError(1, 0, 0)
    Local $vDelim = Chr(01), $sHold, $sHoldDouble, $sHoldSingle
    For $i = $iStartIndex To UBound($aArrayTemp) - 1
    If Not StringInStr($vDelim & $sHold, $vDelim & $aArrayTemp[$i] & $vDelim) Then
    $sHold &= $aArrayTemp[$i] & $vDelim
    Else
    $sHoldDouble &= $aArrayTemp[$i] & $vDelim
    EndIf
    Next
    For $i = $iStartIndex To UBound($aArrayTemp) - 1
    If Not StringInStr($vDelim & $sHoldDouble, $vDelim & $aArrayTemp[$i] & $vDelim) Then
    $sHoldSingle &= $aArrayTemp[$i] & $vDelim
    EndIf
    Next
    Switch $iType
    Case 0
    If $sHold Then $aArrayTemp = StringSplit(StringTrimRight($sHold, StringLen($vDelim)), $vDelim, 1)
    Case 1
    If $sHoldDouble Then $aArrayTemp = StringSplit(StringTrimRight($sHoldDouble, StringLen($vDelim)), $vDelim, 1)
    Case 2
    If $sHoldSingle Then $aArrayTemp = StringSplit(StringTrimRight($sHoldSingle, StringLen($vDelim)), $vDelim, 1)
    EndSwitch
    Return $aArrayTemp
    EndFunc ;==>_ArrayUniqueEx

    [/autoit]

    Mit _FileReadToArray wie in deinem Beispiel würde das dann so aussehen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>

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

    Global $sFilePath = "check.txt", $sNewfile = "double.txt"
    Global $aArray

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

    _FileReadToArray($sFilePath, $aArray)
    _ArraySort($aArray,0,1)
    _ArrayDisplay($aArray)

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

    $aUniqueEx = _ArrayUniqueEx($aArray, 2, 1) ;==> liefert Array mit den einzigartigen Elementen zurück
    _ArrayDisplay($aUniqueEx, "Einzigartige Elemente")

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

    _FileWriteFromArray($sNewfile, $aUniqueEx, 1)

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

    Func _ArrayUniqueEx($aArrayTemp, $iType = 0, $iStartIndex = 0) ;_ArrayUnique mod by FRiESEL
    If $iType = -1 Then $iType = 0
    If $iType <> 0 And $iType <> 1 And $iType <> 2 Then Return SetError(1, 0, 0)
    Local $vDelim = Chr(01), $sHold, $sHoldDouble, $sHoldSingle
    For $i = $iStartIndex To UBound($aArrayTemp) - 1
    If Not StringInStr($vDelim & $sHold, $vDelim & $aArrayTemp[$i] & $vDelim) Then
    $sHold &= $aArrayTemp[$i] & $vDelim
    Else
    $sHoldDouble &= $aArrayTemp[$i] & $vDelim
    EndIf
    Next
    For $i = $iStartIndex To UBound($aArrayTemp) - 1
    If Not StringInStr($vDelim & $sHoldDouble, $vDelim & $aArrayTemp[$i] & $vDelim) Then
    $sHoldSingle &= $aArrayTemp[$i] & $vDelim
    EndIf
    Next
    Switch $iType
    Case 0
    If $sHold Then $aArrayTemp = StringSplit(StringTrimRight($sHold, StringLen($vDelim)), $vDelim, 1)
    Case 1
    If $sHoldDouble Then $aArrayTemp = StringSplit(StringTrimRight($sHoldDouble, StringLen($vDelim)), $vDelim, 1)
    Case 2
    If $sHoldSingle Then $aArrayTemp = StringSplit(StringTrimRight($sHoldSingle, StringLen($vDelim)), $vDelim, 1)
    EndSwitch
    Return $aArrayTemp
    EndFunc ;==>_ArrayUniqueEx

    [/autoit]

    Sanfte Grüße :D

  • Listview flackert beim einlesen von Daten

    • Friesel
    • 13. März 2014 um 21:34
    Zitat von Blubkuh

    Leider bin ich da jetzt auf ein Problem gestoßen was für mich keinen Sinn ergibt.
    Im ArrayDisplay() ist noch alles super ABER dann:


    ArrayDisplay verursacht hin und wieder echt seltsame Effekte (Hab mir den Code allerdings nie näher angesehn, um das zu ergründen). Die benutze ich wirklich nur zum debuggen.
    Lass die Funktion einfach mal weg und schau, was passiert...


    Zitat von Blubkuh

    BTW: In deinem Beispiel kannst du vor und nach _GUICtrlListView_AddArray() die _GUICtrlListView_BeginUpdate($hListView) bzw _GUICtrlListView_EndUpdate($hListView) wegmachen, weil die Funktion intern das Beginnupdate aufruft und beendet :)


    Vielen Dank, hatte ich übersehen... :thumbup:

  • Listview flackert beim einlesen von Daten

    • Friesel
    • 13. März 2014 um 18:09

    Moin!

    Ich hab mir dein Skript zwar jetzt nicht so genau angesehen, weil ich es in Ermangelung an Datenbanken auch nicht testen kann,
    aber ich habe mal ein kurzes Beispiel zu _GUICtrlListView_BeginUpdate und _GUICtrlListView_EndUpdate.

    Da Flackert zwar nichts, aber die Unterschiede sind emorm. Am Schluss hab ich noch ein Beispiel zu _GUICtrlListView_AddArray angefügt, was nochmal nen Tacken schneller ist, allerdings nicht so flexibel. Du kannst die Funktion aber nach deinen Vorlieben anpassen, was ich selbst schon getan habe.

    Skript

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>

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

    GUICreate("ListView", 200, 600)
    $hListView = GUICtrlCreateListView("Spalte 1| Spalte 2", 0, 0, 200, 600)

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

    $iEingabe = InputBox("", "Anzahl der Elemente eingeben:", "1000")
    If $iEingabe = "" Then Exit

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

    GUISetState()

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

    _FillListView($iEingabe)

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

    do
    Until GUIGetMsg() = -3

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

    Func _FillListView($iItems)
    Local $aItem[$iItems][2]
    For $i = 0 To $iItems - 1
    $aItem[$i][0] = StringFormat("Zeile Nr. %04s", $i)
    $aItem[$i][1] = "Sinnloses Zeug"
    Next

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

    $iBegin = TimerInit()
    For $i = 0 To $iItems - 1
    GUICtrlCreateListViewItem($aItem[$i][0] & "|" & $aItem[$i][1], $hListView)
    Next
    MsgBox(0, "", "Dauer zum Befüllen des ListViews mit " & $iItems & " Items: " & TimerDiff($iBegin) / 1000 & " Sekunden")

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

    _GUICtrlListView_BeginUpdate($hListView)
    _GUICtrlListView_DeleteAllItems($hListView)
    _GUICtrlListView_EndUpdate($hListView)

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

    $iBegin = TimerInit()
    _GUICtrlListView_BeginUpdate($hListView)
    For $i = 0 To $iItems - 1
    GUICtrlCreateListViewItem($aItem[$i][0] & "|" & $aItem[$i][1], $hListView)
    Next
    _GUICtrlListView_EndUpdate($hListView)
    MsgBox(0, "", "Dauer zum Befüllen des ListViews mit " & $iItems & " Items: " & TimerDiff($iBegin) / 1000 & " Sekunden")

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

    _GUICtrlListView_BeginUpdate($hListView)
    _GUICtrlListView_DeleteAllItems($hListView)
    _GUICtrlListView_EndUpdate($hListView)

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

    $iBegin = TimerInit()
    _GUICtrlListView_BeginUpdate($hListView)
    _GUICtrlListView_AddArray($hListView, $aItem)
    _GUICtrlListView_EndUpdate($hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE)

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

    MsgBox(0, "", "Dauer zum Befüllen des ListViews mit " & $iItems & " Items: " & TimerDiff($iBegin) / 1000 & " Sekunden")
    EndFunc

    [/autoit]

    Sanfte Grüße :D

  • Autoit Script für Irfanview

    • Friesel
    • 6. März 2014 um 16:48
    Zitat von water

    IrfanView hat ja auch ein Batch Interface. D.h. du kannst die meisten Befehle in der Command Line mitgeben.


    Im Irfanview Installationsverzeichnis befindet sich eine Datei namens Options.txt. Da sind alle Command Line Optionen inklusive Beispielen aufgeführt.
    Die Datei kannst du auch hier downloaden oder unterhalb den Spoiler anzeigen lassen:

    Spoiler anzeigen
    Code
    -------------------------------------------------------------------------------
    File  : 'options.txt' - Command line options for IrfanView
    Author: Irfan Skiljan
    E-Mail: irfanview@gmx.net
    WWW   : http://www.irfanview.com
    -------------------------------------------------------------------------------
    
    
    List of all command line options supported in IrfanView:
    --------------------------------------------------------
    
    
      /one                  - force "Only one instance"
      /fs                   - force Full Screen display
      /bf                   - force "Fit images to desktop" display option
      /title=text           - set window title to "text"
      /pos=(x,y)            - move IrfanView window to x,y
      /convert=filename     - convert input file(s) to "filename" and CLOSE IrfanView
                              (Note: See pattern help file page for more options)
      /slideshow=txtfile    - play slideshow with the files from "txtfile"
      /slideshow=folder     - play slideshow with the files from "folder"
      /reloadonloop         - reload input source used in /slideshow when list finished
      /filelist=txtfile     - use filenames from "txtfile" as input, see examples below
      /thumbs               - open Thumbnails window
      /killmesoftly         - close all IrfanView instances (exit after command line)
      /closeslideshow       - close slideshow and IrfanView after the last image
      /page=X               - open page number X from a multipage input image
      /crop=(x,y,w,h)       - crop input image: x-start, y-start, width, height
      /print                - print to default printer and CLOSE IrfanView
      /print="Name"         - print to specific printer and CLOSE IrfanView
      /resize=(w,h)         - resize input image to w (width) and h (height)
      /resize_long=X        - resize input image: set long side to X
      /resize_short=X       - resize input image: set short side to X
      /resample             - for resize: use Resample option (better quality)
      /capture=X            - capture the screen or window (see examples below)
      /ini                  - use the Windows folder for INI/LST files (read/save)
      /ini="Folder"         - use the folder "Folder" for INI/LST files (read/save)
      /clippaste            - paste image from the clipboard
      /clipcopy             - copy image to the clipboard
      /silent               - don't show messages for command line read/save errors
      /invert               - invert input image (negative)
      /dpi=(x,y)            - change image DPI values, set DPIs for scanning
      /scan                 - acquire the image from the TWAIN device (show TWAIN dialog)
      /scanhidden           - acquire the image from the TWAIN device (hide TWAIN dialog)
      /batchscan=(options)  - simulate menu: File->Batch Scan, see examples below
      /bpp=BitsPerPixel     - change color depth of the input image to BitsPerPixel
      /swap_bw              - swap black and white color
      /gray                 - convert input image to grayscale
      /rotate_r             - rotate input image to right
      /rotate_l             - rotate input image to left
      /hflip                - horizontal flip
      /vflip                - vertical flip
      /filepattern="x"      - browse only specific files
      /effect=(x,p1,p2)     - apply effect filter X, see below for examples
      /sharpen=X            - open image and apply the sharpen filter value X
      /contrast=X           - open image and apply the contrast value X
      /bright=X             - open image and apply the brighntess value X
      /gamma=X              - open image and apply the gamma correction value X
      /advancedbatch        - apply Advanced Batch Dialog options to image (from INI file)
      /transpcolor=(r,g,b)  - set transparent color if saving as GIF/PNG/ICO
      /hide=X               - hide toolbar, status bar, menu and/or caption of the main window
      /aspectratio          - used for resizes: keep image proportions
      /info=txtfile         - write image infos to "txtfile"
      /fullinfo             - used for /info, write EXIF, IPTC and Comment data
      /append=tiffile       - append image as (TIF) page to "tiffile"
      /multitif=(tif,files) - create multipage TIF from input files
      /panorama=(X,files)   - create panorama image from input files; X = direction (1 or 2)
      /jpgq=X               - set JPG save quality
      /tifc=X               - set TIF save compression
      /wall=X               - set image as wallpaper, see below for /random and examples
      /extract=(folder,ext) - extract all pages from a multipage file
      /import_pal=palfile   - import and apply a special palette to the image (PAL format)
      /export_pal=palfile   - export image palette to file (PAL format)
      /jpg_rotate=(options) - JPG lossless rotation, see examples below
      /monitor=X            - start EXE-Slideshow on monitor X
      /window=(x,y,w,h)     - set EXE-Slideshow window position and size
    
    
    
    
    Important notes:
    - Only lower case options are supported (don't type any UPPERCASE letters) !
    - Input file name (if required) is always the first parameter!
    - Use "" for file names with spaces, example: "c:\images\dummy test file.jpg"
    - Write always the FULL paths for file names (incl. drive letter)
    - You can combine several options in one command
    - Wildcards supported only for /convert, /print, /info and /jpg_rotate
    - Maximal command line length is limited by Windows, so use shorter names/paths.
    - Most settings are loaded from the INI file. Using prepared INIs and /ini option, you can extend the possibilities.
    - IrfanView exit code is 0. If /convert or /print is used, there is 1 or 2 also possible, for load/save error.
    
    
    
    
    Example for conversion: 
      i_view32.exe c:\test.bmp /convert=c:\giftest.gif
      => Convert file: 'c:\test.bmp' to 'c:\giftest.gif' without GUI ;-)
      i_view32.exe c:\*.jpg /convert=d:\temp\*.gif
      i_view32.exe c:\*.jpg /resize=(500,300) /aspectratio /resample /convert=d:\temp\*.png
      i_view32.exe /filelist=c:\mypics.txt /resize=(500,300) /aspectratio /resample /convert=d:\temp\*.png
      i_view32.exe c:\test.bmp /convert=c:\test_$Wx$H.jpg
      i_view32.exe c:\test.bmp /resize=(100,100) /resample /aspectratio /convert=d:\$N_thumb.jpg
      i_view32.exe c:\test.bmp /convert=c:\temp\$T(%Y%m%d)\test_$Wx$H.jpg
      i_view32.exe c:\test.bmp /convert=$D$N.jpg
      i_view32.exe c:\*.bmp /convert=$D$N.jpg
      i_view32.exe c:\*.jpg /advancedbatch /convert=c:\temp\*.jpg
      i_view32.exe c:\test.bmp /transpcolor=(255,255,255) /convert=c:\giftest.gif
      (Note: supported are all IrfanView read/save formats except audio/video)
    
    
    Example for slideshow: 
      i_view32.exe /slideshow=c:\mypics.txt
      (Note: The file 'c:\mypics.txt' contains, in each line, a name of an image file,
             including the full path OR path relative to "i_view32.exe") 
      i_view32.exe /slideshow=c:\mypics.txt /reloadonloop
      i_view32.exe /slideshow=c:\images\
      i_view32.exe /slideshow=c:\images\ /reloadonloop
      i_view32.exe /slideshow=c:\images\*.jpg
      i_view32.exe /slideshow=c:\images\test*.jpg
      Note: you have to close IrfanView after the last image from the TXT file, if no /closeslideshow is used.
    
    
    Example for closeslideshow: 
      i_view32.exe /slideshow=c:\mypics.txt /closeslideshow
      => IrfanView will be closed after the last image from 'c:\mypics.txt'
    
    
    Example for thumbnails: 
      i_view32.exe c:\test\image1.jpg /thumbs
      => open 'image1.jpg' and display thumbnails from directory 'c:\test'
      i_view32.exe c:\test /thumbs
      => display thumbnails from directory 'c:\test'
      i_view32.exe /filelist=c:\mypics.txt /thumbs
      => load filenames from TXT file and display as thumbnails
    
    
    Example for filelist: 
      i_view32.exe /filelist=c:\mypics.txt
      i_view32.exe /filelist=c:\mypics.txt /convert=d:\test\*.jpg
      i_view32.exe /filelist=c:\mypics.txt /thumbs
    
    
    Example for close: 
      i_view32.exe /killmesoftly
      => close IrfanView and terminate all instances
    
    
    Example for page:
      i_view32.exe c:\test.tif /page=3
      => Open page number 3 from the multipage image 'c:\test.tif'
    
    
    Example for crop:
      i_view32.exe c:\test.jpg /crop=(10,10,300,300)
      i_view32.exe c:\test.jpg /crop=(10,10,300,300) /convert=c:\giftest.gif
      => Open 'c:\test.jpg' and crop: x-start=10, y-start=10, width=300, height=300
    
    
    Example for print:
      i_view32.exe c:\test.jpg /print
      => Open 'c:\test.jpg', print the image to default printer and close IrfanView
      i_view32.exe c:\test.jpg /print="Printer Name"
      => Open 'c:\test.jpg', print the image to specific printer and close IrfanView
      i_view32.exe c:\*.jpg /print
      => Print all JPGs from "C:" and close IrfanView
      Note: the current settings from the INI file are used.
    
    
    Example for resize:
      i_view32.exe c:\test.jpg /resize=(300,300) /resample
      => Open 'c:\test.jpg' and resample: width=300, height=300
      (Note: Resample uses the the active resample filter from the INI file)
      i_view32.exe c:\test.jpg /resize=(300,300) /aspectratio
      => Open 'c:\test.jpg' and resize: width = max. 300, height = max. 300, proportional
      i_view32.exe c:\test.jpg /resize=(300,0) /aspectratio
      => Open 'c:\test.jpg' and resize: width=300, height=proportional
      i_view32.exe c:\test.jpg /resize_long=300 /aspectratio /resample
      => Open 'c:\test.jpg' and resample: long side=300, short side=proportional
      i_view32.exe c:\test.jpg /resize=(300,0)
      => Open 'c:\test.jpg' and resize: width=300, height=original
      i_view32 c:\test.jpg /resize=(150p,150p)
      => Open 'c:\test.jpg' and resize: width=150%, height=150%
    
    
    Example for capture:
      i_view32.exe /capture=0
      => Capture the whole screen
      i_view32.exe /capture=6
      => start in Capture mode, use last used capture dialog settings
      capture values: 
      0 = whole screen
      1 = current monitor
      2 = foreground window
      3 = foreground window - client area
      4 = rectangle selection
      5 = object selected with the mouse
      6 = start in capture mode (can't be combined with other commandline options)
      Advanced examples:
      i_view32.exe /capture=2 /convert=c:\test.jpg
      Capture foreground window and save result as file.
      i_view32.exe /capture=2 /convert=c:\capture_$U(%d%m%Y_%H%M%S).jpg
      Capture foreground window and save result as file; file name contains time stamp.
    
    
    Example for ini:
      i_view32.exe /ini
      i_view32.exe c:\test.jpg /ini
      i_view32.exe c:\test.jpg /ini="c:\temp"
    
    
    Example for clipboard paste:
      i_view32.exe /clippaste
      i_view32.exe /clippaste /convert=c:\test.gif
    
    
    Example for clipboard copy:
      i_view32.exe c:\test.jpg /clipcopy
      i_view32.exe c:\test.jpg /clipcopy /killmesoftly
    
    
    Example for /invert:
      i_view32.exe c:\test.jpg /invert
    
    
    Example for /dpi:
      i_view32.exe c:\test.jpg /dpi=(72,72)
    
    
    Example for /scan:
      With the scan command, you can only combine: /print, /dpi, /gray and /convert.
      i_view32.exe /scan
      i_view32.exe /scanhidden
      i_view32.exe /scanhidden /dpi=(150,150)
      i_view32.exe /scan /convert=c:\test.gif
      i_view32.exe /scanhidden /convert=c:\test.gif
      i_view32.exe /scanhidden /gray /convert=c:\test.gif
      i_view32.exe /print /scan
    
    
    Example for /batchscan=(options):
      options = 8 options from the batch scan dialog:
      filename, index, increment, digits, skip, dest-folder, save-extension, multi-tif
      i_view32.exe /batchscan=(scanfile,1,1,2,1,c:\temp,bmp,0)
      i_view32.exe /batchscan=(scanfile,1,1,2,1,c:\temp,bmp,0) /dpi=(150,150)
      i_view32.exe /batchscan=(scanfile,1,1,2,0,c:\temp,tif,1)
      i_view32.exe /batchscan=("crazy, filename",1,1,2,0,"c:\temp\crazy, (folder)",tif,1)
      i_view32.exe /batchscan=(scanfile,1,1,2,1,c:\temp,bmp,0) /scanhidden
    
    
    Example for /bpp:
      i_view32.exe c:\test.jpg /bpp=8
      Supported BPP-values: 1, 4, 8 and 24 (decrease/increase color depth)
      => Open 'c:\test.jpg' and reduce to 256 colors
    
    
    Example for /filepattern:
      i_view32.exe c:\images\ /filepattern="*.jpg"
      => Go to folder "c:\images" and load JPGs only in the browse/file list
      i_view32.exe c:\images\ /thumbs /filepattern="*.jpg"
      => Go to folder "c:\images" and show JPG thumbnails only 
      i_view32.exe c:\images\ /thumbs /filepattern="123*.jpg"
      => Go to folder "c:\images" and show JPG with names "123*" as thumbnails
    
    
    Example for /effect=(effect-nr,param1,param2):
      i_view32.exe c:\test.jpg /effect=(6,3,0)
      => apply Median filter, parameter = 3
      i_view32.exe c:\test.jpg /effect=(2,3,50)
      => apply Blur-2 filter, parameter1 = 3, parameter2 = 50
      effect-nr values: (from Effect-Browser dialog)
      1 = Blur
      2 = Blur-2
      ...
      37 = Metallic Ice
     
    Example for /sharpen:
      i_view32.exe c:\test.jpg /sharpen=33
    
    
    Examples for /hide:
      Values (can be combined (add values)):
        Toolbar     1
        Status bar  2
        Menu bar    4
        Caption     8
      i_view32.exe c:\test.jpg /hide=1
      => Open 'c:\test.jpg', hide toolbar only
      i_view32.exe c:\test.jpg /hide=3
      => Open 'c:\test.jpg', hide toolbar and status bar
      i_view32.exe c:\test.jpg /hide=12
      => Open 'c:\test.jpg', hide caption and menu bar
      i_view32.exe c:\test.jpg /hide=15
      => Open 'c:\test.jpg', hide all
    
    
    Examples for /info:
      i_view32.exe c:\test.jpg /info=c:\test.txt
      i_view32.exe c:\*.jpg /info=c:\jpgs.txt
      i_view32.exe c:\test.jpg /info=c:\test.txt /fullinfo
    
    
    Example for /append:
      i_view32.exe c:\test.jpg /append=c:\test.tif
      => Open 'c:\test.jpg' and append it as page to 'c:\test.tif'
    
    
    Example for /multitif:
      Syntax: /multitif=(tifname,file1,...,fileN)
      First file is the name of the result TIF file.
      i_view32.exe /multitif=(c:\test.tif,c:\test1.bmp,c:\dummy.jpg)
      => Create multipage TIF (c:\test.tif) from 2 other files
    
    
    Example for /panorama:
      Syntax: /panorama=(X,file1,...,fileN)
      First parameter (X) is the direction: 1 = horizontal, 2 = vertical.
      i_view32.exe /panorama=(1,c:\test1.bmp,c:\dummy.jpg)
      => Create horizontal panorama image from 2 other files
    
    
    Example for /jpgq:
      i_view32.exe c:\test.jpg /jpgq=75 /convert=c:\new.jpg
      => Open 'c:\test.jpg' and save it as c:\new.jpg, quality = 75
      Quality range: 1 - 100.
    
    
    Example for /tifc:
      i_view32.exe c:\test.jpg /tifc=4 /convert=c:\new.tif
      => Open 'c:\test.jpg' and save it as c:\new.tif, compression = Fax4
      Compressions: 0 = None, 1 = LZW, 2 = Packbits, 3 = Fax3, 4 = Fax4, 5 = Huffman, 
      6 = JPG, 7 = ZIP
    
    
    Example for wallpaper:
      i_view32.exe c:\test.jpg /wall=0
      => Open 'c:\test.jpg' and set is as wallpaper (centered)
      wall values: 0 (centered), 1 (tiled), 2 (stretched), 3 (proportional)
      i_view32.exe c:\images\*.jpg /random /wall=0 /killmesoftly
      i_view32.exe /filelist=c:\mypics.txt /random /wall=0 /killmesoftly
      => get random file from the folder/list and set as wallpaper
    
    
    Example for /extract:
      i_view32.exe c:\multipage.tif /extract=(c:\temp,jpg)
      => Open 'c:\multipage.tif' and save all pages to folder 'c:\temp' as JPGs
    
    
    Examples for EXE slideshow:
      MySlideshow.exe /monitor=2
      => Start standalone slideshow on monitor 2
      MySlideshow.exe /window=(0,0,800,600)
      => Start standalone slideshow in top left corner, window size 800x600
    
    
    Example for /advancedbatch:
      i_view32.exe c:\test.jpg /advancedbatch /convert=c:\image.jpg
      (some Misc. Advanced Batch options are not supported: overwrite, delete, subfolders, all pages)
      => Open 'c:\test.jpg', apply Advanced Batch options from the INI file and save as new file
    
    
    Example for /jpg_rotate=(options):
      options = all 8 options from the JPG lossless dialog:
      transformation, optimize, EXIF date, current date, set DPI, DPI value, marker option, custom markers
      Note: this option will overwrite the original file(s)!
      Values:
      Transformation   : None (0), Vertical (1) ... Auto rotate (6)
      Optimize         : 0 or 1
      Set EXIF date    : 0 or 1
      Keep current date: 0 or 1
      Set DPI          : 0 or 1
      DPI value        : number
      Marker option    : Keep all (0), Clean all (1), Custom (2)
      Custom markers values (can be combined (add values)):
        Keep Comment 1
        Keep EXIF    2
        Keep IPTC    4
        Keep others  8
      i_view32.exe c:\test.jpg /jpg_rotate=(6,1,1,0,1,300,0,0)
      => Auto rotate, optimize, set EXIF date as file date, set DPI to 300, keep all markers
      i_view32.exe c:\test.jpg /jpg_rotate=(6,1,1,0,0,0,2,6)
      => Auto rotate, optimize, set EXIF date as file date, keep EXIF and IPTC markers
      i_view32.exe c:\test.jpg /jpg_rotate=(3,1,0,1,0,0,1,0)
      => Rotate 90, optimize, use current file date, clean all markers
      i_view32.exe c:\images\*.jpg /jpg_rotate=(6,1,1,0,0,0,0,0)
      => For all JPGs: Auto rotate, optimize, set EXIF date as file date, keep all markers
    Alles anzeigen


    Die folgenden Beispiele bewirken alle das Selbe, nur bei ~Wait wartet das Skript auf die Beendigung von Irfanview.
    Die mitgegebenen Optionen bewirken eine Darstellung in Desktopgrösse, beim Fenster sind alle Anzeigen ausgeblendet.

    [autoit]

    $sBildPfad = @DesktopDir & "\Bild.jpg"
    $sOptions = "/bf /hide=7"
    Run("K:\__Programme\IrfanView\i_view32.exe " & $sBildPfad & " " & $sOptions)
    RunWait("K:\__Programme\IrfanView\i_view32.exe " & $sBildPfad & " " & $sOptions)
    ShellExecute("K:\__Programme\IrfanView\i_view32.exe", $sBildPfad & " " & $sOptions)
    ShellExecuteWait("K:\__Programme\IrfanView\i_view32.exe", $sBildPfad & " " & $sOptions)

    [/autoit]

    Sanfte Grüße :D

  • Strings aus Textdatei entfernen

    • Friesel
    • 6. März 2014 um 00:40

    Moin!

    Meine Methode verarbeitet den kompletten Text in einem und nicht, so wie du es versuchst, zeilenweise.
    Man könnte es zwar auch zeilenweise abarbeiten, was aber viel zu umständlich wäre.

    In deinem Skript greift StringRegExp auf die Variable $Data zu, die aber ohne Inhalt ist. Die Daten sind in diesem Fall in $Data[1], $Data[2] usw gespeichert.

    Du mußt also einfach den Inhalt der Datei in eine einzige Variable einlesen ($sData) und diese an StringRegExp übergeben.

    Und so einfach gehts:

    [autoit]

    #include <File.au3>
    #include <Array.au3>

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

    $sData = FileRead("Test.txt");==> "Test.txt" befindet sich im Skriptverzeichnis. Den Pfad mußt du noch anpassen.

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

    ;==> Alternative für große Dateien (siehe Hilfe zu "FileRead")
    ;$hData = FileOpen("Test.txt", 0)
    ;$sData = FileRead($hData)
    ;~~~
    ;FileClose($hData) ==> FileClose, wenn die Bearbeitung der Daten beendet ist (bzw nach dem letzten "FileRead($hHandle)")
    ;<==

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

    MsgBox(0, "Rohdaten", $sData)
    $aData = StringRegExp($sData, ".+? .+? (.+)", 3)
    _ArrayDisplay($aData)
    _FileWriteFromArray("Test1.txt", $aData);==> Datei in "Test.txt" umbenennen, falls du keinen Wert auf eine Sicherheitskopie der Orginaldaten legst

    [/autoit]

    Sanfte Grüße :)

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™