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

Beiträge von Bitboy

  • Schlechte GDI+ Performance auf WinXP

    • Bitboy
    • 28. Juni 2009 um 15:44

    Wie wäre es denn damit?

    Hab 3 Zeilen geändert/Hinzugefügt Sind mit ;ÄNDERUNG !!!!! markiert.
    Läuft echt schnell. CPU AMD Athlon 1,25 GHz; 512 MB RAM; WinXP SP3

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/so
    #AutoIt3Wrapper_Res_SaveSource=n
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Run_After=upx.exe --best "%out%"
    #AutoIt3Wrapper_Run_After=del /f /q "Explosions (from AutoIteroids)_Obfuscated.au3"
    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <Array.au3>

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

    Opt('MustDeclareVars', 1)
    Global $hGUI, $hWnd, $hGraphic, $width, $height
    $width = @DesktopWidth * 0.75
    $height = @DesktopHeight * 0.75
    Global Const $explosion_step = 6, $explosion_length = ($width + $height) / 8, $explosion_max_amount = 20, $explosion_max_particle = 20
    Global $explosion_coordinate[$explosion_max_particle][6 * $explosion_max_amount] ; on/off, x, y, vx, vy, v
    Global $explosion_amount = 0
    ; Create GUI
    $hGUI = GUICreate("Explosions (from AUTOITEROIDS) using GDI+ by UEZ 2009!", $width, $height)
    $hWnd = WinGetHandle($hGUI)
    _GDIPlus_Startup()
    Global $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsClear($backbuffer)
    _GDIPlus_GraphicsSetSmoothingMode($backbuffer, 4)
    Global $pen_size = 1
    Global $pen_color = 0xAFFF8070
    Global $pen = _GDIPlus_PenCreate($pen_color, $pen_size)
    Global $test = _GDIPlus_BrushCreateSolid(0x9A000000) ; ÄNDERUNG !!!!
    GUISetState()

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

    Do
    ;_GDIPlus_GraphicsClear($backbuffer, 0x9A000000)
    _GDIPlus_GraphicsFillRect ($backbuffer,0, 0, $width, $height,$test) ; ÄNDERUNG !!!!
    If Mod(Random(1, 10, 1), 9) >= 5 Then ;
    Explosion_Init(Random(50, $width - 50, 1), Random(50, $height - 50, 1))
    EndIf
    Explosion()
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    Until Not Sleep(30) Or GUIGetMsg() = $GUI_EVENT_CLOSE

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

    ; Clean up resources
    _GDIPlus_PenDispose($pen)
    _GDIPlus_BrushDispose($test) ; ÄNDERUNG !!!!
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_Shutdown()

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

    Func Explosion_Init($ex, $ey) ;initialise explosion
    For $o = 0 To $explosion_step * ($explosion_max_amount - 1) Step $explosion_step ;fill array with coordinate of hit object
    If $explosion_coordinate[0][$o] <> 1 Then
    $explosion_coordinate[0][$o] = 1
    $explosion_coordinate[0][$o + 1] = $ex ;save x coordinate
    $explosion_coordinate[0][$o + 2] = $ey ;save x coordinate
    For $n = 0 To $explosion_max_particle - 1
    $explosion_coordinate[$n][$o + 1] = $explosion_coordinate[0][$o + 1] ;duplicate x start position of all explosion particles
    $explosion_coordinate[$n][$o + 2] = $explosion_coordinate[0][$o + 2] ;duplicate y start position of all explosion particles
    $explosion_coordinate[$n][$o + 3] = _Random(-7, 7, 1) ;create random x vector (explosion particle speed)
    $explosion_coordinate[$n][$o + 4] = _Random(-7, 7, 1) ;create random y vector (explosion particle speed)
    $explosion_coordinate[$n][$o + 5] = Abs($explosion_coordinate[$n][3 + $o]) + Abs($explosion_coordinate[$n][4 + $o]) ;add absolute distance of vectors x and y
    Next
    ExitLoop
    EndIf
    Next
    EndFunc ;==>Explosion_Init

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

    Func Explosion() ;draw explosions coordinates
    Local $q, $k
    $explosion_amount = 0
    For $k = 0 To $explosion_step * ($explosion_max_amount - 1) Step $explosion_step
    If $explosion_coordinate[0][$k] = 1 Then ;only draw active explosions
    $explosion_amount += 1
    For $q = 0 To $explosion_max_particle - 1
    $explosion_coordinate[$q][$k + 1] += $explosion_coordinate[$q][$k + 3] ;draw new x coordinate of a particle
    $explosion_coordinate[$q][$k + 2] += $explosion_coordinate[$q][$k + 4] ;draw new y coordinate of a particle
    $explosion_coordinate[$q][$k + 5] += Abs($explosion_coordinate[$q][$k + 3]) + Abs($explosion_coordinate[$q][$k + 4])
    If $explosion_coordinate[$q][$k + 5] <= $explosion_length Then ;draw until max. distance has been reached
    _GDIPlus_GraphicsDrawEllipse($backbuffer, $explosion_coordinate[$q][$k + 1], $explosion_coordinate[$q][$k + 2], 2, 2, $pen)
    Else ;when max. distance has been reached then set x vector and y vector to 0
    $explosion_coordinate[0][$k] = 0
    EndIf
    Next
    EndIf
    Next
    ConsoleWrite($explosion_amount & @CRLF)
    EndFunc ;==>Explosion

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

    Func _Random($w1, $w2, $w3 = 0) ;just to avoid 0 as random number
    Local $x = 0, $l1 = 0.50
    While $x = 0
    $x = Random($w1, $w2, $w3)
    If $x < $l1 And $x >= 0 Then $x += $l1
    If $x > -$l1 And $x <= 0 Then $x -= $l1
    WEnd
    Return $x
    EndFunc ;==>_Random

    [/autoit]

    Edit:
    Fügt man diese beiden Zeilen in die Do-Schleife vor das IF ein dann gibts ein buntes Feuerwerk :)
    $pen_color = "0xAF" & Hex(Random (1,255,1),2) & Hex(Random (1,255,1),2) & Hex(Random (1,255,1),2)
    _GDIPlus_PenSetColor($pen, $pen_color)

    BUUUUUUUUUUUUUUUUUUUNNNNT !! :D

  • OCR Programmieren

    • Bitboy
    • 28. Juni 2009 um 15:13

    Kann das Programm denn vllt Log-Dateien schreiben die du einfach ausliest?

  • OCR Programmieren

    • Bitboy
    • 28. Juni 2009 um 14:59

    Hast du mal mit dem AutoIT Window Info geguckt ob du nicht vllt doch den Text auslesen kannst?

  • Schlechte GDI+ Performance auf WinXP

    • Bitboy
    • 27. Juni 2009 um 22:23

    Ich würde auf einen Fehler in der GDI+ Datei in Windows XP tippen bzw in den DLLs die für das Zeichnen von Fenstern verantwortlich sind. Der "Trick" mit der Maustaste von Oscar funktioniert auch beim Butterfly-Beispiel. Es fängt exakt in dem Moment wo der Verschieberahmen auftaucht an, schnell zu laufen.

    Würde auch erklären warum es unter Vista funzt.

  • USB Massenspeicher sperren

    • Bitboy
    • 27. Juni 2009 um 21:16

    Da gibt es schon noch andere Wege, hängt aber von der Umgebung ab.

    Wird ein Domaincontroller verwendet und liegen da die Benutzerkonten?
    Dann könnte man mit Gruppenrichtlinien was machen das direkt für alle gilt, also am wenigsten Aufwand.

    Sind die Konten lokal kann man die Dateien über die Lokalen Gruppenrichtlinien sperren. Funktioniert aber nur mit XP Professionell.

  • Prozess mit Leerzeichen ?!

    • Bitboy
    • 27. Juni 2009 um 20:49

    Hätte nicht gedacht ,dass es so kompliziert wird.

    Werde es am Montag ausprobieren.

    Vielen Dank dafür!

  • Schlechte GDI+ Performance auf WinXP

    • Bitboy
    • 27. Juni 2009 um 20:42

    Wenn man den Befehl _GDIPlus_GraphicsClear($backbuffer, 0x9A000000) in der Do-Schleife auskommentiert läuft es deutlich schneller, kannst du den ersetzen?

    Edit: GTA Spider war schneller...

  • Prozess mit Leerzeichen ?!

    • Bitboy
    • 26. Juni 2009 um 11:18

    Ich verwende das Programm strukted 0.99c und benötige eine Überprüfung ob der Prozess bereits existiert.

    Im Windows Taskmanager wird der Prozess mit einem (mehreren?) Leerzeichen am Anfang dargestellt.
    In der Prozessliste die durch ProcessList erstellt wird taucht es gar nicht auf.

    Über den Windows Titel kann ich auch nicht prüfen ob das Programm gestartet ist das InfoTool zeigt keinen Titel an.

    Jemand eine Idee was man noch prüfen könnte?

  • String auf gültigen Ordnernamen prüfen

    • Bitboy
    • 26. Juni 2009 um 10:23

    Klasse! Vielen Dank dafür!

  • String auf gültigen Ordnernamen prüfen

    • Bitboy
    • 26. Juni 2009 um 09:51

    Unter Windows sind folgende Zeichen nicht als Teil von einem Ordnername erlaubt:
    /\:*?"<>|


    Wie kann ich am einfachsten prüfen ob eines der Zeichen in einem String vorkommt?
    Geht das mit StringRegExp ? Oder bleibt mir nur die Variante mit StringInStr ?

    Gibt es eine Möglichkeit zu prüfen ob der String nur aus Groß und Kleinbuchstaben besteht?
    Bräuchte das als Fehlerbehandlung. Der Benutzer soll nur seinen Namen eintragen, es könnte ja trotzdem sein, dass er aus versehen auf ein Sonderzeichen oder eine Zahl kommt.

  • Textausgaben von HyperTerminal auswerten

    • Bitboy
    • 25. Juni 2009 um 22:31

    Kenne mich zwar nicht Hyper Terminal aus aber unter Übertragung kannst du anscheinend auch eine Textdatei erstellen lassen die du dann einfach ausliest.

  • Inhalt von Netzlaufwerk kopieren/verschieben/löschen

    • Bitboy
    • 25. Juni 2009 um 18:03

    Hab vorhin auch noch einen Lösungsversuch gestartet, konnte ich aber noch nicht testen.

    Werde mir auf jeden Fall morgen auch mal dein Script in Ruhe ansehen. Thx

  • Inhalt von Netzlaufwerk kopieren/verschieben/löschen

    • Bitboy
    • 25. Juni 2009 um 12:21

    Hallo ich bräuchte mal Hilfe.

    Ich benötige eine Funktion um alle Unterordner und Dateien eines Ordners(Netzlaufwerk) zu kopieren/verschieben/löschen.

    Zum löschen hatte ich folgende Funktion geschrieben, Funktioniert aber nicht ganz da zwar alle Dateien gelöscht werden (Auch in Unterordnern) aber die Unterordner selbst nicht.

    Spoiler anzeigen
    [autoit]

    Func _DelSubDirFiles($searchpath)
    Local $Search, $File, $FullFilePath, $FileAttributes

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

    $Search = FileFindFirstFile($searchpath & "\*.*")

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

    While 1
    ;Keine (weitere) Datei gefunden => Der Ordner ist leer
    If $Search = -1 Then
    ExitLoop
    EndIf

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

    ;Nächste Datei finden
    $File = FileFindNextFile($Search)
    If @error Then ExitLoop ;Keine weitwere Datei gefunden

    ;Dateiattribute ermitteln
    $FullFilePath = $searchpath & "\" & $File
    $FileAttributes = FileGetAttrib($FullFilePath)

    ;Prüfen ob Datei ein Ordner ist
    If StringInStr($FileAttributes,"D") Then
    ;MsgBox(0,"Debug","Ordner: " & $FullFilePath)
    DirRemove($FullFilePath,1)
    DirRemove($FullFilePath)
    Else
    FileSetAttrib($FullFilePath,"-R") ;Schreibschutz bei Dateien aufheben
    FileDelete($FullFilePath); Datei löschen
    EndIf
    WEnd
    EndFunc

    [/autoit]

    Jemand eine Idee?

  • Prüfen ob eine Datei in Benutzung ist

    • Bitboy
    • 24. Juni 2009 um 14:00

    Mist. funktioniert leider nur mit MS Office Dokumenten. Bei anderen Dateien die mit Notepad oder so erstellt worden sind funktioniert es nicht mehr :(

  • Prüfen ob eine Datei in Benutzung ist

    • Bitboy
    • 23. Juni 2009 um 10:38

    Hab grade im Englischen Forum folgende Funktion gefunden:

    Spoiler anzeigen
    [autoit]

    ;from this post:
    ;Need help with copy verification
    ;http://www.autoitscript.com/forum/index.php?showtopic=53994
    ;===============================================================================
    ;
    ; Function Name: _FileInUse()
    ; Description: Checks if file is in use
    ; Syntax.........: _FileInUse($sFilename, $iAccess = 1)
    ; Parameter(s): $sFilename = File name
    ; Parameter(s): $iAccess = 0 = GENERIC_READ - other apps can have file open in readonly mode
    ; $iAccess = 1 = GENERIC_READ|GENERIC_WRITE - exclusive access to file,
    ; fails if file open in readonly mode by app
    ; Return Value(s): 1 - file in use (@error contains system error code)
    ; 0 - file not in use
    ; -1 dllcall error (@error contains dllcall error code)
    ; Author: Siao
    ; Modified rover - added some additional error handling, access mode
    ; Remarks _WinAPI_CreateFile() WinAPI.au3
    ;===============================================================================
    Func _FileInUse($sFilename, $iAccess = 0)
    Local $aRet, $hFile, $iError, $iDA
    Local Const $GENERIC_WRITE = 0x40000000
    Local Const $GENERIC_READ = 0x80000000
    Local Const $FILE_ATTRIBUTE_NORMAL = 0x80
    Local Const $OPEN_EXISTING = 3
    $iDA = $GENERIC_READ
    If BitAND($iAccess, 1) <> 0 Then $iDA = BitOR($GENERIC_READ, $GENERIC_WRITE)
    $aRet = DllCall("Kernel32.dll", "hwnd", "CreateFile", _
    "str", $sFilename, _ ;lpFileName
    "dword", $iDA, _ ;dwDesiredAccess
    "dword", 0x00000000, _ ;dwShareMode = DO NOT SHARE
    "dword", 0x00000000, _ ;lpSecurityAttributes = NULL
    "dword", $OPEN_EXISTING, _ ;dwCreationDisposition = OPEN_EXISTING
    "dword", $FILE_ATTRIBUTE_NORMAL, _ ;dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL
    "hwnd", 0) ;hTemplateFile = NULL
    $iError = @error
    If @error Or IsArray($aRet) = 0 Then Return SetError($iError, 0, -1)
    $hFile = $aRet[0]
    If $hFile = -1 Then ;INVALID_HANDLE_VALUE = -1
    $aRet = DllCall("Kernel32.dll", "int", "GetLastError")
    ;ERROR_SHARING_VIOLATION = 32 0x20
    ;The process cannot access the file because it is being used by another process.
    If @error Or IsArray($aRet) = 0 Then Return SetError($iError, 0, 1)
    Return SetError($aRet[0], 0, 1)
    Else
    ;close file handle
    DllCall("Kernel32.dll", "int", "CloseHandle", "hwnd", $hFile)
    Return SetError(@error, 0, 0)
    EndIf
    EndFunc

    [/autoit]

    Werde deine Funktion auch noch ausprobieren.

  • Prüfen ob eine Datei in Benutzung ist

    • Bitboy
    • 23. Juni 2009 um 10:15

    Gibt es eine einfache Möglichkeit zu prüfen ob eine Datei gerade in Benutzung ist und deswegen nicht verschoben werden kann?
    FileGetAttrib liefert leider nichts brauchbares. Die Datei verschieben und den Rückgabewert prüfen ist auch keine Lösung für mich da mehrere Dateien aus unterschiedlichen Ordnern verschoben werden müssen und die Regel gilt, entweder alle verschieben oder gar keine.

  • Installation auf Netzwerk-Rechner

    • Bitboy
    • 26. Mai 2009 um 11:20

    versuche mal psexec mit dem parameter "-i 0" (null) auszuführen ohne anführungszeichen. Damit sollte das auszuführende Programm eigentlich sichtbar ausgeführt werden. Funzt jedenfalls bei mir

  • Installation auf Netzwerk-Rechner

    • Bitboy
    • 26. Mai 2009 um 10:06

    ich hab es zwar so auch noch nicht versucht aber müssten die angaben nicht "domäne\admin" und "domäne\host" lauten?

    als alternative kannst du das script so machen dass es die installation auf dem rechner ausführt wo es gestartet wurde und mit psexec schickst du es dem anderen rechner

  • Schleifenproblem

    • Bitboy
    • 24. Mai 2009 um 16:24

    Probier mal so.
    Wenn ich den Code von Bernd richtig verstehe würden Zeichenumbrüche nur entfernt wenn sie am Ende der Zeile stehen, da du aber die Textdatei nicht zeilenweise einliest bleibt die Funktion ohne Wirkung.

    Spoiler anzeigen
    [autoit]

    $test = FileRead("eingang.txt"); "1A2B3C4D5E6"
    $test = StringReplace ( $test, @CRLF, "" )
    $test = StringReplace ( $test, @CR, "" )
    $test = StringReplace ( $test, @LF, "" )
    .
    .

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

    $pass = FileRead("passwort.txt"); "94736"
    $pass = StringReplace ( $pass, @CRLF, "" )
    $pass = StringReplace ( $pass, @CR, "" )
    $pass = StringReplace ( $pass, @LF, "" )

    [/autoit]
  • frage zu guisetbkcolor

    • Bitboy
    • 24. Mai 2009 um 16:03

    Wenn ich dich richtig verstanden habe müsste es ECE9D8 sein.
    Wenn du noch mehr Farben brauchst empfehle ih das Programm ColorPic (Freeware)

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™