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

Beiträge von Andy

  • Kontextmenüeintrag

    • Andy
    • 21. Januar 2010 um 23:40

    Hi,
    du hast die Einträge im Kontextmenü unter "Datei Öffnen" gemacht. Da dieser komplette Eintrag im Kontextmenü fehlt wenn du unterschiedliche Dateiformate auswählst, solltest du deine eigenen Einträge in einen anderen Bereich schreiben, wie es auch antivir macht.....

  • bestimmte dateien aller unterordner anzeigen lassen

    • Andy
    • 21. Januar 2010 um 23:27

    4x die gesuchte Funktion, teilweise mit speziellen "Goodies", such dir eine passende aus^^

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $pfad = @WindowsDir
    ;$pfad="j:\desktop"

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

    $begin1 = TimerInit()
    $dateien1 = _ordner_rekursiv($pfad, 1)
    $dif1 = TimerDiff($begin1)
    ConsoleWrite("tweaky" & @TAB & Round($dif1 / 1000, 2) & " Sekunden" & @TAB & UBound($dateien1) - 1 & @CRLF)

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

    $begin2 = TimerInit()
    $dateien2 = _GetFilesFolder_Rekursiv($pfad, '*', 0)
    $dif2 = TimerDiff($begin2)
    ConsoleWrite("BugFix" & @TAB & Round($dif2 / 1000, 2) & " Sekunden" & @TAB & UBound($dateien2) - 1 & @CRLF)

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

    $begin3 = TimerInit()
    $dateien3 = _RecursiveFileListToArray($pfad, '', 1)
    $dif3 = TimerDiff($begin3)
    ConsoleWrite("Oscar" & @TAB & Round($dif3 / 1000, 2) & " Sekunden" & @TAB & UBound($dateien3) - 1 & @CRLF)

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

    $begin3 = TimerInit()
    $dateien3 = _FileListToArrayEx($pfad, '*.*', 1)
    $dif3 = TimerDiff($begin3)
    ConsoleWrite("amiforum" & @TAB & Round($dif3 / 1000, 2) & " Sekunden" & @TAB & UBound($dateien3) - 1 & @CRLF)

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    ; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
    ; einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(0, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc

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

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

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

    ;*******************************************************************************************************************************************************************************************************************************************
    ; Funktion _ordner_rekursiv($udf_quellordner[, $udf_Ordner_Dateien[, $udf_unterordner=False[, $udf_spalte_datum [, $udf_dateityp = "*"[, $udf_auslassen = ""]]]]])
    ; Beschreibung ermittelt alle Dateien/Ordner des angegebenen Verzeichnisses
    ; Parameter $udf_quellordner: der zu durchsuchende Ordner (Angabe: einzelner Ordner als String oder mehrere Ordner im Array beginnend bei 1)
    ; optional $udf_Ordner_Dateien: 1 = Dateien auflisten (Standard) 2 = Ordner auflisten
    ; optional $udf_unterordner: True = Unterordner nicht miteinbeziehen (Standard) False = Unterordner nicht miteinbeziehen
    ; optional $udf_spalte_datum: True = Änderungsdatum der Datei ermitteln False = Änderungsdatum der Datei nicht ermitteln (Standard)
    ; optional $udf_dateityp: einzuschließende Dateitypen (mehrere Typen durch | trennen) "*" >>> alle (Standard)
    ; optional $udf_auslassen: Wörter, die im Pfad oder Dateinamen vorkommen, auslassen (mehrere durch | trennen) "" <<< Standard
    ; Rückgabewert Erfolg: Gibt ein Array mit 3 Spalten zurück (Dateiname, Dateipfad, Änderungsdatum)
    ; Fehler: 0 setzt @error
    ; @error = 1 mindestens 1 Pfad existiert nicht
    ; Autor Tweaky (http://www.autoit.de)
    ;*******************************************************************************************************************************************************************************************************************************************

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

    ;********************************************
    ; Ordner rekursiv (Hauptfunktion) *
    ;********************************************

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

    Func _ordner_rekursiv($udf_quellordner, $udf_Ordner_Dateien = 1, $udf_unterordner = True, $udf_spalte_datum = False, $udf_dateityp = "*", $udf_auslassen = "")
    Local $verzeichnisse_alle[1] ;Array für die Ordner
    Local $array_alles[1000000][3] ;Array für die Ordner und Dateien
    Local $szDrive, $szDir, $szFName, $szExt

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

    If Not IsArray($udf_quellordner) Then
    $udf_quellordner_tmp = $udf_quellordner
    Dim $udf_quellordner[2]
    $udf_quellordner[1] = $udf_quellordner_tmp
    EndIf

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

    For $i = 1 To UBound($udf_quellordner) - 1
    If Not FileExists($udf_quellordner[$i]) Or Not StringInStr($udf_quellordner[$i], ":") Then
    SetError(1)
    Return 0
    EndIf

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

    If StringRight($udf_quellordner[$i], 1) <> "\" Then $udf_quellordner[$i] &= "\"

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

    $udf_quellordner_einzeln = $udf_quellordner[$i]

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

    If $udf_unterordner = True Then ;mit Unterordner
    _ordner_rekursiv_mit_unterordner($udf_quellordner_einzeln, $verzeichnisse_alle)
    _ArrayAdd($verzeichnisse_alle, $udf_quellordner_einzeln)
    Else ;ohne Unterordner
    $verzeichnisse_alle = $udf_quellordner
    EndIf
    Next

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

    If IsArray($verzeichnisse_alle) Then $verzeichnisse_alle[0] = UBound($verzeichnisse_alle) - 1 ;In die erste Zeile die Anzahl der Dateien schreiben

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

    If $udf_Ordner_Dateien = 1 Then ;Dateien auflisten
    $zaehler_fortlaufend = 0

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

    If Not IsArray($verzeichnisse_alle) Then
    $verzeichnisse_alle_tmp = $verzeichnisse_alle
    Dim $verzeichnisse_alle[2]
    $verzeichnisse_alle[1] = $verzeichnisse_alle_tmp
    EndIf

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

    For $u = 1 To UBound($verzeichnisse_alle) - 1
    $array_alle_dateien = _FileListToArray($verzeichnisse_alle[$u], "*", 1)

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

    For $k = 1 To UBound($array_alle_dateien) - 1
    $kriterien_ok = 0

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

    If $udf_dateityp = "*" Then ;Dateityp nicht angegeben oder alle Dateien
    $kriterien_ok = 1

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

    ElseIf StringInStr($udf_dateityp, "|") Then ;Dateitypen angegeben
    $dateityp_split = StringSplit($udf_dateityp, "|")
    $udf_dateiendung_array = _PathSplit($array_alle_dateien[$k], $szDrive, $szDir, $szFName, $szExt)
    $udf_dateiendung = $udf_dateiendung_array[4]
    For $i = 1 To UBound($dateityp_split) - 1
    If "." & $dateityp_split[$i] = StringRight($array_alle_dateien[$k], StringLen($udf_dateiendung)) Then
    $kriterien_ok = 1
    ExitLoop
    EndIf
    Next
    EndIf

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

    If $udf_auslassen <> "" Then ;Wörter in dem Pfad und Datei auslassen
    $auslassen_split = StringSplit($udf_auslassen, "|")
    For $i = 1 To UBound($auslassen_split) - 1
    If StringInStr($array_alle_dateien[$k], $auslassen_split[$i]) Or StringInStr($verzeichnisse_alle[$u], $auslassen_split[$i]) Then
    $kriterien_ok = 0
    ExitLoop
    EndIf
    Next
    EndIf

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

    ;Papierkorb und System Volume Information wird nicht mitkopiert
    If StringInStr($array_alle_dateien[$k], 'RECYCLER') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLER') _
    Or StringInStr($array_alle_dateien[$k], 'RECYCLED') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLED') _
    Or StringInStr($array_alle_dateien[$k], 'System Volume Information') Or StringInStr($verzeichnisse_alle[$u], 'System Volume Information') _
    Or StringInStr($array_alle_dateien[$k], '$RECYCLE.BIN') Or StringInStr($verzeichnisse_alle[$u], '$RECYCLE.BIN') Then
    $kriterien_ok = 0
    ExitLoop
    EndIf

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

    ;wenn der Dateityp passt und die Datei bzw. der Ordner nicht ausgelassen werden soll
    If $kriterien_ok = 1 Then
    $zaehler_fortlaufend += 1
    $array_alles[$zaehler_fortlaufend][0] = $verzeichnisse_alle[$u]
    $array_alles[$zaehler_fortlaufend][1] = $array_alle_dateien[$k]

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

    If $udf_spalte_datum = True Then
    $time2 = FileGetTime($verzeichnisse_alle[$u] & "\" & $array_alle_dateien[$k], 0) ;"Datum geändert" auslesen
    $array_alles[$zaehler_fortlaufend][2] = $time2[0] & $time2[1] & $time2[2] & $time2[3] & $time2[4] & $time2[5]
    EndIf

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

    EndIf

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

    Next
    Next

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

    Else ;Ordner auflisten
    For $i = 1 To UBound($verzeichnisse_alle) - 1
    $array_alles[$i][0] = $verzeichnisse_alle[$i]
    $zaehler_fortlaufend = UBound($verzeichnisse_alle) - 1
    Next
    EndIf

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

    ;Leere Zeilen am Ende löschen
    ReDim $array_alles[$zaehler_fortlaufend + 1][3]

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

    ;In die erste Zeile die Anzahl der Dateien schreiben
    If IsArray($array_alles) Then $array_alles[0][0] = UBound($array_alles) - 1

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

    $verzeichnisse_alle = 0

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

    Return $array_alles
    EndFunc ;==>_ordner_rekursiv

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

    ;**************************************
    ; Unterordner durchsuchen *
    ;**************************************

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

    Func _ordner_rekursiv_mit_unterordner($udf_quellordner, ByRef $verzeichnisse_alle)
    $verzeichnisse = _FileListToArray($udf_quellordner, "*", 2)

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

    For $i = 1 To UBound($verzeichnisse) - 1
    $verzeichnisse[$i] = $udf_quellordner & $verzeichnisse[$i] & "\"
    _ArrayAdd($verzeichnisse_alle, $verzeichnisse[$i])
    _ordner_rekursiv_mit_unterordner($verzeichnisse[$i], $verzeichnisse_alle)
    Next
    EndFunc ;==>_ordner_rekursiv_mit_unterordner

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

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

    ;~ $sSearchPath = 'h:' ; Pfad der durchsucht werden soll (rekursiv)
    ;~ $sSearchPattern = '*.zip' ; RegExp-Pattern
    ;~ $sSavePath = @ScriptDir & '\Doppelte.txt' ; Datei (inkl. Pfad), in der die doppelten gespeichert werden

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

    ;~ ToolTip('Bitte warten! Verzeichnis wird eingelesen!', @DesktopWidth/2-100, 80, 'Double-Finder', 1, 7)
    ;~ Global $aFiles = _FileListToArrayEx($sSearchPath, $sSearchPattern)
    ;~ Global $sExists = '|', $sFilename = '', $sDouble = '', $iPos = 0
    ;~ ToolTip($aFiles[0] & ' Dateien gefunden' & @CRLF & 'Bitte warten! Doppelte werden gesucht!', @DesktopWidth/2-100, 100, 'Double-Finder', 1, 7)
    ;~ For $i = 1 To $aFiles[0]
    ;~ $sFilename = StringRegExpReplace($aFiles[$i], '.+\\(.+)', '$1')
    ;~ $iPos = StringInStr($sExists, '\' & $sFilename)
    ;~ If $iPos Then
    ;~ $iStart = StringInStr($sExists, '|', 0, -1, $iPos)
    ;~ $iEnd = StringInStr($sExists, '|', 0, 1, $iPos)
    ;~ $sDouble &= StringMid($sExists, $iStart, $iEnd - $iStart) & '|'
    ;~ $sDouble &= $aFiles[$i] & '|'
    ;~ EndIf
    ;~ $sExists &= $aFiles[$i] & '|'
    ;~ Next
    ;~ $hFile = FileOpen($sSavePath, 2)
    ;~ FileWrite($hFile, StringReplace($sDouble, '|', @CRLF))
    ;~ FileClose($hFile)
    ;~ ShellExecute('notepad.exe', $sSavePath)
    ;~ ToolTip('Fertig! Datei erstellt!', @DesktopWidth/2-100, 120, 'Double-Finder', 1, 7)
    ;~ Sleep(3000)
    ;~ Exit

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

    Func _FileListToArrayEx($s_path, $s_mask, $i_flag = 0, $s_exclude = -1, $f_recurse = True, $f_full_path = True)

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

    If FileExists($s_path) = 0 Then Return SetError(1, 1, 0)

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

    ; Strip trailing backslash, and add one after to make sure there's only one
    $s_path = StringRegExpReplace($s_path, "[\\/]+\z", "") & "\"

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

    ; Set all defaults
    If $s_mask = -1 Or $s_mask = Default Then $s_mask = "*.*"
    If $i_flag = -1 Or $i_flag = Default Then $i_flag = 0
    If $s_exclude = -1 Or $s_exclude = Default Then $s_exclude = ""

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

    ; Look for bad chars
    If StringRegExp($s_mask, "[\\/:><\|]") Or StringRegExp($s_exclude, "[\\/:><\|]") Then
    Return SetError(2, 2, 0)
    EndIf

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

    ; Strip leading spaces between semi colon delimiter
    $s_mask = StringRegExpReplace($s_mask, "\s*;\s*", ";")
    If $s_exclude Then $s_exclude = StringRegExpReplace($s_exclude, "\s*;\s*", ";")

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

    ; Confirm mask has something in it
    If StringStripWS($s_mask, 8) = "" Then Return SetError(2, 2, 0)
    If $i_flag < 0 Or $i_flag > 2 Then Return SetError(3, 3, 0)

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

    ; Validate and create path + mask params
    Local $a_split = StringSplit($s_mask, ";"), $s_hold_split = ""
    For $i = 1 To $a_split[0]
    If StringStripWS($a_split[$i], 8) = "" Then ContinueLoop
    If StringRegExp($a_split[$i], "^\..*?\..*?\z") Then
    $a_split[$i] &= "*" & $a_split[$i]
    EndIf
    $s_hold_split &= '"' & $s_path & $a_split[$i] & '" '
    Next
    $s_hold_split = StringTrimRight($s_hold_split, 1)
    If $s_hold_split = "" Then $s_hold_split = '"' & $s_path & '*.*"'

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

    Local $i_pid, $s_stdout, $s_hold_out, $s_dir_file_only = "", $s_recurse = "/s "
    If $i_flag = 1 Then $s_dir_file_only = ":-d"
    If $i_flag = 2 Then $s_dir_file_only = ":d"
    If Not $f_recurse Then $s_recurse = ""

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

    Local $i_buffer, $t_input, $t_output, $s_hold_binary

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

    $i_pid = Run(@ComSpec & " /u /c dir /b " & _
    $s_recurse & "/a" & $s_dir_file_only & " " & _
    $s_hold_split, "", @SW_HIDE, 4 + 2)

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

    ; Collect data from std i/o stream
    While 1
    $s_stdout = StdoutRead($i_pid, False, True)
    If @error Then ExitLoop
    $i_buffer = BinaryLen($s_stdout)
    $t_input = DllStructCreate("byte[" & $i_buffer & "]")
    $t_output = DllStructCreate("char[" & $i_buffer & "]")

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

    DllStructSetData($t_input, 1, $s_stdout)
    DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
    "int", 0, "int", 0, "ptr", DllStructGetPtr($t_input), _
    "int", $i_buffer / 2, "ptr", DllStructGetPtr($t_output), _
    "int", $i_buffer, "int", 0, "int", 0)

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

    $s_hold_out &= StringRegExpReplace(DllStructGetData($t_output, 1), "(?i)(?:\A|\v)(?:(0+\v+)|(0+))|(\v*0+\z)", "")
    $t_input = 0
    $t_output = 0
    WEnd

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

    ; Replace any extending verticle spaces from the end of the string
    $s_hold_out = StringRegExpReplace($s_hold_out, "\v+\z", "")
    If Not $s_hold_out Then Return SetError(5, 5, 0)

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

    ; Parse data and find matches based on flags
    Local $a_fsplit = StringSplit(StringStripCR($s_hold_out), @LF), $s_hold_ret
    $s_hold_out = ""

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

    If $s_exclude Then $s_exclude = StringReplace(StringReplace($s_exclude, "*", ".*?"), ";", "|")
    Local $i_path_len = BinaryLen($s_path)

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

    For $i = 1 To $a_fsplit[0]
    If $s_exclude And StringRegExp(StringRegExpReplace( _
    $a_fsplit[$i], "(.*?[\\/]+)*(.*?\z)", "\2"), "(?i)" & $s_exclude) Then ContinueLoop
    If StringRegExp($a_fsplit[$i], "^\w:[\\/]+") = 0 Then $a_fsplit[$i] = $s_path & $a_fsplit[$i]
    If $f_full_path Then
    $s_hold_ret &= $a_fsplit[$i] & Chr(1)
    Else
    $s_hold_ret &= StringTrimLeft($a_fsplit[$i], $i_path_len) & Chr(1)
    EndIf
    Next

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

    $s_hold_ret = StringTrimRight($s_hold_ret, 1)
    If $s_hold_ret = "" Then Return SetError(6, 6, 0)

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

    Return StringSplit($s_hold_ret, Chr(1))
    EndFunc

    [/autoit]
  • Stoppuhr für Fußball

    • Andy
    • 21. Januar 2010 um 18:35

    Hab auch mal was geschnitzt^^
    Bei jedem An/Abpfiff der Halbzeit den Button drücken, bis zum Elfmeterschiessen 8o
    Die aktuelle Spielminute wird in der Titelleiste angezeigt, man kann den Rahmen zusammenschieben, bis nur noch die Spielminute angezeigt wird.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Gui = GUICreate("Spielminute", 400, 80, 190, 120,$WS_SIZEBOX+$WS_MINIMIZEBOX)
    $Button = GUICtrlCreateButton("Anpfiff 1. Halbzeit", 10, 10, 130, 30)
    GUICtrlSetResizing($button, 544 + 2 + 256)
    $label = GUICtrlCreateLabel("", 150, 15, 250, 20)
    GUICtrlSetResizing($label, 544 + 2 + 256)
    GUISetState(@SW_SHOW)

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

    Global $pfiff = 0, $t, $HZ = 1, $p = "Anpfiff", $gesamtzeit = 1 , $verlaengerung=""
    ;adlibregister("_spielzeit",1000) ;jede sekunde die aktuelle spielzeit anzeigen1

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    _pfiff()
    GUICtrlSetData($Button, $p & $HZ & ". Halbzeit"&$verlaengerung)
    EndSwitch
    WEnd

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

    Func _pfiff()
    $pfiff += 1 ;1. Pfiff=Anpfiff 1. HZ, 2. Pfiff=Ende 1. HZ 3.Pfiff=anpfiff 2.HZ....bis zum elfmeterschiessen
    $HZ = Int(($pfiff + 2) / 2) ;Halbzeit
    if $HZ>2 then $verlaengerung=" (VL)" ;nach der 2. Halbzeit kommt die Verlängerung
    If $HZ = 5 Then Exit ;nach der 2. Verlängerung ist Schluss....
    If Mod($pfiff, 2) Then ;nur beim anpfiff der Halbzeit den Timer starten
    $t = TimerInit() ;beim 1. 3. und 5. Pfiff timer starten
    $p = "Abpfiff " ;Button beschriften
    AdlibRegister("_spielzeit", 1000) ;jede sekunde die aktuelle spielzeit anzeigen1
    Else
    $gesamtzeit += Int((TimerDiff($t) / 1000) / 60) ;gesamte spielzeit in minuten
    $p = "Anpfiff "
    AdlibUnRegister("_spielzeit") ;zeit anhalten
    EndIf
    EndFunc ;==>_pfiff

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

    Func _spielzeit()
    GUICtrlSetData($label, "Spielzeit: " & $gesamtzeit + Int((TimerDiff($t) / 1000) / 60) & " Minuten " & Int((TimerDiff($t) / 1000)) & " Sekunden der Halbzeit")
    WinSetTitle($Gui, "", $gesamtzeit + Int((TimerDiff($t) / 1000) / 60) & ". laufende Spielminute"&$verlaengerung)
    EndFunc ;==>_spielzeit

    [/autoit]
  • BitXOR

    • Andy
    • 21. Januar 2010 um 16:07

    :thumbup: XOR-GATTER

  • Screenshot von einem bestimmten Fenster

    • Andy
    • 21. Januar 2010 um 16:05

    Um das ganze zu beschleunigen, würde ich dazu raten, die Animation beim Fenstervergrößern/verkleinern auszustellen

    Zitat

    Animation der Fenster beim Minimieren/Maximieren ausstellen

    Wenn Sie die Größe eines Fensters einer Anwendung minimieren oder maximieren, wird dieser Vorgang per Defaulteinstellung durch eine kleine Animation unnötig verzögert. Sie sehen, wie das Fenster sich vergrößert oder verkleinert. Durch Deaktivierung der Animationsfunktion wird unter HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics der Schlüssel MinAnimate von 1 auf 0 umgestellt. Die Auswirkung stellen Sie aber eventuell wie auch bei einigen anderen Registrykey-Änderungen erst nach der nächsten Anmeldung oder sogar erst nach dem nächsten Neustart fest. Anwendungsfenster werden dann ohne jede Verzögerung minimiert oder maximiert.

    Spart sicherlich einiges an Zeit...

  • Tutorial: Wie man Script-Fehler erfolgreich sucht/findet bzw. richtig debuggt

    • Andy
    • 21. Januar 2010 um 14:52
    Zitat

    Dann ist es aber meistens schon kompiliert und der Interpreter wirft etwas aus wie "Fehler in Zeile soundso".

    soweit ich weiß, gibt der Interpreter bei einem compilierten Programm garkeine bzw -1 als fehlerhafte Zeile aus.

    /EDIT/ in der Version 3.3.4.0 werden mir nicht nachvollziehbare Zahlen angezeigt an Stelle der Zeilennummer.

    Das nützt dir somit auch nichts. Wenn du den Quellcode hast, dann kannst du auch (SciTe vorausgesetzt) mit CTRL+J direkt in die Funktionen der includierten Dateien hineinspringen, falls dort ein Fehler auftritt.

    Weiterhin kann ich nur immer wieder dringend raten, Fehler im Compilat erst garnicht erst entstehen zu lassen sondern (und das ist so gut wie bei ALLEN AutoIt-Funktionen so) den @error-code abzufragen. Bei Objekten gibts einen Errorhandler uswusf.
    Es gibt auch die Möglichkeit, im Code eine "sinnvolle" Ausgabe im Fehlerfall bei einem compilierten Script zu erzwingen. Beispielsweise: "Fehler im Modul XYZ" statt "Error in Line -1" , aber da kann man gleich auf @error testen.
    Nach der Funktion muss ich mal schauen...

    [autoit]

    OnAutoItExitRegister()

    [/autoit]

    Damit könnte man die aktuell verwendete Funktion ausgeben, aber wie gesagt, genauso aufwendig wie die @error-Abfrage.

  • Form mit 120 Bildern

    • Andy
    • 19. Januar 2010 um 12:57

    Hab in meiner oberen Antwort das Beispiel mal vereinfacht...
    HIER gab es eine ähnliche Anfrage

    Generell KANN man das auch mit CASE abfragen machen...dann sollte man aber

    [autoit]

    $msg=guigetmsg(1)

    [/autoit]

    verwenden, man beachte den Parameter und lese die Hilfe^^

    /EDIT/ habs mal verdeutlicht^^

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ;Opt('GUIOnEventMode', 1)
    Dim $Blg[19]
    dim $b[19]
    $gui=guicreate("",300,500)

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

    For $k = 0 to 18 Step + 1
    $Blg[$k] = GUICtrlCreateButton($k, 40, 40 + $k * 14, 129, 15, $WS_GROUP)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msg[0] = ' & $Blg[$k] & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    GUICtrlSetOnEvent(-1, "_do")
    GuiCtrlSetState(-1,$GUI_ONTOP)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    Next

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

    guisetstate()

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

    do
    $msg=guigetmsg(1)
    switch $msg[0]

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

    case $Blg[0] to $Blg[18] ;alle buttons
    _do()
    endswitch

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

    until 0

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

    func _do()
    msgbox (0,"code: "&$msg[0],"Button Nr: "&$msg[0]-3)
    endfunc

    [/autoit]
  • Form mit 120 Bildern

    • Andy
    • 19. Januar 2010 um 12:48

    Hallo,
    mal ein Beispiel wie man so etwas abfragt...

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt('GUIOnEventMode', 1)
    Dim $Blg[19]
    dim $b[19]
    $gui=guicreate("",300,500)

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

    For $k = 0 to 18 Step + 1
    $Blg[$k] = GUICtrlCreateButton($k, 40, 40 + $k * 14, 129, 15, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_do")
    GuiCtrlSetState(-1,$GUI_ONTOP)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    Next

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

    guisetstate()

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

    do
    until 0

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

    func _do()
    msgbox (0,@GUI_CtrlId,"button nr. "&@GUI_CtrlId-$blg[0])
    endfunc

    [/autoit]

    /EDIT/ Beispiel vereinfacht

  • Oscar hat Geburtstag.

    • Andy
    • 18. Januar 2010 um 16:38

    Auch von mir natürlich einen
    glücklichen Herzwunsch zum Geburtstag!

  • Google Suchergebniss auslesen bzw. speichern

    • Andy
    • 18. Januar 2010 um 08:30

    Hi,

    Zitat

    mal hier nach Ergo von Andy

    uuhhh^^, kein guter Hinweis, das erinnert mich daran einen Fix einzubauen, damit ErGo auch mit iGoogle bedienbar wird....zzt funktioniert es nur ohne das personalisierte Google, aber das sollte kein Problem werden.

  • HotkeySet mit "if"...

    • Andy
    • 15. Januar 2010 um 16:31

    Hi,
    hab mal etwas in der Mottenkiste gekramt und ein Script gefunden, um die erweiterten Tastencodes meiner Tastatur herauszubekommen. Das Script wurde bissl erweitert, vielleicht ist was brauchbares dabei...

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    $dll = DllOpen("user32.dll")

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

    $gui = GUICreate('gedrückte Tasten')
    ;GUICtrlCreateLabel("Bitte beliebige Tastenkombinationen drücken oder"&@crlf & @CRLF &"rechteCTRL+AltGR+# um zu beenden",10,10)
    GUISetState()

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

    Do
    $all_pressed_keys = _tasten() ;alle tastencodes, die gleichzeitig gedrückt sind
    If $all_pressed_keys = "" Then $all_pressed_keys = "keine"
    WinSetTitle($gui, "", 'gedrückte Tasten: ' & $all_pressed_keys); tastencodes im fenstertitel
    Until guigetmsg()=-3 or _pressedkeys("A3 A5 BF", $all_pressed_keys) ;wenn in irgendeiner Tastenkombination rechtectrl+altGR+# gedrückt wird, dann ende
    dllclose($dll)

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

    Func _tasten() ;alle gleichzeitig gedrückten Tasten werden mit ihren hexcodes zurückgegeben
    $tastencode = ""
    For $i = 1 To 256
    If _IsPressed(Hex($i), $dll) = 1 Then
    $tastencode &= Hex($i, 2) & " "
    EndIf
    Next
    Return $tastencode
    EndFunc ;==>_tasten

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

    Func _pressedkeys($keys, ByRef $all_pressed_keys) ;$keys ist der string der übergebenen Hexdaten
    $key = StringSplit($keys, " ", 3) ;tastencodes in ein array
    If @error Then Return 0
    $anzahl = 0
    For $i = 0 To UBound($key) - 1 ; alle
    If StringInStr($all_pressed_keys, $key[$i], 1) Then $anzahl += 1 ;wenn key in all_pressed_keys enthalten ist, anzahl erhöhen
    Next
    If $anzahl = UBound($key) Then Return 1 ;alle tasten in $keys wurden betätigt
    Return 0
    EndFunc ;==>_pressedkeys

    [/autoit]

    eine Frage dazu habe ich noch, wieso wird jeder Tastendruck mit einem Sound von Windows (XP) quittiert, wenn die Zeile mit dem Guictrlcreatelabel() aktiv ist?

  • Daten abspeichern!

    • Andy
    • 15. Januar 2010 um 14:42

    Hi,

    Zitat

    in welchem Format das abgespeichert wird,

    SQLite ist eine Datenbank. Abgesehen davon, daß du die entsprechende dll im Zugriff haben musst, ist nicht gesagt, daß du mit einer Datenbank besser oder schneller an deine Arraydaten kommst als beim Lesen aus einer Textdatei. Wenn natürlich Abhängigkeiten der Daten deiner Arrays untereinander bestehen und du diese Abhängigkeiten in deinem Script abfragen möchtest, dann ist eine Datenbank klasse!

    Aber nur um Arrays beim Start eines Scripts zu befüllen würde ich persönlich keine Datenbank implementieren. Das geht mit einer beliebigen Datei (txt, html, trw, kft, hzx....) genauso.

  • Neuer PC (gelöst)

    • Andy
    • 15. Januar 2010 um 11:48

    Hallo Alina,

    Zitat

    Habe die Nacht gelesen, das ich dann im VM sowohl Vista-Ultimate als auch das gewünschte Windows-7 installieren kann.

    Du kannst in EINER VM beliebig viele BS installieren! Stell dir die VM einfach als einen "Universalcomputer" vor, den du beliebig mit RAM und Festplatten ausstatten kannst. Du könntest beispielsweise 3x Vista in verschiedenen Konfigurationen, 4x Win7 und noch 22 Linuxversionen installieren. Allerdings kannst du pro VM nur eines der ausgewählten Betriebssysteme starten.

    Mit reichlich (realem) Speicher und Festplatten ausgestattet hindert dich aber niemand daran, mehrere VM´s zu installieren und diese mit verschiedenen BS GLEICHZEITIG auf deinem Rechner laufen zu lassen. Da lohnt sich dann auch ein Quadcore/Multicore-Prozessor.
    Und bezüglich Geschwindigkeit war ich auch bei Win7 in der VirtualBox sehr positiv überrascht.

  • Neuer PC (gelöst)

    • Andy
    • 13. Januar 2010 um 17:18

    Hallo Alina,
    mit der Info, daß dein "alter" PC erst ein Jahr alt ist, hättest du auch früher rausrücken können :D
    Wenn du nicht auf den "Grafikschnickschnack" bei WIN7 angewiesen bist (es gibt Leute, die sich dieses BS nur deswegen kaufen!), dann würde ich den einfachsten/schnellsten Weg nehmen und WIN7 in einer Virtuellen Maschine laufen lassen. Sozusagen ein PC im PC. Das habe ich zzt. auch so. Von der Geschwindigkeit merke ich keine Nachteile, der Vorteil ist, daß man mit einem Tastendruck wieder in sein HOST-BS wechseln und auch simpel Daten zwischen diesen beiden BS verschieben/austauschen kann. Ansonsten muß man, wenn die BS auf unterschiedlichen Partitionen laufen, neu Booten und für Dateitransfers die Infrastruktur (primäre/logische LW) entsprechend anpassen.

  • Script immer im vordergrund

    • Andy
    • 13. Januar 2010 um 13:12
    Zitat

    PS. mein pc is aus dem jahr 2001 soll heissen: 512mb arbeitsspeicher,2Ghz cpu und nvidia fx5500 graka

    Hi, schweift jetzt etwas vom Thema ab, aber versuche mal das RAM auf 1 Gigabyte aufzurüsten. Das ist echt eine Investition die sich Geschwindigkeitsmäßig lohnt. Jedenfalls hat das bei mir in einer ähnlichen Konfiguration den Rechner wieder benutzbar gemacht. Das ewige swappen der Daten auf die Platte legt bei wenig RAM den Rechner komplett lahm. Die "gefühlte Schwuppdizität" verbessert sich enorm, wenn das Festplattengerödel merklich weniger wird.

  • Pfad von start.exe auslesen

    • Andy
    • 13. Januar 2010 um 11:56

    Hi,
    die Einzelteile eines Pfades bekommt man man sehr einfach per

    [autoit]

    _pathsplit()

    [/autoit]

    . Da kann man sich das trimmen weitgehend sparen...

  • Script immer im vordergrund

    • Andy
    • 13. Januar 2010 um 11:53

    Hi,
    da viele Spiele im Vollbildmodus auf die Overlaytechnik zurückgreifen und mit eigenen Treibern Grafik/Tastatur/IO abfragen bzw. ansteuern, werden die "normalen" WinAPI-Funktionen garnicht aufgerufen.
    Du könntest für Screenshots die spielinterne Screenshotfunktion benutzen und die Datei per AutoIt-Script anzeigen oder bearbeiten.

  • Prospeed-Tutorial?

    • Andy
    • 13. Januar 2010 um 11:13

    Hi,

    Zitat

    Zumindest Funktionsbeschreibungen wären toll.


    es gibt doch die deutsche Hilfe als CHM-Datei (zugegeben für AutoIt´ler teilweise etwas schwer zu verstehen^^) und auch die m.E. sehr gute PDF-Datei mit den Funktionsbeschreibungen, der Inhalt der PDF liegt doch im Paket sogar als Openoffice-Text bei.
    Bevor man dieselbe Arbeit nochmal macht, fände ich es besser, eine "Übersetzung" der in der Orginal-Hilfe verwendeten Begriffe zu erstellen.
    Was ist beispielsweise mit einem "Bereich#" gemeint und wie erhält man "Zeiger". Dieses "in AutoIt-Syntax" übersetzt und auf die orginale Hilfe verwiesen macht Ressourcen frei für das(die) eigentliche(n) Tutorial(s).

  • Neuer PC (gelöst)

    • Andy
    • 12. Januar 2010 um 20:46

    Hallo Alina,
    ich würde dir empfehlen, einen Bürorechner aus einer der großen Serien bei einem der großen Versender deiner Wahl zu bestellen. Das hat den Vorteil, daß alle verbauten Komponenten einsatzklar sind, ohne erst wochenlang Treibern hinterherzulaufen. Da ich davon ausgehe, daß du das System zum ARBEITEN (Produktivumgebung) nutzen möchtest, ist ein Angebot mit Abhol/BringIn-Service im Falle eines Defektes Gold wert. Zur Zeit wirft Intel neue (teure) Prozessoren (i3,i5,i7) auf den Markt, da sollte sich mit einem ca. 1 Jahr alten (bewährten) System ein Schnäppchen machen lassen.
    Für eine halbwegs aktuelle Maschine deines anvisierten Tätigkeitsbereichs würde ich jetzt aus dem Bauch heraus die 400,- - 500,- Eurogrenze anpeilen.
    Ob Dual- oder Quadcore ist dabei schnurz, deine Anwendungen benutzen sowieso nur einen Prozessorkern. Wert würde ich persönlich auf einen sehr leisen Rechner legen, deine Tochter trägt bestimmt lautstark zur "Noise-Pollution" bei, da braucht Mama auch nicht noch einen Rechner der sich anhört wie ein startender Jet....

    Meine Frau hat sich für genau deinen Anwendungsbereich in einen der kompakten ACER X1300(Zitat: "...ist der SCHNUGGELISCH!") verguckt, kostet neu 399,-€ (incl BS) und ist sehr kompakt, sehr leise und die Stromsparmodi sind im BIOS auch schon richtig eingestellt. Auspacken, anschliessen, läuft....so muß das sein...

  • Grundprobleme mit GuiCtrlSetOnEvent

    • Andy
    • 10. Januar 2010 um 13:48
    Zitat

    Hmmm, danke... Also kann ich da nur ganz fixe Funktionen drin lassen?
    Aber dann kann ich auch gleich eig. alles ausgliedern...

    Ja, genau das ist der Sinn. Generell ist es problematisch, bei Verwendung von GuiCtrlSetOnEvent() mit Messageboxen zu arbeiten, ohne die Msgbox als Taskmodal (Flag 8192) zu benutzen.
    Das Problem ist ja nicht die Dauer der Funktion, sondern daß du während der Laufzeit der Funktion diese oder eine andere Funktion wieder startest.
    Wenn man also zeitintensive Funktionen benutzt, dann sollte man sich z.B. Funktionen _DisableGUI() und _EnableGUI() schreiben, welche verhindern, daß man die GUI bzw deren Elemente benutzen kann, solange die zeitintensive Funktion läuft.

    [autoit]

    func _dasdauertziemlichlange()
    _DisableGUI() ; verhindert Zugriff auf die GUI

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

    ;zeitintensive Tätigkeit des Programms

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

    _EnableGUI() ;ermöglicht Zugriff auf die Elemente der GUI
    endfunc

    [/autoit]

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™