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

Beiträge von Oscar

  • *.txt Dateien aus Ordner auslesen und in einer Textdatei speichern

    • Oscar
    • 6. März 2009 um 03:44

    Mit dem _FileListToArray aus den UDFs klappt das doch auch:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    $sOut = ''
    $aFiles = _FileListToArray(@ScriptDir & '\received\', '*.txt', 1)
    If Not @error Then
    For $i = 1 To $aFiles[0]
    $sOut &= FileRead($aFiles[$i])
    Next
    $hFile = FileOpen(@ScriptDir & '\TextAll.txt', 2)
    If $hFile <> -1 Then
    FileWrite($hFile, $sOut)
    FileClose($hFile)
    EndIf
    EndIf

    [/autoit]


    Oder falls die Textdateien sehr groß sind und Du sie nicht im RAM zwischenspeichern kannst/willst:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    $aFiles = _FileListToArray(@ScriptDir & '\received\', '*.txt', 1)
    If Not @error Then
    $hFile = FileOpen(@ScriptDir & '\TextAll.txt', 2)
    If $hFile <> -1 Then
    For $i = 1 To $aFiles[0]
    FileWrite($hFile, FileRead($aFiles[$i]))
    Next
    FileClose($hFile)
    EndIf
    EndIf

    [/autoit]

    Oder meinst Du rekursiv, also auch in den Unterordnern von "received"?

  • Up-/Down-Control bei Input

    • Oscar
    • 5. März 2009 um 18:41

    Ja klar, von mir aus.
    Die Idee dazu ist mir heute während der Arbeit gekommen. Ich wußte nur nicht, ob und wie man das "normale" Verhalten des Up-/down-Controls verhindern kann. Aber ein einfaches "Return 1" funktioniert da schon. :)

  • StringRegExpReplace mal wieder!

    • Oscar
    • 5. März 2009 um 17:36

    Oder noch etwas verallgemeinern:

    [autoit]


    $HTML = '<h3>yxcv</h3> <ul>vbnm hjkl</ul> <li>jklö</li> <a href="frefee">asdf</a> <td width="45%">wert</td>'
    $HTML = StringRegExpReplace($HTML, '<\/*(h3|ul|li|a|td)+.*?>', '')
    MsgBox(0,0,$HTML)

    [/autoit]


    Dann klappt's auch mit einem z.B. erweiterten <td>

  • Up-/Down-Control bei Input

    • Oscar
    • 5. März 2009 um 17:13

    Danke, für's testen.
    Ich habe mir jetzt einen Workaround mit WM_NOTIFY gebastelt:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $hGUI = GUICreate('Test', 220, 100, -1, -1)

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

    $hInput = GUICtrlCreateInput('32767', 5, 50, 210, 22)
    $hUpDown = GUICtrlCreateUpdown($hInput)

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

    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, 'MY_WM_NOTIFY')

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

    Do
    Until GUIGetMsg() = -3

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

    Func MY_WM_NOTIFY($hWnd, $msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    Switch $nID
    Case $hUpDown
    Local $aContrPos = ControlGetPos($hGUI, '', $hUpDown)
    If Not IsArray($aContrPos) Then Return 1
    Local $aMousePos = GUIGetCursorInfo($hGUI)
    If Not IsArray($aMousePos) Then Return 1
    If $aMousePos[1] > $aContrPos[1] + $aContrPos[3]/2 Then
    GUICtrlSetData($hInput, GUICtrlRead($hInput) - 1)
    Else
    GUICtrlSetData($hInput, GUICtrlRead($hInput) + 1)
    EndIf
    Return 1
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Was haltet ihr davon?

  • Up-/Down-Control bei Input

    • Oscar
    • 5. März 2009 um 03:47

    Hmmm...scheinbar gibt es dafür kein workaround?!

    Könnt ihr mir wenigstens bestätigen, dass das bei euch auch so ist.
    Ich möchte nur sichergehen, dass das nicht an meiner Installation hier liegt.

  • Multiplayer UNO

    • Oscar
    • 5. März 2009 um 03:38

    Warum sollte er es nicht schaffen?
    Schach hat klare Regeln. Diese umzusetzen ist nicht das Problem.
    Ich denke nicht, dass er vor hat gegen andere Schachprogramme anzutreten, denn dabei hätte sein Programm wohl keine Chance, da AutoIt dafür die falsche Programmiersprache ist.
    Aber programmieren kann man das auch in AutoIt.

  • Menü Problem

    • Oscar
    • 4. März 2009 um 20:32

    Was ich damit sagen will, ist: Du darfst nicht gleichzeitig den OnEvent- und den MessageLoop-Modus benutzen. Du musst Dich für einen von beiden entscheiden.
    Also entweder alle Befehle mit GUICtrlSetOnEvent und GUISetOnEvent weg oder die kompletten MessageLoop-Befehle (Zeilen 56-76).

  • Menü Problem

    • Oscar
    • 4. März 2009 um 20:20

    Weil Du nicht gleichzeitig

    [autoit]

    opt ("GUIOnEventMode", 1)

    [/autoit]


    und

    [autoit]

    $nMsg = GUIGetMsg()

    [/autoit]


    benutzen darfst.

  • Hilfe bei Switch oder OnEvent

    • Oscar
    • 4. März 2009 um 20:07

    Wenn man vorher schon weiß, wie viele Schleifendurchläufe man benötigt, dann sollte man For...Next nehmen. Ist schneller, übersichtlicher und man hat gleich eine Zählvariable.
    Hier würde ich außerdem den OnEvent-Mode nehmen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    $hGui = GUICreate('', 128, 128)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    Global $aPic[32]

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

    For $i = 0 To 31
    $aPic[$i] = GUICtrlCreatePic(@ScriptDir & '\Pic.bmp', Mod($i,4)*8, Int($i/4)*8, 8, 8)
    GUICtrlSetOnEvent(-1, '_Klick')
    Next

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

    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func _Klick()
    Local $ID = @GUI_CtrlId-$aPic[0]
    GUICtrlSetImage($aPic[$ID], @ScriptDir & '\Pic2.bmp')
    EndFunc

    [/autoit]
  • Schon beim Schreiben eine Veränderung

    • Oscar
    • 4. März 2009 um 16:48

    So geht es komfortabler:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $hGUI = GUICreate('Test', 220, 100, -1, -1)

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

    $hLabel = GUICtrlCreateLabel('', 5, 5, 210, 40)
    GUICtrlSetFont(-1, 20)

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

    $hInput = GUICtrlCreateInput('', 5, 50, 210, 22)

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

    GUISetState()
    GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')

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

    Do
    Until GUIGetMsg() = -3

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0x0000FFFF), $sExt
    Switch $nID
    Case $hInput
    GUICtrlSetData($hLabel, GUICtrlRead($hInput))
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • Mehrere Fragen: Guigrößen per Button ändern, ...

    • Oscar
    • 4. März 2009 um 04:46

    Also erstmal solltest Du unbedingt den OnEvent-Mode benutzen, das ist hier viel einfacher, weil man den dynamisch erstellten Buttons immer die gleiche Funktion zuweisen kann.
    Das benutzen von Arrays ist ebenfalls eine logische Konsequenz dabei.
    Als kleines Beispiel, wie das aussehen könnte:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt('GUIResizeMode', 802)

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

    Global $iCount = 1
    Global $aButton[$iCount]
    Global $iHeight = 100
    Global $iPosH = 30
    $hGui = GUICreate('', 400, $iHeight, @DesktopWidth / 3, @DesktopHeight / 3)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $aButton[$iCount - 1] = GUICtrlCreateButton("+", 20, $iPosH, 20, 20)
    GUICtrlSetOnEvent(-1, '_AddButton')

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

    GUISetState()

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

    While True
    Sleep(50)
    WEnd

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func _AddButton()
    GUICtrlSetData($aButton[$iCount - 1], '-')
    GUICtrlSetOnEvent($aButton[$iCount - 1], '_DelButton')
    $iCount += 1
    ReDim $aButton[$iCount]
    $iPosH += 30
    $aButton[$iCount - 1] = GUICtrlCreateButton("+", 20, $iPosH, 20, 20)
    GUICtrlSetOnEvent(-1, '_AddButton')
    $iHeight += 30
    WinMove($hGui, '', @DesktopWidth / 3, @DesktopHeight / 3, 400, $iHeight)
    EndFunc ;==>_AddButton

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

    Func _DelButton()
    GUICtrlDelete($aButton[$iCount - 1])
    GUICtrlSetData($aButton[$iCount - 2], '+')
    GUICtrlSetOnEvent($aButton[$iCount - 2], '_AddButton')
    $iCount -= 1
    ReDim $aButton[$iCount]
    $iPosH -= 30
    $iHeight -= 30
    WinMove($hGui, '', @DesktopWidth / 3, @DesktopHeight / 3, 400, $iHeight)
    EndFunc

    [/autoit]
  • Up-/Down-Control bei Input

    • Oscar
    • 3. März 2009 um 04:48

    Mir ist gerade aufgefallen, dass das Up-/Down-Control wohl nur mit einem 16-Bit-signed-Int-Wert arbeitet.

    Beispiel:

    [autoit]


    #include <EditConstants.au3>
    Global $hGUI = GUICreate('Test', 120, 100, -1, -1)
    $hCounter = GUICtrlCreateInput('32767', 10, 10, 100, 22, BitOR($ES_NUMBER, $ES_RIGHT))
    GUICtrlCreateUpdown($hCounter)
    ;~ GUICtrlSetLimit(-1, 40000, 0)
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]


    Hier kann man über die Up-/Down-Controls keinen Wert größer als 32767 einstellen. Mit dem auskommentierten SetLimit wird's völlig konfus, dann kommt es auf den eingestellten MAX-Wert an, was man einstellen kann, aber größer als 32767 geht's auch damit nicht.
    Kann man das Problem sonst irgendwie umgehen?

  • Dateinamelänge zählen

    • Oscar
    • 3. März 2009 um 04:01
    Zitat von Micha_he

    Es gibt etliche Ansätze zum rekursiven Auflisten von Files. Und die Experten streiten wohl noch in einigen Jahren, welche die schnellste ist. ;)

    Dabei ist das so einfach: Rekursive Datei/Ordner Auflistung per Objekt ;)

  • FileRenamer

    • Oscar
    • 3. März 2009 um 03:43

    Hmmm...wenn ich den VLC-Player als Zuordnung für MP3s mache (doppelklick im Explorer startet VLC-Player), öffnet ShellExecute trotzdem WinAMP. ?(

    Das Umbenennen/Kopieren aus unterschiedlichen Verzeichnissen erfordert aber eine komplett andere Vorgehensweise. Dann muss man zu jeder Datei auch den Pfad zwischenspeichern. Das ist mir dann zu aufwendig für eine Fuktionalität, die man auch erreichen kann, wenn man die Verzeichnisse nacheinander bearbeitet.

  • Herausfinden, ob Script/.exe von bestimmtem Script/exe ausgeführt worden ist

    • Oscar
    • 2. März 2009 um 21:01

    Und wozu soll eine solch umständliche Vorgehensweise gut sein?

    Warum packst Du nicht beide Scripte zusammen?

  • FileRenamer

    • Oscar
    • 2. März 2009 um 20:42

    @satinez: Schau mal im Menü unter "Einstellungen", ob Du vielleicht den Haken bei "Erklärungs-Sprechblasen anzeigen" weggemacht hast.
    Das mit den MP3s funktioniert bei mir einwandfrei. Sollte eigentlich auch, weil ich den Dateinamen (inkl. Pfad) mit ShellExecute aufrufe. Somit wird das mit dieser Dateiendung verknüpfte Programm aufgerufen.

    Wofür "Drag & Drop"?

    Edit:  nuts: Schau mal bei: Iconspedia

  • Maximieren etwas anders...

    • Oscar
    • 2. März 2009 um 20:10

    Ich dachte, er meint das eher so:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt('GUIEventOptions', 1)

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

    $bSwitch = True
    Global $hGUI = GUICreate('Test', 640, 480, -1, 0, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    GUISetOnEvent($GUI_EVENT_MAXIMIZE, '_Maximize')
    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _Maximize()
    Switch $bSwitch
    Case True
    WinMove($hGUI, '', 0, 0, @DesktopWidth, 480)
    Case False
    WinMove($hGUI, '', @DesktopWidth/2-320, 0, 640, 480)
    EndSwitch
    $bSwitch = Not $bSwitch
    EndFunc

    [/autoit]
  • Maximieren etwas anders...

    • Oscar
    • 2. März 2009 um 19:47

    Aus der Hilfe:

    Zitat


    If the option GUIEventOptions is set to 1 the minimize, restore and maximize button will not do any action on the window just a simple notification.

    Damit kannst Du dann selbst (Funktion) auf einen Klick reagieren.

  • FileRenamer

    • Oscar
    • 2. März 2009 um 16:00

    Eigentlich gibt es unter Windows ja keine Einschränkung bzgl. der Länge der Dateiendung, aber ich habe das jetzt mal auf 4 Zeichen begrenzt, wegen der Anzeige in der Combobox.

    Die übrigen Änderungen und neuen Funktionen könnt ihr euch in der neuen Version (siehe Post#1) ansehen. Ich habe ein paar Sätze zur Bedienung dazugeschrieben und hoffe, dass das so einigermassen verständlich ist. Falls es noch Fragen und/oder Kritik gibt, immer her damit. :)

    An dieser Stelle möchte ich mich bei allen bisherigen (und zukünftigen) Skritptestern herzlich bedanken. Eure Ideen haben mit dazu beigetragen, dass das Programm so gut geworden ist. :thumbup:

  • Geburtstag von eukalyptus

    • Oscar
    • 2. März 2009 um 04:25

    Guten Morgen, eukalyptus!

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Alles Gute zum Geburtstag! Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Vielen Dank für Deine Hilfsbereitschaft und für die coolen Skripte, die Du hier gepostet hast.

    P.S.: Jetzt lassen sie Dich auch auf Ü30-Partys. ;)

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™