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

Beiträge von bernd670

  • hilfe bei binary dateien nötig.

    • bernd670
    • 10. Juli 2007 um 17:34

    Hallo!

    so sollte es gehen:

    [autoit]

    $fhOrginal = FileOpen(@ScriptDir & "\SETUPLDR.BIN", 16)
    $binOrginal = FileRead($fhOrginal)
    FileClose($fhOrginal)

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

    $binPatch = BinaryMid($binOrginal,1,0x205F)
    $binPatch &= BinaryMid(Binary(0xEB),1,1)
    $binPatch &= BinaryMid(Binary(0x1A),1,1)
    $binPatch &= BinaryMid($binOrginal,0x2062)

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

    MsgBox(0,"","vorher:" & @TAB & BinaryMid($binOrginal,0x205F,4) & @CRLF & "nachher:" & @TAB & BinaryMid($binPatch,0x205F,4))

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

    ;~ $fhPatch = FileOpen(@ScriptDir & "\SETUPLDR.BIN", 18)
    ;~ FileWrite($fhPatch, $binPatch)
    ;~ FileClose($fhPatch)

    [/autoit]
  • Ordner in Laufwerk suchen...

    • bernd670
    • 10. Juli 2007 um 06:22

    Hallo,

    der Unterschied zwischen den Funktionen von AspirinJunkie und mir ist, wenn AspirinJunkie nach einem Verzeichnis sucht sagen wir mal alle Temp-Verzeichnisse auf C:\, lautete bei ihm der Befehl:

    Code
    DIR temp /S /A:D /B; als Arbeitsverzeichnis C:\ angeben

    Das hat den Nachteile das das aktuelle Verz. (C:\) nicht durchsucht wird.

    Bei mir lautet der Befehl:

    Code
    DIR * /S /A:D /B; als Arbeitsverzeichnis C:\ angeben

    Das gibt alle Verzeichnisse von C:\ zurück, danach filter ich mit StringRegExp alle gesuchten Verzeichnisse raus.

    Der Nachteil bei miener Version ist das sie etwas länger dauert!

    Edit:

    Ich habe die Funktion noch etwas überarbeitet. Jetzt muss man der Funktion ein Array übergeben, dafür kann man aber gleich mehrer Verzeichnisse mit Startverzeichnis übergeben. Eine Funktion zum Dateisuchen habe ich auch noch hinzugepackt.

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <Array.au3>

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

    Local $aszDirSearch[3][2] = [ [ "Temp", "C:\" ], _
    [ "Temp", "D:\" ], _
    [ "Tools", "D:\" ] _
    ]

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

    Local $aszFileSearch[2][2] = [ [ "*.au3", "C:\" ], _
    [ "*.au3", "D:\" ] _
    ]

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

    $Ordner = _DirSearch($aszDirSearch)
    _ArrayDisplay($Ordner, "Ausgabe")

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

    $Files = _FileSearch($aszFileSearch)
    _ArrayDisplay($Files, "Ausgabe")

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

    ; =================================================================================================
    ; Function Name: _DirSearch()
    ; Description: Sucht Verzeichnisse rekursiv in angegebenen Verzeichnissen
    ; Parameter(s): $aszSuche = Array mit folgendem Inhalt
    ; $aszSuche[n][0] = Verzeichnisname nach dem gesucht werden soll
    ; $aszSuche[n][0] = Startverzeichnis in dem gesucht werden soll
    ; $iBase = Startindex für $aszSuche (Vorgabe = 0)
    ; Return Value(s): Erfolg: (@error = 0) -> Array mit den Pfaden zu den gefundenen Ordnern zurück
    ; Array[0] = 0 -> keine Ordern gefunden
    ;
    ; Fehler: @error = 1 -> $aszSuche ist kein Array
    ; @error = 2 -> $aszSuche ist kein 2-Dimensioales Array
    ; @error = 3 -> $aszSuche enthält eine Leerstring
    ;==================================================================================================
    Func _DirSearch($aszSuche, $iBase = 0)
    Local $szStOut = ""
    Local $aResult[1] = [0]
    Local $aszWD[1]
    Local $aszPattern[1][2]

    If IsArray($aszSuche) Then
    If UBound($aszSuche,0) <> 2 Then Return SetError(2,0,$aResult)
    ReDim $aszPattern[UBound($aszSuche)][2]
    $aszWD[0] = ""
    For $cIndex = $iBase To UBound($aszSuche) - 1
    If (StringLen($aszSuche[$cIndex][0]) = 0) Or (StringLen($aszSuche[$cIndex][1]) = 0) Then SetError(3,0,$aResult)
    If Not StringInStr($aszWD[0],StringLeft($aszSuche[$cIndex][1],2)) Then $aszWD[0] &= StringLeft($aszSuche[$cIndex][1],2)
    If StringLeft($aszSuche[$cIndex][0],1) <> "\" Then $aszSuche[$cIndex][0] = "\" & $aszSuche[$cIndex][0]
    $aszPattern[$cIndex][0] = _StringToPattern($aszSuche[$cIndex][0])
    If StringRight($aszSuche[$cIndex][1],1) = "\" Then $aszSuche[$cIndex][1] = StringTrimRight($aszSuche[$cIndex][1],1)
    $aszPattern[$cIndex][1] = _StringToPattern($aszSuche[$cIndex][1])
    Next
    $cWDLen = StringLen($aszWD[0])
    if $cWDLen > 2 Then
    ReDim $aszWD[$cWDLen / 2]
    For $cIndex = $cWDLen - 1 To 1 Step -2
    $aszWD[Floor($cIndex / 2)] = StringMid($aszWD[0],$cIndex,2)
    Next
    EndIf
    Else
    SetError(1,0,$aResult)
    EndIf

    For $cIndex = 0 To UBound($aszWD) - 1
    $PID = Run(@ComSpec & " /c DIR * /A:D /B /S", $aszWD[$cIndex] & "\", @SW_HIDE, $STDOUT_CHILD)

    While 1
    $szStOut &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd
    Next
    $szStOut = StringSplit(OemToChar($szStOut), @CRLF, 1)

    For $cZeile = 1 To $szStOut[0]
    For $cIndex = 0 To UBound($aszPattern) - 1
    If StringRegExp($szStOut[$cZeile],"(?i)^(" & $aszPattern[$cIndex][1] & ".*" & $aszPattern[$cIndex][0] & ")$") Then
    if UBound($aResult) <= ($aResult[0] + 1) Then ReDim $aResult[UBound($aResult) + 100]
    $aResult[0] += 1
    $aResult[$aResult[0]] = $szStOut[$cZeile]
    EndIf
    Next
    Next
    ReDim $aResult[$aResult[0]+1]

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

    Return SetError(0,0,$aResult)
    EndFunc ;==>_DirSearch

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

    ; =================================================================================================
    ; Function Name: _FileSearch()
    ; Description: Sucht Dateien rekursiv in angegebenen Verzeichnissen
    ; Parameter(s): $aszSuche = Array mit folgendem Inhalt
    ; $aszSuche[n][0] = Dateiname nach dem gesucht werden soll
    ; $aszSuche[n][0] = Startverzeichnis in dem gesucht werden soll
    ; $iBase = Startindex für $aszSuche (Vorgabe = 0)
    ; Return Value(s): Erfolg: (@error = 0) -> Array mit den Pfaden zu den gefundenen Dateien zurück
    ; Array[0] = 0 -> keine Datei gefunden
    ;
    ; Fehler: @error = 1 -> $aszSuche ist kein Array
    ; @error = 2 -> $aszSuche ist kein 2-Dimensioales Array
    ; @error = 3 -> $aszSuche enthält eine Leerstring
    ;==================================================================================================
    Func _FileSearch($aszSuche, $iBase = 0)
    Local $szStOut = ""
    Local $aResult[1] = [0]
    Local $aszWD[1]
    Local $aszPattern[1][2]

    If IsArray($aszSuche) Then
    If UBound($aszSuche,0) <> 2 Then Return SetError(2,0,$aResult)
    ReDim $aszPattern[UBound($aszSuche)][2]
    $aszWD[0] = ""
    For $cIndex = $iBase To UBound($aszSuche) - 1
    If (StringLen($aszSuche[$cIndex][0]) = 0) Or (StringLen($aszSuche[$cIndex][1]) = 0) Then SetError(3,0,$aResult)
    If Not StringInStr($aszWD[0],StringLeft($aszSuche[$cIndex][1],2)) Then $aszWD[0] &= StringLeft($aszSuche[$cIndex][1],2)
    If StringLeft($aszSuche[$cIndex][0],1) <> "\" Then $aszSuche[$cIndex][0] = "\" & $aszSuche[$cIndex][0]
    $aszPattern[$cIndex][0] = _StringToPattern($aszSuche[$cIndex][0])
    If StringRight($aszSuche[$cIndex][1],1) = "\" Then $aszSuche[$cIndex][1] = StringTrimRight($aszSuche[$cIndex][1],1)
    $aszPattern[$cIndex][1] = _StringToPattern($aszSuche[$cIndex][1])
    Next
    $cWDLen = StringLen($aszWD[0])
    if $cWDLen > 2 Then
    ReDim $aszWD[$cWDLen / 2]
    For $cIndex = $cWDLen - 1 To 1 Step -2
    $aszWD[Floor($cIndex / 2)] = StringMid($aszWD[0],$cIndex,2)
    Next
    EndIf
    Else
    SetError(1,0,$aResult)
    EndIf

    For $cIndex = 0 To UBound($aszWD) - 1
    $PID = Run(@ComSpec & " /c DIR * /A:-D /B /S", $aszWD[$cIndex] & "\", @SW_HIDE, $STDOUT_CHILD)

    While 1
    $szStOut &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd
    Next
    $szStOut = StringSplit(OemToChar($szStOut), @CRLF, 1)

    For $cZeile = 1 To $szStOut[0]
    For $cIndex = 0 To UBound($aszPattern) - 1
    If StringRegExp($szStOut[$cZeile],"(?i)^(" & $aszPattern[$cIndex][1] & ".*" & $aszPattern[$cIndex][0] & ")$") Then
    if UBound($aResult) <= ($aResult[0] + 1) Then ReDim $aResult[UBound($aResult) + 100]
    $aResult[0] += 1
    $aResult[$aResult[0]] = $szStOut[$cZeile]
    EndIf
    Next
    Next
    ReDim $aResult[$aResult[0]+1]

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

    Return SetError(0,0,$aResult)
    EndFunc ;==>_FileSearch

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

    ;=======================================================================================


    ;===============================================================================
    ; Name: OemToChar
    ; Description: Wandelt einen ASCII- in einen ANSI-String
    ; Parameter(s): $szSrc = String der umgewandelt werden soll
    ; Requirement(s): keine
    ; Return Value(s): bei Erfolg: umgewandelter String
    ; bei Fehler: "" und @error = 1
    ; Author(s): bernd670
    ;===============================================================================
    Func OemToChar($szSrc)
    ;~ Private Declare Function OemToChar Lib "user32.dll" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    Local $strSrc = DllStructCreate("char[" & StringLen($szSrc) + 1 & "]")
    Local $strDst = DllStructCreate("char[" & StringLen($szSrc) * 2 + 1 & "]")
    DllStructSetData($strSrc,1,$szSrc)
    DllStructSetData($strDst,1,0)

    Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "ptr", DllStructGetPtr($strSrc), "ptr", DllStructGetPtr($strDst))
    If IsArray($lRetVal) And $lRetVal[0] = 1 Then
    Return SetError(0,0,DllStructGetData($strDst,1))
    EndIf

    Return SetError(1,0,"")
    EndFunc ;==>OemToChar

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

    ;===============================================================================
    ; Name: _StringToPattern
    ; Description: Bereitet einen String für eine StringRegExp-Pattern vor
    ; Parameter(s): $szStrToPattern = String der umgewandelt werden soll
    ; Requirement(s): keine
    ; Return Value(s): umgewandelter String
    ; Author(s): bernd670
    ;===============================================================================
    Func _StringToPattern($szStrToPattern)
    $szStrToPattern = StringReplace($szStrToPattern, "\", "\\")
    $szStrToPattern = StringReplace($szStrToPattern, ".", "\.")
    $szStrToPattern = StringReplace($szStrToPattern, "+", "\+")
    $szStrToPattern = StringReplace($szStrToPattern, "-", "\-")
    $szStrToPattern = StringReplace($szStrToPattern, "(", "\(")
    $szStrToPattern = StringReplace($szStrToPattern, ")", "\)")
    $szStrToPattern = StringReplace($szStrToPattern, "[", "\[")
    $szStrToPattern = StringReplace($szStrToPattern, "]", "\]")
    $szStrToPattern = StringReplace($szStrToPattern, "?", ".")
    $szStrToPattern = StringReplace($szStrToPattern, "*", ".*")

    Return $szStrToPattern
    EndFunc ;==>_StringToPattern

    [/autoit]
  • ist das möglich...

    • bernd670
    • 9. Juli 2007 um 22:53

    Hallo,

    der Fehler steht doch da, _SysTrayIconVisible() wird mit einer ungültigen anzahl von Parametern aufgerufen.

  • ist das möglich...

    • bernd670
    • 9. Juli 2007 um 16:24

    Einfach die Zeile 37 in der Systray_UDF.au3 deaktivieren, dann sollte es gehen!

  • Ordner in Laufwerk suchen...

    • bernd670
    • 9. Juli 2007 um 01:28

    Hi,

    jetzt sollte es funktionieren:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <Array.au3>

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

    $Verzeichnisname = "Temp"
    $Ordner = _DirSearch($Verzeichnisname, "C:\")
    _ArrayDisplay($Ordner, "Ausgabe")

    ; ======================================================================================
    ; Function Name: DirSearch()
    ; Description: Sucht ein Verzeichnis rekursiv in einem angegebenen Verzeichnis
    ; Parameter(s): $szSuche: Verzeichnisname nach dem gesucht werden soll
    ; $szStartPfad: Das Startverzeichnis in dem gesucht werden soll
    ; Return Value(s): Erfolg - Gibt ein Array mit den Pfaden zu den gefundenen Ordnern zurück
    ; Misserfolg - RückgabeArray[0] = 0 und @error = 1
    ;=======================================================================================
    Func _DirSearch($szSuche, $szStartPfad = @ScriptDir)
    Local $Text = ''
    Local $Output[1]

    If StringRight($szStartPfad,1) <> "\" Then $szStartPfad &= "\"
    $szWD = StringLeft($szStartPfad,3)
    $PID = Run(@ComSpec & " /c DIR * /A:D /B /S", $szWD, @SW_SHOW, $STDOUT_CHILD)

    While 1
    $Text &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd
    $Text = StringSplit(OemToChar($Text), @CRLF)

    ; $szStartPfad für StringRegExp anpassen
    $szStartPfad = StringTrimRight($szStartPfad,1)
    $szStartPfad = StringReplace($szStartPfad, "\", "\\")
    $szStartPfad = StringReplace($szStartPfad, ".", "\.")
    $szStartPfad = StringReplace($szStartPfad, "+", "\+")
    $szStartPfad = StringReplace($szStartPfad, "-", "\-")
    $szStartPfad = StringReplace($szStartPfad, "(", "\(")
    $szStartPfad = StringReplace($szStartPfad, ")", "\)")
    $szStartPfad = StringReplace($szStartPfad, "[", "\[")
    $szStartPfad = StringReplace($szStartPfad, "]", "\]")
    $szStartPfad = StringReplace($szStartPfad, "?", ".")
    $szStartPfad = StringReplace($szStartPfad, "*", ".*")

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

    ; $szSuche für StringRegExp anpassen
    $szSuche = "\" & $szSuche
    $szSuche = StringReplace($szSuche, "\", "\\")
    $szSuche = StringReplace($szSuche, ".", "\.")
    $szSuche = StringReplace($szSuche, "+", "\+")
    $szSuche = StringReplace($szSuche, "-", "\-")
    $szSuche = StringReplace($szSuche, "(", "\(")
    $szSuche = StringReplace($szSuche, ")", "\)")
    $szSuche = StringReplace($szSuche, "[", "\[")
    $szSuche = StringReplace($szSuche, "]", "\]")
    $szSuche = StringReplace($szSuche, "?", ".")
    $szSuche = StringReplace($szSuche, "*", ".*")
    ConsoleWrite($szStartPfad & @CRLF & $szSuche & @CRLF)

    For $i = 1 To $Text[0]
    If StringRegExp($Text[$i],"(?i)^(" & $szStartPfad & ".*" & $szSuche & ")$") Then
    if UBound($Output) <= ($Output[0] + 1) Then ReDim $Output[UBound($Output) + 100]
    $Output[0] += 1
    $Output[$Output[0]] = $Text[$i]
    EndIf
    Next
    ReDim $Output[$Output[0]+1]
    If $Output[0] = 0 Then SetError(1)
    Return $Output

    EndFunc ;==>_DirSearch

    ;=======================================================================================

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

    ;===============================================================================
    ; Name: OemToChar
    ; Description: Wandelt einen ASCII- in einen ANSI-String
    ; Parameter(s): $szSrc = String der umgewandelt werden soll
    ; Requirement(s): keine
    ; Return Value(s): bei Erfolg: umgewandelter String
    ; bei Fehler: "" und @error = 1
    ; Author(s): bernd670
    ;
    ;===============================================================================
    Func OemToChar ($szSrc)
    ;~ Private Declare Function OemToChar Lib "user32.dll" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    Local $strSrc = DllStructCreate("char[" & StringLen($szSrc) + 1 & "]")
    Local $strDst = DllStructCreate("char[" & StringLen($szSrc) * 2 + 1 & "]")
    DllStructSetData($strSrc,1,$szSrc)
    DllStructSetData($strDst,1,0)

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

    Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "ptr", DllStructGetPtr($strSrc), "ptr", DllStructGetPtr($strDst))
    If IsArray($lRetVal) And $lRetVal[0] = 1 Then
    Return SetError(0,0,DllStructGetData($strDst,1))
    EndIf

    Return SetError(1,0,"")
    EndFunc

    [/autoit]
  • "Guckloch"

    • bernd670
    • 9. Juli 2007 um 00:16

    Hallo,

    weil mich das ständige klicken beim refresh der Shoutbox im IE stört habe ich bei mir 2 Zeilen von Guckloch_Def_Browser.au3 geändert.

    Zeile 18:

    [autoit]

    Dim $oIE = _IECreate("http://www.autoit.de/jgs_portal_box.php?id=18&sid=",0,0,1,-1)

    [/autoit]

    Zeile 97:

    [autoit]

    $oTable = _IETableGetCollection ($oIE,5)

    [/autoit]

    Dadurch wird nicht mehr die Portal-Seite aufgerufen sonder direkt die Seite "letzte Beiträge".

    @1:
    In die _Ende-Funktion sollte man noch ein _IEQuit($oIE) vor das Exit schreiben, damit der IE auch beendet wird und ein Sleep in der While schleife würde den Prozessor etwas entlasten.

  • Ordner in Laufwerk suchen...

    • bernd670
    • 8. Juli 2007 um 23:43

    Mit Leerzeichen habe ich keine Probleme!

  • Ordner in Laufwerk suchen...

    • bernd670
    • 8. Juli 2007 um 22:47
    Zitat

    Original von AspirinJunkie

    Danke Jungs - wiedermal ne ganze Menge gelernt hier bei euch :)


    Edit: Ich sehe gerade das die Sache doch noch einen Haken bei mir hat:
    Wenn der Ordner Unterverzeichnisse enthält werden alle Unterverzeichnisse als Ergebnis ausgegeben anstatt nur den Pfad zum eigentlichen Stammverzeichnis.
    Kann man das auch über entsprechende Kommandozeilenparameter lösen?

    Ich habe deine Code mal etwas erweitert, jetzt sollte es funktionieren:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #include <Array.au3>

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

    $Verzeichnisname = "Startmenü"
    $Ordner = _DirSearch($Verzeichnisname, "C:\Dokumente und Einstellungen")
    _ArrayDisplay($Ordner, "Ausgabe")

    ; ======================================================================================
    ; Function Name: DirSearch()
    ; Description: Sucht ein Verzeichnis rekursiv in einem angegebenen Verzeichnis
    ; Parameter(s): $szSuche: Verzeichnisname nach dem gesucht werden soll
    ; $szStartPfad: Das Startverzeichnis in dem gesucht werden soll
    ; Return Value(s): Erfolg - Gibt ein Array mit den Pfaden zu den gefundenen Ordnern zurück
    ; Misserfolg - RückgabeArray[0] = 0 und @error = 1
    ;=======================================================================================
    Func _DirSearch($szSuche, $szStartPfad = @ScriptDir)
    Local $Text = ''
    Local $Output[1]

    If StringRight($szStartPfad,1) <> "\" Then $szStartPfad &= "\"
    $szWD = StringLeft($szStartPfad,3)
    $PID = Run(@ComSpec & " /c DIR " & $szSuche & " /S /A:D /B", $szWD, @SW_SHOW, $STDOUT_CHILD)

    While 1
    $Text &= StdoutRead($PID)
    If @error Then ExitLoop
    WEnd
    $Text = StringSplit(OemToChar($Text), @CRLF)

    ; $szStartPfad für StringRegExp anpassen
    $szStartPfad = StringReplace($szStartPfad, "\", "\\")
    $szStartPfad = StringReplace($szStartPfad, ".", "\.")
    $szStartPfad = StringReplace($szStartPfad, "+", "\+")
    $szStartPfad = StringReplace($szStartPfad, "-", "\-")
    $szStartPfad = StringReplace($szStartPfad, "(", "\(")
    $szStartPfad = StringReplace($szStartPfad, ")", "\)")
    $szStartPfad = StringReplace($szStartPfad, "[", "\[")
    $szStartPfad = StringReplace($szStartPfad, "]", "\]")
    $szStartPfad = StringReplace($szStartPfad, "?", ".")
    $szStartPfad = StringReplace($szStartPfad, "*", ".*")

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

    ; $szSuche für StringRegExp anpassen
    $szSuche = StringReplace($szSuche, "\", "\\")
    $szSuche = StringReplace($szSuche, ".", "\.")
    $szSuche = StringReplace($szSuche, "+", "\+")
    $szSuche = StringReplace($szSuche, "-", "\-")
    $szSuche = StringReplace($szSuche, "(", "\(")
    $szSuche = StringReplace($szSuche, ")", "\)")
    $szSuche = StringReplace($szSuche, "[", "\[")
    $szSuche = StringReplace($szSuche, "]", "\]")
    $szSuche = StringReplace($szSuche, "?", ".")
    $szSuche = StringReplace($szSuche, "*", ".*")

    For $i = 1 To $Text[0]
    If StringRegExp($Text[$i],"(?i)^(" & $szStartPfad & ".*\\" & $szSuche & ")$") Then
    ReDim $Output[UBound($Output) + 1]
    $Output[0] += 1
    $Output[UBound($Output) - 1] = $Text[$i]
    EndIf
    Next

    If $Output[0] = 0 Then SetError(1)
    Return $Output

    EndFunc ;==>_DirSearch

    ;=======================================================================================

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

    ;===============================================================================
    ; Name: OemToChar
    ; Description: Wandelt einen ASCII- in einen ANSI-String
    ; Parameter(s): $szSrc = String der umgewandelt werden soll
    ; Requirement(s): keine
    ; Return Value(s): bei Erfolg: umgewandelter String
    ; bei Fehler: "" und @error = 1
    ; Author(s): bernd670
    ;
    ;===============================================================================
    Func OemToChar ($szSrc)
    ;~ Private Declare Function OemToChar Lib "user32.dll" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    Local $strSrc = DllStructCreate("char[" & StringLen($szSrc) + 1 & "]")
    Local $strDst = DllStructCreate("char[" & StringLen($szSrc) * 2 + 1 & "]")
    DllStructSetData($strSrc,1,$szSrc)
    DllStructSetData($strDst,1,0)

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

    Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "ptr", DllStructGetPtr($strSrc), "ptr", DllStructGetPtr($strDst))
    If IsArray($lRetVal) And $lRetVal[0] = 1 Then
    Return SetError(0,0,DllStructGetData($strDst,1))
    EndIf

    Return SetError(1,0,"")
    EndFunc

    [/autoit]


    @1: Noch einen kleinen Bug gefixt!
    @2: Umlaute wurden nicht korrekt zurückgegeben -> gefixt!

  • wie kann ich eine dateiendung meinem programm zuweisen?

    • bernd670
    • 8. Juli 2007 um 19:32
    Zitat

    ok thx

    beim stöbern in der registry is mir noch was aufgefallen...

    - was ist der persistenthandler?
    -was ist shellnew?
    -was bringt ',0'?

    mfg

    • Was ist der PersistentHandler?
      Wenn unter dem Schlüssel PersistentHandler der Wert {5e941d80-bf96-11cd-b579-08002b30bfeb} eingetragen ist wird die Dateiendung in die Suchfunktion mit einbezogen. Ohne den Schlüssel werden die Dateien mit den Endungen bei der Suche ignoriert.
    • Was ist ShellNew?
      Hier wird die Aktion eingetragen die ausgeführt werden soll, wenn man auf dem Desktop rechtsklickt und Neu wählt.
    • Was bringt ",0"?
      ",0" wählt das 1. Icon aus der angegebenen Datei. Beim 2. Icon wäre es ",1" usw.
  • wie kann ich eine dateiendung meinem programm zuweisen?

    • bernd670
    • 8. Juli 2007 um 18:46

    Wenn man einen neuen Schlüssel in der Registry anlegt existiert immer der Eintrag (Standard) REG_SZ (Standard) und dem muss der neue Wert zugewiesen werden. Z.B. (Standard) REG_SZ "meinedateiendungfile".

    Hier mal eine Funktion die dir vllt. weiterhilft.

    Spoiler anzeigen
    [autoit]

    ;~ Aufruf: _RegisterFileType("[.]FileType"[, "Pfad zur Anwendung", "Pfad zum ICON"])
    ;~ Wird "Pfad zur Anwendung" weggelassen wird die aktuelle Anwendung eingetragen
    ;~ Wird "Pfad zum ICON" weggelassen wird das 1. Icon aus der Anwendung eingetragen
    ;~ Autor: bernd670
    Func _RegisterFileType($sFileType, $sAppName = "", $sAppIcon = "")
    Dim $sTypeName

    If $sFileType = "" Then
    SetError(1)
    Return 0
    EndIf

    If $sAppName = "" Then $sAppName = @ScriptFullPath
    If $sAppIcon = "" Then $sAppIcon = $sAppName

    $sAppName = '"' & $sAppName & '"'
    $sAppIcon = '"' & $sAppIcon & '"'

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

    $sFileType = StringLower($sFileType)

    If StringLeft($sFileType,1) <> "." Then
    $sTypeName = $sFileType
    $sFileType = "." & $sFileType
    Else
    $sTypeName = StringRight($sFileType, StringLen($sFileType) -1)
    EndIf

    $sTypeName = $sTypeName & "file"

    RegWrite("HKEY_CLASSES_ROOT\" & $sFileType, "", "REG_SZ", $sTypeName)
    RegWrite("HKEY_CLASSES_ROOT\" & $sTypeName & "\shell\open\command", "", "REG_SZ", $sAppName & ' "%1"')
    RegWrite("HKEY_CLASSES_ROOT\" & $sTypeName & "\DefaultIcon", "", "REG_SZ", $sAppIcon & ',0')

    SetError(0)
    Return 1
    EndFunc

    [/autoit]
  • Unrar.dll

    • bernd670
    • 8. Juli 2007 um 18:25

    Wenn das Fenster zu schnell weg geht, einfach eine DOSBox öffnen und den Befehl darin ausführen dann kann man in aller Ruhe die Ausgabe lesen/kopieren! ;)

  • wie kann ich eine dateiendung meinem programm zuweisen?

    • bernd670
    • 8. Juli 2007 um 18:09

    Hallo!

    In der Registry unter HKEY_CLASSES_ROOT wird der Schlüssel .meinedateiendung und meinedateiendungfile erstellt. Unter dem Schlüssel .meinedateiendung wird dem Bezeichner (Standard) der Wert meinedateiendungfile eingetragen.

    Unter dem Schlüssel meinedateiendungfile werden 2 weitere Schlüssel angelegt, diese heißen DefaultIcon und Shell. Unter DefaultIcon wird dem Bezeichner (Standard) der Dateiname mit Pfad zum Icon eingetragen das den Dateien mit der Endung .meinedateiendung zugewiesen wird.

    Unter dem Schlüssel Shell wird noch der Schlüssel Open und darunter der Schlüssel Command angelegt. Unter Command wird dem Bezeichner (Standard) der Dateiname mit Pfad zum Programm eingetragen, dass gestartet werden soll wenn auf die Datei mit der Endung .meinedateiendung doppelt geklickt wird, mit dem Zusatz %1. Also in etwa so "D:\Pfad\Programm.exe %1", in %1 wird dabei der Name eingetragen auf den doppelt geklickt wurd und wird dem Programm als Paramter übergeben. Das heißt, dass Programm muss übergebene Parameter auswerten.

    Du kannst dir das ganze ja einfach mal bei .au3 Dateien anschauen, die entsprechenden Schlüssel heißen .au3 und AutoIt3Script.

    Ich habe vor langer Zeit mal eine Funktion für Galenda geschrieben die genau das macht -> Feedback Test

  • Unrar.dll

    • bernd670
    • 8. Juli 2007 um 17:21

    Hallo,

    wenn man die unrar.exe ohne Parameter aufruft werden alle möglichen Parameter angezeigt.

    Spoiler anzeigen
    Code
    UNRAR 3.70 freeware      Copyright (c) 1993-2007 Alexander Roshal
    
    
    Usage:     unrar <command> -<switch 1> -<switch N> <archive> <files...>
                   <@listfiles...> <path_to_extract\>
    
    
    <Commands>
      e             Extract files to current directory
      l[t,b]        List archive [technical, bare]
      p             Print file to stdout
      t             Test archive files
      v[t,b]        Verbosely list archive [technical,bare]
      x             Extract files with full path
    
    
    <Switches>
      -             Stop switches scanning
      ac            Clear Archive attribute after compression or extraction
      ad            Append archive name to destination path
      ap<path>      Set path inside archive
      av-           Disable authenticity verification check
      c-            Disable comments show
      cfg-          Disable read configuration
      cl            Convert names to lower case
      cu            Convert names to upper case
      dh            Open shared files
      ep            Exclude paths from names
      ep3           Expand paths to full including the drive letter
      f             Freshen files
      id[c,d,p,q]   Disable messages
      ierr          Send all messages to stderr
      inul          Disable all messages
      ioff          Turn PC off after completing an operation
      kb            Keep broken extracted files
      n<file>       Include only specified file
      n@            Read file names to include from stdin
      n@<list>      Include files in specified list file
      o+            Overwrite existing files
      o-            Do not overwrite existing files
      oc            Set NTFS Compressed attribute
      or            Rename files automatically
      ow            Save or restore file owner and group
      p[password]   Set password
      p-            Do not query password
      r             Recurse subdirectories
      ri<P>[:<S>]   Set priority (0-default,1-min..15-max) and sleep time in ms
      sl<size>      Process files with size less than specified
      sm<size>      Process files with size more than specified
      ta<date>      Process files modified after <date> in YYYYMMDDHHMMSS format
      tb<date>      Process files modified before <date> in YYYYMMDDHHMMSS format
      tn<time>      Process files newer than <time>
      to<time>      Process files older than <time>
      ts<m,c,a>[N]  Save or restore file time (modification, creation, access)
      u             Update files
      v             List all volumes
      ver[n]        File version control
      vp            Pause before each volume
      x<file>       Exclude specified file
      x@            Read file names to exclude from stdin
      x@<list>      Exclude files in specified list file
      y             Assume Yes on all queries
    Alles anzeigen
  • Ordner in Laufwerk suchen...

    • bernd670
    • 8. Juli 2007 um 16:19

    Hallo,

    man kann mit dem Dir-Befehl auch suchen, wenn man z.B. alle Ordner haben will die mit "system" anfangen und sich auf Laufwerk C: befinden, muss man von c:\ folgendes eingeben:

    Code
    DIR system* /S /A:D /B
  • Smilie :rofl:

    • bernd670
    • 8. Juli 2007 um 00:13

    Da die Seite mit dem Zwinker- und ROFL-Smilie ja scheinbar Down ist. Hier mal 3 die man evtl als Ersatz nehmen kann!

    [Blockierte Grafik: http://smileys.sur-la-toile.com/repository/Cligne/mini-clin-oeil-12892.gif] [Blockierte Grafik: http://smileys.sur-la-toile.com/repository/Cligne/b_wink.gif]
    [Blockierte Grafik: http://smileys.sur-la-toile.com/repository/Grands_Smileys/mort-de-rire-15.gif]

  • wie absoluten Link aus relativem erstellen?

    • bernd670
    • 7. Juli 2007 um 22:35

    Es wäre ja auch zu einfach wenn sich die Dinger mal gleich verhalten würden! :D

  • wie absoluten Link aus relativem erstellen?

    • bernd670
    • 7. Juli 2007 um 22:21

    Hallo,

    das sind doch beides absolute Adressen. Beim Aufruf mit Shellexecute werden bei mir auch beide im Standardbrowser geöffnet!

  • GUI vor grauem Hintergrund

    • bernd670
    • 7. Juli 2007 um 22:12

    Hallo,

    ich habe mal ein Script geschrieben bei dem eine GUI vor einem sich graufärbenden Hintergrund befinden. Dabei wird einfach von dem aktuellen Bildschirminhalt ein Snapshot gemacht und als Hintergrund gesetzt. Dieser Hintergrund wird dann schrittweise eingegraut. Wenn die GUI beendet wird, wird der Hintergrund schrittweise wieder eingefärbt.

    Die Schrittweite für das Eingrauen und Einfärben kann seperat mit den Variablen $iGrayStep und $iColorStep eingestellt werden.

    Die GUI $hGUIforGrayBK kann an die eingenen Bedürfnisse angepasst werden.

    Zum kompilieren wird noch die Auto3Lib von Paul Campbell benötigt.

    Edit:
    Jetzt wird der gesamte Bereich eingegraut, auch bei mehr als einem Monitor!

    Spoiler anzeigen
    [autoit]

    #include <A3LGDIPlus.au3>
    #include <A3LScreenCap.au3>

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

    HotKeySet("!{TAB}", "NoAltTab") ; Alt-Tab verhindern
    HotKeySet("+!{TAB}", "NoAltTab") ; Shift-alt-Tab verhindern

    Global const $tagCOLORADJUSTMENT = "ushort caSize;ushort caFlags;ushort caIlluminantIndex;ushort caRedGamma;" & _
    "ushort caGreenGamma;ushort caBlueGamma;ushort caReferenceBlack;ushort caReferenceWhite;" & _
    "short caContrast;short caBrightness;short caColorfulness;short caRedGreenTint;"

    Global Const $BLACKONWHITE = 1
    Global Const $WHITEONBLACK = 2
    Global Const $COLORONCOLOR = 3
    Global Const $HALFTONE = 4
    Global Const $MAXSTRETCHBLTMODE = 4
    Global Const $STRETCH_ANDSCANS = $BLACKONWHITE
    Global Const $STRETCH_ORSCANS = $WHITEONBLACK
    Global Const $STRETCH_DELETESCANS = $COLORONCOLOR
    Global Const $STRETCH_HALFTONE = $HALFTONE

    Global Const $cszFileName = @TempDir & "\$$" & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & "$$.jpg"

    Global Const $iGrayStep = 2 ; Schrittweite fürs eingrauen
    Global Const $iColorStep = 10 ; Schrittweite fürs einfärben

    Global $hBMP, $hGUIDskTop, $hImage, $iSaturation, $hGUIforGrayBK

    Global $hDllGdi32 = DllOpen("gdi32.dll")

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

    Global $VirtualDskTop = GetVirtualScreenSize()

    $hBMP = _ScreenCap_Capture($cszFileName, 0, 0, $VirtualDskTop[0], $VirtualDskTop[1], False)

    #region An diesem Fenster keine Änderungen vornehmen
    $hGUIDskTop = GUICreate("", $VirtualDskTop[0], $VirtualDskTop[1], 0, 0, -1, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED))
    GUISetState()
    WinSetOnTop($hGUIDskTop, "", 1 )
    #endregion

    _GDIP_Startup ()

    $hImage = _GDIP_ImageLoadFromFile($cszFileName)

    $iSaturation = 0 ; Farbsättigung, mögliche Werte von -100 (Grau) bis 100 (Farbe); Standard 0
    SaturationBitmap($hGUIDskTop,$hImage,$iSaturation) ; Hintergrund beim 1. mal normal malen

    #region Dieses Fenster nach eigenen Bedürfnissen anpassen
    ; !!! Achtung den Namen ($hGUIforGrayBK) und den parent-Parameter ($hGUIDskTop) nicht ändern !!!
    $hGUIforGrayBK = GUICreate("Fenster vor grauen Hintergrund", 500, 200, -1, -1, BitOR($WS_SYSMENU, $WS_DLGFRAME), -1, $hGUIDskTop)
    Local $lblInfo = GUICtrlCreateLabel("Diesen Fenster wird vor einem, sich" & @CRLF & "eingrauenden, Hintergund angezeigt.",15,20, 470, 120)
    GUICtrlSetFont(-1,16)
    Local $ButOK = GUICtrlCreateButton("OK",210,150,80,25)
    GUISetState()
    #endregion
    WinSetOnTop($hGUIforGrayBK, "", 1 )

    While 1
    ; Hintergrund eingrauen
    If $iSaturation > -100 Then
    $iSaturation -= Abs($iGrayStep)
    If $iSaturation < -100 Then $iSaturation = -100
    SaturationBitmap($hGUIDskTop,$hImage,$iSaturation)
    Endif

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop

    Case $ButOK
    ExitLoop

    EndSwitch
    WEnd

    GUISetState(@SW_HIDE,$hGUIforGrayBK)

    ; Hintergrund wieder einfärben
    While $iSaturation < 0
    $iSaturation += Abs($iColorStep)
    If $iSaturation > 0 Then $iSaturation = 0
    SaturationBitmap($hGUIDskTop,$hImage,$iSaturation)
    Wend

    _GDIP_Shutdown ()

    If $hDllGdi32 > 0 Then DllClose($hDllGdi32)

    FileDelete($cszFileName)

    ; + ----------------------------------------------------- +
    ; | Funktionen aus gdi32.dll |
    ; + ----------------------------------------------------- +
    Func _GDI32_GetColorAdjustment($hDC)
    Local $aResult
    Local $tData = DllStructCreate($tagCOLORADJUSTMENT)
    Local $pData = DllStructGetPtr($tData)

    $aResult = DllCall($hDllGdi32, "int", "GetColorAdjustment", "hwnd", $hDC, "ptr", $pData)

    Return SetError(1 * ($aResult[0] = 0), 0, $tData)
    EndFunc

    Func _GDI32_SetColorAdjustment($hDC, $tData)
    Local $aResult
    Local $pData = DllStructGetPtr($tData)

    $aResult = DllCall($hDllGdi32, "int", "SetColorAdjustment", "hwnd", $hDC, "ptr", $pData)

    Return SetError(1 * ($aResult[0] = 0), 0, $tData)
    EndFunc

    Func _GDI32_SetStretchBltMode($hDC, $iStretchMode)
    Local $aResult

    $aResult = DllCall($hDllGdi32, "int", "SetStretchBltMode", "hwnd", $hDC, "int", $iStretchMode)

    Return SetError(1 * ($aResult[0] = 0), 0, $aResult[0])
    EndFunc

    Func _GDI32_StretchBlt($hdcDest,$nXOriginDest,$nYOriginDest,$nWidthDest,$nHeightDest,$hdcSrc,$nXOriginSrc,$nYOriginSrc,$nWidthSrc,$nHeightSrc,$dwRop)
    Local $aResult

    $aResult = DllCall($hDllGdi32, "int", "StretchBlt", _
    "hwnd", $hdcDest, _
    "int", $nXOriginDest, _
    "int", $nYOriginDest, _
    "int", $nWidthDest, _
    "int", $nHeightDest, _
    "hwnd", $hdcSrc, _
    "int", $nXOriginSrc, _
    "int", $nYOriginSrc, _
    "int", $nWidthSrc, _
    "int", $nHeightSrc, _
    "dword", $dwRop _
    )

    Return SetError(1 * ($aResult[0] = 0), 0, ($aResult[0] = 1))
    EndFunc

    Func SaturationBitmap($hGUI, $hImage, $iSaturation)
    Local $hScrDC, $hMemDC, $hBitmap, $hOldBitmap, $pSize, $tSize, $pSource, $tSource, $tCA

    $hScrDC = _API_GetDC(0)
    $hMemDC = _API_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIP_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOldBitmap = _API_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize )
    DllStructSetData($tSize, "X", _GDIP_ImageGetWidth ($hImage))
    DllStructSetData($tSize, "Y", _GDIP_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)

    _GDI32_SetStretchBltMode($hMemDC,$HALFTONE)

    $tCA = _GDI32_GetColorAdjustment($hMemDC)
    DllStructSetData($tCA,"caColorfulness",$iSaturation)
    _GDI32_SetColorAdjustment($hMemDC,$tCA)
    _GDI32_StretchBlt($hMemDC,0,0,$VirtualDskTop[0],$VirtualDskTop[1],$hMemDC,0,0,$VirtualDskTop[0],$VirtualDskTop[1],$SRCCOPY)

    _API_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, 0, 0)
    _API_ReleaseDC (0, $hScrDC)
    _API_SelectObject($hMemDC, $hOldBitmap)
    _API_DeleteObject($hBitmap)
    _API_DeleteDC ($hMemDC)
    EndFunc

    Func NoAltTab()
    ; Pseudofunktion um den Hotkey
    ; Alt-Tab zu verhindern
    EndFunc

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

    Func GetVirtualScreenSize()
    Local $aVSS[2] = [0, 0]

    $aVSS[0] = _API_GetSystemMetrics($SM_CXVIRTUALSCREEN)
    $aVSS[1] = _API_GetSystemMetrics($SM_CYVIRTUALSCREEN)

    If ($aVSS[0] = 0) Or ($aVSS[1] = 0) Then
    $aVSS[0] = 0
    $aVSS[1] = 0
    EndIf

    Return SetError(($aVSS[0] Or $aVSS[1]),0, $aVSS)
    EndFunc

    [/autoit]
  • StringRegExp Kudelmuddel

    • bernd670
    • 7. Juli 2007 um 17:46

    Hallo,

    so was?

    [autoit]

    $Filename = StringRegExp("c:\Sub1\Sub2\Sub3\Name.tst",".*\\(.*)",1) ; Dateiname mit Erweiterung
    MsgBox(0,"",$Filename[0])

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

    $Filename = StringRegExp("c:\Sub1\Sub2\Sub3\Name.tst",".*\\(.*)\..*",1) ; Dateiname ohne Erweiterung
    MsgBox(0,"",$Filename[0])

    [/autoit]
  • combobox unter w2k & NT nicht aufklappbar

    • bernd670
    • 6. Juli 2007 um 21:33

    Hallo,

    ich kenne das Problem auch, man muss nur, beim erstellen der Combobox, den Parameter height so groß setzen wie die Combobox, im heruntergeklappten Zustand, sein soll. Ich nehme meist den Wert 75, dass reicht für 3 Zeilen.

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™