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

  • _SelectFileOrFolder

    • Oscar
    • 12. Juli 2013 um 16:21

    Startordner steht bereits auf meiner ToDo-Liste.
    Der Button zum anlegen eines neuen Verzeichnisses gibt es bereits (in der noch nicht veröffentlichten Version). Genauso wie eine Mehrfachauswahl bei den Dateien (Rückgabe ist jetzt ein Array).
    Option zum Ein-/ausblenden von Dateien könnte ich noch einbauen.

  • Programminstallation hängt am letzten Klick

    • Oscar
    • 9. Juli 2013 um 11:25

    [verschoben nach Hilfe & Unterstützung]

  • _SelectFileOrFolder

    • Oscar
    • 9. Juli 2013 um 11:24

    Es gibt eine neue Version (Post#1). Ich fand es besser, wenn zu den Dateien auch die wichtigsten Dateiinformationen angezeigt werden.

  • Innerhalb eine While-Schleife für die GUI etwas ausführen...

    • Oscar
    • 9. Juli 2013 um 08:52

    Dafür gibt es AdlibRegister oder Du musst einen Timer benutzen (TimerInit und TimerDiff).

  • RFC822 für RSS-Feed

    • Oscar
    • 9. Juli 2013 um 08:35

    Ich habe mal was gescriptet:

    [autoit]


    #include <Date.au3>

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

    $sDate = _DateToRFC822()
    ConsoleWrite($sDate & @CR)

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

    Func _DateToRFC822()
    Local $tLocalTime = _Date_Time_GetLocalTime(), $aLocalTime = _Date_Time_SystemTimeToArray($tLocalTime)
    Local $tSystemTime = _Date_Time_GetSystemTime(), $aSystemTime = _Date_Time_SystemTimeToArray($tSystemTime)
    Local $sRFC822Date = StringFormat('<pubDate>%s, %02d %s %4d %02d:%02d:%02d %+03d00</pubDate>', _DateDayOfWeek($aLocalTime[7] + 1, 1), $aLocalTime[1], _DateToMonth($aLocalTime[0], 1), $aLocalTime[2], $aLocalTime[3], $aLocalTime[4], $aLocalTime[5], $aLocalTime[3] - $aSystemTime[3])
    $tLocalTime = ''
    $tSystemTime = ''
    Return $sRFC822Date
    EndFunc

    [/autoit]
  • _SelectFileOrFolder

    • Oscar
    • 8. Juli 2013 um 17:51

    Hier wurde nach einer Auswahlbox gefragt, in der man ein Verzeichnis oder eine Datei auswählen kann.
    Ich habe mal so eine UDF erstellt (siehe Anhang). Beispiel ist auch vorhanden.

    Neu in dieser Version (09.07.2013):
    - Jetzt mit den wichtigsten Datei-Informationen (Datei-Icon/-Name/-Erweiterung/-Größe/-Attribute)

    Neu in dieser Version (16.07.2013):
    - Mehrfachauswahl bei Dateien möglich (per Option)
    - Nur Ordnerauswahl (per Option)
    - Man kann nun einen Startordner angeben. Dieser wird dann automatisch geöffnet/selektiert und ganz oben im Treeview angezeigt.
    - Position (Left/Top) sowie Größe (Width/Height) können nun angegeben werden (Standard = 800x600, zentriert).
    - Die Rückgabe ist nun ein Array (außer im Fehlerfall). $Array[0] beinhaltet die Anzahl der Rückgabewerte.

    Dateien

    _Example.au3 2,57 kB – 447 Downloads _SelectFileOrFolder.au3 24,55 kB – 463 Downloads
  • GUI(s) + Controls - Wie arbeitet ihr? Was ist performanter?

    • Oscar
    • 8. Juli 2013 um 12:46

    Ich habe es bisher immer so gemacht, dass ich mehrere GUIs erstellt habe und dann GUI-HIDE/SHOW. Wobei ich die MAIN-GUI eigentlich immer angezeigt lasse und diese nur deaktiviere. Die anderen GUIs waren dann meistens Eingabefenster oder um Einstellungen vorzunehmen. Bei mir waren das aber immer separate Fenster (zwar als Child, aber nicht im MAIN-GUI integriert).
    Wobei ich mir das Konzept von m-obi auch mal angesehen habe und es ganz gut finde. Das werde ich wohl auch mal ausprobieren... :thumbup:
    Von der Performance her sollte das Extra-GUI-Konzept schneller (beim wechseln) sein, als alle Controls in einer Schleife anzuzeigen/zu verstecken. Vor allem leidet aber auch die Lesbarkeit darunter, weil man die Controls in ein Array packen muss, um das vernünftigt handeln zu können. Ich bevorzuge es, den Controlvariablen passende/merkbare Namen zu geben.

  • ExitLoop auf Button

    • Oscar
    • 8. Juli 2013 um 12:32

    Naja, man muss mehr Funktionen schreiben, aber eigentlich ist der OnEventMode einfacher (IMHO). Vorrausgesetzt man hat erstmal verstanden, wie der Modus funktioniert.
    Wichtig ist nämlich, dass in den Funktionen, die per GUISetOnEvent oder GUICtrlSetOnEvent aufgerufen werden, möglichst kein Sleep oder eine Endlosschleife vorhanden ist.
    Solange wie man diese Funktionen nicht wieder verlässt, solange werden keine weiteren GUI-Events ausgewertet. Diese "Event-Funktionen" sollten also eine möglichst kurze Laufzeit aufweisen, um die Benutzeroberfläche bedienbar zu halten.

  • .txt datei von einem Webserver auslesen

    • Oscar
    • 7. Juli 2013 um 18:37

    Nun, in der Hilfe zu InetRead steht:

    Zitat

    Ein Binär-String wird zurückgegeben...

    und außerdem steht dort noch:

    Zitat

    Die zurückgegebenen Daten sind im binären Format. Die Funktion BinaryToString() kann benutzt werden, um die Daten in einen String umzuwandeln.

    Alle Klarheiten beseitigt? :D

  • ExitLoop auf Button

    • Oscar
    • 7. Juli 2013 um 18:24

    Im OnEventMode würde das Beispiel so aussehen:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('GUIOnEventMode', 1) ; OnEventMode für die GUI

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

    Global $Loop = False

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

    #region ### START Koda GUI section ### Form=
    $GUI = GUICreate("Test", 187, 146, 854, 446)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit') ; beim Klick auf das Schliessen-Symbol wird die Funktion '_Exit' aufgerufen
    $Text = GUICtrlCreateEdit("", 8, 8, 169, 81, BitOR($GUI_SS_DEFAULT_EDIT, $ES_CENTER))
    GUICtrlSetData(-1, "0")
    $Start = GUICtrlCreateButton("Start", 8, 112, 75, 25)
    GUICtrlSetOnEvent(-1, '_Start') ; beim Klick auf [Start] wird die Funktion '_Start' aufgerufen
    $Stop = GUICtrlCreateButton("Stop", 104, 112, 75, 25)
    GUICtrlSetOnEvent(-1, '_Stop') ; beim Klick auf [Stop] wird die Funktion '_Stop' aufgerufen
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While Sleep(10) ; Sleep(10) damit das Script nicht 100% Rechenlast benötigt
    If $Loop Then ;solange $loop=true, zahlen erhöhen
    Sleep(GUICtrlRead($Text))
    GUICtrlSetData($Text, GUICtrlRead($Text) + 1)
    EndIf
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Start()
    $Loop = True
    EndFunc ;==>_Start

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

    Func _Stop()
    $Loop = False
    EndFunc ;==>_Stop

    [/autoit]
  • ExitLoop auf Button

    • Oscar
    • 7. Juli 2013 um 08:32

    Andy: Deine Umsetzung ist auch nicht so ideal. Man sollte kein Sleep in die MsgLoop-Schleife packen. Das führt dazu, dass (wenn der Sleep-Wert zu groß ist) die Buttons gar nicht mehr abgefragt werden.
    Also entweder den OnEventMode benutzen (in der Endlosschleife dort ist ein Sleep ja sogar angebracht) oder beim MsgLoop-Modus einen Timer verwenden.

  • Variable in For Schleife mit Array definieren ?

    • Oscar
    • 1. Juli 2013 um 15:37

    So:

    [autoit]


    Global $arDB = StringSplit($DB, '|'), $aSuchenItem[UBound($arDB)]
    For $i = 0 To UBound($arDB) - 1
    $aSuchenItem[$i] = GUICtrlCreateTreeViewItem($arDB[$i], $SuchenItem)
    Next

    [/autoit]
  • File Renamer - Das Tool, was einem Ärger erspart [v2.0]

    • Oscar
    • 29. Juni 2013 um 09:02

    Achso ja, englisch soll Standard sein. Dann könnte man das auch so machen:

    Spoiler anzeigen
    [autoit]


    Func LoadInternationalStrings()
    Global _
    $str_0001 = "Browse...", _
    $str_0002 = "Count of start digits to trim", _
    $str_0003 = "Count of end digits to trim", _
    $str_0004 = "Find what", _
    $str_0005 = "Replace with", _
    $str_0006 = "Consider file extentions", _
    $str_0007 = "Open directory after renaming", _
    $str_0008 = "Start renaming", _
    $str_0009 = "Choose a direcory which contains the files that you want to rename.", _
    $str_0010 = "Renaming ", _
    $str_0011 = "", _
    $str_0012 = "Collecting files", _
    $str_0013 = "An error has occurred.", _
    $str_0014 = "Collecting files failed", _
    $str_0015 = "Rename sub-directories"
    Switch @OSLang
    Case "0407", "0807", "0c07", "1007", "1407"
    Global _
    $str_0001 = "Durchsuchen...", _
    $str_0002 = "Anzahl der am Anfang abzuschneidenden Zeichen", _
    $str_0003 = "Anzahl der am Ende abzuschneidenden Zeichen", _
    $str_0004 = "Suchen nach", _
    $str_0005 = "Ersetzen durch", _
    $str_0006 = "Dateierweiterungen mit einbeziehen", _
    $str_0007 = "Ordner nach dem umbenennen anzeigen", _
    $str_0008 = "Starte umbenennen", _
    $str_0009 = "Wählen sie einen Ordner aus, dessen Dateien sie umbenennen möchten.", _
    $str_0010 = "Benenne ", _
    $str_0011 = " um", _
    $str_0012 = "Sammle Dateien", _
    $str_0013 = "Ein Fehler ist aufgetreten.", _
    $str_0014 = "Das sammeln der Daten ist fehlgeschlagen.", _
    $str_0015 = "Benenne Unterordner um"
    Case Else
    MsgBox(48, "FileRenamer $FILERENAMER_VERSION$ - Error", "Your system language could not be detected or is not supported.@LF@" & _
    "Laguage has been set to English.@LF@" & _
    "@LF@" & _
    "MS Language code: @OSLang@")
    EndSwitch
    EndFunc ;==>LoadInternationalStrings

    [/autoit]

    Wobei Du vielleicht überlegen solltest, statt der 15 Variablen ($str...) lieber ein Array zu benutzen.

  • File Renamer - Das Tool, was einem Ärger erspart [v2.0]

    • Oscar
    • 28. Juni 2013 um 20:08

    Die Funktion "LoadInternationalStrings" könnte doch auch so aussehen:

    Spoiler anzeigen
    [autoit]

    Func LoadInternationalStrings()
    Local $strOSLang = ""
    Switch @OSLang
    Case "0409", "0809", "0c09", "1009", "1409", "1809", "1c09", "2009", "2409", "2809", "2c09", "3009", "3409"
    $strOSLang = "ENG"
    Global _
    $str_0001 = "Browse...", _
    $str_0002 = "Count of start digits to trim", _
    $str_0003 = "Count of end digits to trim", _
    $str_0004 = "Find what", _
    $str_0005 = "Replace with", _
    $str_0006 = "Consider file extentions", _
    $str_0007 = "Open directory after renaming", _
    $str_0008 = "Start renaming", _
    $str_0009 = "Choose a direcory which contains the files that you want to rename.", _
    $str_0010 = "Renaming ", _
    $str_0011 = "", _
    $str_0012 = "Collecting files", _
    $str_0013 = "An error has occurred.", _
    $str_0014 = "Collecting files failed", _
    $str_0015 = "Rename sub-directories"
    Case "0407", "0807", "0c07", "1007", "1407"
    $strOSLang = "GER"
    Global _
    $str_0001 = "Durchsuchen...", _
    $str_0002 = "Anzahl der am Anfang abzuschneidenden Zeichen", _
    $str_0003 = "Anzahl der am Ende abzuschneidenden Zeichen", _
    $str_0004 = "Suchen nach", _
    $str_0005 = "Ersetzen durch", _
    $str_0006 = "Dateierweiterungen mit einbeziehen", _
    $str_0007 = "Ordner nach dem umbenennen anzeigen", _
    $str_0008 = "Starte umbenennen", _
    $str_0009 = "Wählen sie einen Ordner aus, dessen Dateien sie umbenennen möchten.", _
    $str_0010 = "Benenne ", _
    $str_0011 = " um", _
    $str_0012 = "Sammle Dateien", _
    $str_0013 = "Ein Fehler ist aufgetreten.", _
    $str_0014 = "Das sammeln der Daten ist fehlgeschlagen.", _
    $str_0015 = "Benenne Unterordner um"
    Case Else
    $strOSLang = "ENG"
    MsgBox(48, "FileRenamer $FILERENAMER_VERSION$ - Error", "Your system language could not be detected or is not supported.@LF@" & _
    "Laguage has been set to English.@LF@" & _
    "@LF@" & _
    "MS Language code: @OSLang@")
    EndSwitch
    EndFunc ;==>LoadInternationalStrings

    [/autoit]

    BTW: In SciTE gibt es das "Tidy AutoIt Source"-Tool (CTRL+T). Damit kannst Du den Quellcode sauber formatieren/einrücken lassen.

    Nochwas in der Funktion "SelectFolder" solltest Du nicht auf @error testen, sondern mit "FileExists":

    [autoit]


    Local $strDirecory = FileSelectFolder("$str_0009$", "")

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

    If FileExists($strDirecory) Then...

    [/autoit]


    Das hat den Vorteil, dass Du damit auch "falsche" Pfade ("Desktop", "Heimnetzgruppe", "Netzwerk", etc.) abfangen kannst.

  • File Renamer - Das Tool, was einem Ärger erspart [v2.0]

    • Oscar
    • 28. Juni 2013 um 17:11

    Mal ein paar Anmerkungen...

    In der Funktion "LoadInternationalStrings":
    Switch-Case unterstützt die Mehrfachauswahl mittels Kommata. Du musst nicht für jeden Eintrag einen Case-Zweig schreiben. Das geht auch so:

    [autoit]

    Case "0409", "0809", "0c09", "1009", "1409", "1809", "1c09", "2009", "2409", "2809", "2c09", "3009", "3409"

    [/autoit]


    das Gleiche dann für die deutsche Sprache. Für alle anderen Sprachen (außer Deutsch und Englisch) kannst Du "Case Else" benutzen.
    Die dann folgenden If...Then Anweisungen kannst Du mit in die Case-Anweisungen schreiben.

    In der Funktion "Rename":
    Warum benutzt Du "_RunDOS( 'REN..."? Das geht doch auch direkt mit AutoIt ("FileMove"). Das würde dann auch das FileGetShortName einsparen.
    Du könntest das Programm auch noch erweitern, indem es die Dateien auch rekursiv (inkl. Unterverzeichnisse) umbenennt.

    Ungewöhnlich ist das benutzen von "ExpandVarStrings". Ich sehe darin nicht so den Vorteil. Man kann zwar die Stringverkettung etwas einfacher halten, aber es erschwert IMHO das lesen des Scripts. Ich bevorzuge für die Anzeige "StringFormat".

  • Autoit SysInfo Clock v0.9.9.7 build 2014-08-28 beta

    • Oscar
    • 28. Juni 2013 um 16:50

    Geht bei mir (AMD Phenom II X4 940 Processor, Win7 64 Bit) auch, ohne Probleme.

  • Statusbar-Icon aus @scriptfullpath?

    • Oscar
    • 26. Juni 2013 um 17:03

    Ich weiß nicht mehr von wem die Funktion "__WinAPI_ShellExtractIcons" stammt, aber so geht es jedenfalls (bei compilierten Script):

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <WinAPI.au3>

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

    $hgui = GUICreate("test", 500, 500)
    $hStatus = _GUICtrlStatusBar_Create($hgui)
    Global $aParts[4] = [75, 150, 300, 400]
    _GUICtrlStatusBar_SetParts($hStatus, $aParts)
    $hIcon = __WinAPI_ShellExtractIcons(@ScriptFullPath, 0, 24, 24)
    _GUICtrlStatusBar_SetIcon($hStatus, 0, $hIcon)

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

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _WinAPI_DestroyIcon($hIcon)
    Exit
    EndSwitch
    WEnd

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

    Func __WinAPI_ShellExtractIcons($sIcon, $iIndex, $iWidth, $iHeight)
    Local $Ret = DllCall('shell32.dll', 'int', 'SHExtractIconsW', 'wstr', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr*', 0, 'ptr*', 0, 'int', 1, 'int', 0)
    If (@error) Or ($Ret[0] = 0) Or ($Ret[5] = Ptr(0)) Then Return SetError(1, 0, 0)
    Return $Ret[5]
    EndFunc ;==>__WinAPI_ShellExtractIcons

    [/autoit]
  • Simple Verständnisfrage (Client-Server TCP)

    • Oscar
    • 25. Juni 2013 um 18:58

    Im Beispielscript zu "TCPRecv" gibt es die Funktion "SocketToIP", die genau das macht.

  • Überprüfen ob bei einer ListView mit selektiertem Item eine Taste gedrückt wurde

    • Oscar
    • 25. Juni 2013 um 17:32
    Zitat von CrazyAutoIT

    Okay, hab das jetzt mal in Kombination mit einer kleinen Funktion versucht:

    [autoit]


    Func DeleteListViewElement ($ListView)
    Dim $SelectedItemsArray = _GUICtrlListView_GetSelectedIndices($ListView, True)
    If $SelectedItemsArray[0] > 0 Then
    For $counter = 0 To UBound($SelectedItemsArray) - 1
    _GUICtrlListView_DeleteItem($ListView, $SelectedItemsArray[$counter])
    Next
    EndIf
    EndFunc

    [/autoit]
    Alles anzeigen

    Diese Funktion kannst Du extrem kürzen, wenn Du _GUICtrlListView_DeleteItemsSelected verwendest. :rolleyes:

  • Wert wird nicht in Variable gespeichert?

    • Oscar
    • 24. Juni 2013 um 19:55

    Und das Ganze hättest Du auch zwei Stunden eher haben können, wenn Du gleich mehr gepostet hättest. :D
    Bitte noch das Thema auf "gelöst" setzen (1. Beitrag bearbeiten).

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™