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

Beiträge von UEZ

  • DeCompile Schutz

    • UEZ
    • 5. Juli 2009 um 12:42

    Den absoluten Schutz wird es nie geben, denn jeder Code ist "crackbar"! Du kannst den Reverse Engineering Leuten höchstens das Leben schwerer machen!

    Z.B. indem du kannst den Obfuscator benutzen, um deinen Code zu verfremden, so dass dein Code viel schwieriger zu lesen ist!

    Es gibt auch Tools (wie z.B. LONER), die den Code dahin gehend verändern, so dass Decompiler es schwer haben ihn zurück zu übersetzen!

    Gruß,
    UEZ

  • Matrix-Funktionen auf PNG-Bild in einem "WS_EX_LAYERED"-Fenster anwenden

    • UEZ
    • 5. Juli 2009 um 12:29

    Ich habe das im englischen AutoIt Forum gesehen. Vielleicht hilft es dir ja!

    Gruß,
    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 3. Juli 2009 um 21:04

    Ich glaube, dass ganze hängt an nicht am Alpha Channel, sondern eher an _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)!

    Ich habe mal eine andere Variante benutzt und es funzt ohne Probleme, auch mit aktivem Alpha Channel -> _GDIPlus_GraphicsClear($backbuffer, 0x9A000000)

    Keine Ahnung, warum GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height) auf WinXP Kisten Probleme bereitet!

    Gruß,
    UEZ

    PS: mmmhhhh, es sieht so aus, als ob kein Alpha Channel mit der neuen Methode möglich ist! :huh: , denn wenn der Wert für den Alpha Channel sich ändert, dann passiert nichts! :thumbdown: Und ich habe mich gefreut einen Workaround gefunden zu haben :(

  • Problem mit Array dimension

    • UEZ
    • 30. Juni 2009 um 13:21

    Probiere es doch mal mit

    ReDim $rkategorie[$count + 1]

    in Zeile 12.

    Gruß,
    UEZ

  • GDI+ - Bild erstellen und Pixel zeichnen

    • UEZ
    • 30. Juni 2009 um 10:58

    Hier ein kleines Beispiel:

    Spoiler anzeigen

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>


    Global Const $width = 100
    Global Const $height = 100
    Global $graphics, $backbuffer, $bitmap, $Pen, $i, $pi_div_180 = 4 * ATan(1) / 180
    Global $radius_x = ($width * 0.5) * 0.90, $radius_y = ($height * 0.5) * 0.90
    Global $title = "GDI+ Beispiel"

    Opt("GUIOnEventMode", 1)
    $hwnd = GUICreate($title, $width, $height, -1, -1, BitOR($WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP))
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    GUISetState()

    _GDIPlus_Startup()
    $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    $pen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)

    Do
    _GDIPlus_GraphicsClear($backbuffer)
    _GDIPlus_GraphicsDrawEllipse($backbuffer, $width * 0.5 + Cos($i * $pi_div_180) * $radius_x, $height * 0.5 + Sin($i * $pi_div_180) * $radius_y, 1, 1, $Pen)
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    $i += 1
    If $i = 360 Then $i = 0
    Sleep(10)
    Until False

    Func close()
    _GDIPlus_PenDispose($pen)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_Shutdown()
    WinClose($hwnd)
    Exit
    EndFunc

    Gruß,
    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 29. Juni 2009 um 15:50

    Das ganze nun bunt! :P

    Wenn jeder Pixel bunt sein soll, dann einfach Zeile 87 auskommentieren und entsprechend Zeile 94 aktivieren!


    Gruß,
    UEZ

    PS: In Zeile 47 _GDIPlus_GraphicsClear($backbuffer, 0xA0000000) auf _GDIPlus_GraphicsClear($backbuffer, 0xFF000000) setzen oder den Workaround von Bitboy anwenden, falls das oben beschriebene Problem auftritt!

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 28. Juni 2009 um 18:01

    Nette Idee mit dem Workaround, aber es flimmert immer wieder mal kurz weiß auf!

    Wenn ich ein bißchen mehr Zeit finde, werde ich die Partikel individual färben, d.h. jedes Pixel bekommt seine eigene Farbe :P

    In meinem Kopf schwirrt schon seit längerem der Gedanke, ein Feuerwerk zu coden. Mal sehen, wann ich die Zeit dafür finde.

    Gruß,
    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 28. Juni 2009 um 12:21

    In der virtuellen Maschine WinXP und Win2003 x64 läuft's sauber! ?(

    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 27. Juni 2009 um 22:52
    Zitat von Andy


    Habe es mit einem Win7, laufend in einer Virtualbox getestet, funzt einwandfrei.Seltsam, dass es bisher noch keinem aufgefallen ist.

    Mir ist es im Prinzip schon vor längerem aufgefallen (seit den GDI+ Codes), aber habe mir keine so großen Gedanken gemacht. Heute wollte ich mal nachfragen, woran es liegen kann!

    Liegt wohl am Alpha Channel unter WinXP. Warum? Das ist noch zu klären.

    Habe im Developer Chat mal einen Topic dazu aufgemacht. Mal sehen, was die Entwickler sagen!

    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 27. Juni 2009 um 21:51
    Zitat von Andy

    Hi,
    statt

    [autoit]

    _GDIPlus_GraphicsClear($backbuffer, 0x9A000000)

    [/autoit]


    mal die farbe auskommentieren

    [autoit]

    _GDIPlus_GraphicsClear($backbuffer)

    [/autoit]


    und es "brummt"

    *edit* blöd, wenn man erst nach über ner stunde das posting abschickt....längst gelöst...sry

    Alles anzeigen

    Das ist schon klar, aber was ist, wenn man eine Alpha Blendeffekt haben möchte? Manche Effekte kommen mit dem Alpha Channel erst richtig rüber!
    Schau' mal hier: Butterfly Curve! Wenn du in Zeile 46 z.B. den Wert von 0x0F000000 auf 0xFF000000) setzt, dann "brummt"'s, aber der ursprungliche Effekt ist weg!

    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 27. Juni 2009 um 21:14
    Zitat von Oscar

    Ich habe noch etwas merkwürdiges herausgefunden. Wenn ich Dein (UEZ) unverändertes Script nehme und starte, dann läuft es ja erstmal wie in Zeitlupe.
    Lasse ich es weiter laufen und klicke ein anderes Fenster (bei mir ist nebenbei die AutoIt-Hilfe offen) auf der Titelleiste an und halte die linke Maustaste fest, dann werden die Explosionen plötzlich richtig schnell angezeigt.
    Wenn ich die Maustaste dann wieder loslasse, sind die Explosionen wieder in Zeitlupe.

    Stimmt! Vielleicht wirklich ein Bug!

    Wie läuft eigentlich GDI+ z.B. aus VB mit Alphachannel? Auch so langsam?

    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 27. Juni 2009 um 20:58

    Krass, liegt wirklich am Alphachannel!

    Aber wieso läuft das Ding "flüssig" auf meinen beiden Notebooks (Vista x32) mit Alphachannel -> 9A :?:

    Ist mir eigentlich nur per Zufall aufgefallen, da ich selten an der Kiste hocke - eigentlich nur zum Zocken und das auch nur ab und wann! :D

    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 27. Juni 2009 um 20:23
    Zitat von FunH@cker

    Also bei mir läuft es flüssig (win XP,AMD Athlon X2 [4X3 GHZ] ,nVidia 8600GT )

    Aber es verbraucht verdammt viele recorsen :|


    Ach ja kommt der Thread nich ins Forum Off-Topic ?

    Du kannst an der Performance Schraube drehen, in dem du die Werte
    $explosion_max_amount = 20, $explosion_max_particle = 20 herab setzt.

    Wenn der Thread besser ins Off-Topic passt, dann ab dort hin damit.

    Mmmhhh, also WinXP kann also auch nicht das Problem sein! Sehr merkwürdig ?(

    Gruß,
    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 27. Juni 2009 um 20:15
    Zitat von Oscar

    Die schlechte Performance kann ich bestätigen. Mein System: WinXP, AMD X4 940, ATI HD3870


    Den Anhang nicht in den Beitrag einfügen, sondern nur als Anhang stehen lassen.

    Danke für die Info -hab' mir einen Wolf gesucht...

    Zurück zum Problem. Vielleicht hängt es ja an WinXP, denn du benutzt ja eine ATI Karte.
    Auf meinen beiden Notebooks läuft Vista x32. Auf dem einen Notebook ist sogar auch eine nVidia Karte (NVS 140M).

    Merkwürdig!

    UEZ

  • Schlechte GDI+ Performance auf WinXP

    • UEZ
    • 27. Juni 2009 um 19:49

    Hi,

    wenn ich das GDI+ Programm auf meiner Kiste mit nVidia 8800GT laufen lasse, dann ist die Performance so schlecht, dass man die Pixel einzeln zählen kann.

    Kann jemand das auch bestätigen?

    Meine Kiste:
    WinXP Pro SP3
    Intel Core Duo @ 2.5 GHz
    nVidia 8800GT (neueste Treiber! War auch genauso mit Älteren)

    Mit einigen anderen GDI+ Codes, wie z.B. AUTOITEROIDS, und auf meinen 2 Notebooks gibt es keine Probleme!

    Hier der Code:

    Spoiler anzeigen

    #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>

    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)
    GUISetState()

    Do
    _GDIPlus_GraphicsClear($backbuffer, 0x9A000000)
    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

    ; Clean up resources
    _GDIPlus_PenDispose($pen)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_Shutdown()


    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

    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

    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

    Kann sich jemand vorstellen, warum das so ist?

    Gruß,
    UEZ

    PS: wie kann ich die Anzahl der Downloads von Anhängen (s.o.) darstellen? ?(

  • Gdi+ Clone/Save

    • UEZ
    • 20. Juni 2009 um 16:48

    Viele Wege führen nach Rom, hier ein weiterer Weg:

    Spoiler anzeigen


    #include <GDIplus.au3>
    _GDIPlus_Startup()
    Global $bitmap_from_file = _GDIPlus_BitmapCreateFromFile("c:\windows\System32\oobe\info\background_wc.png")
    Global Const $iX = _GDIPlus_ImageGetWidth($bitmap_from_file)
    Global Const $iY = _GDIPlus_ImageGetHeight($bitmap_from_file)
    Global Const $width = $iX
    Global Const $height = 2 * $iY
    Global $hwnd = GUICreate("", $width, $height)
    Global $graphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    Global $bitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $graphics)
    Global $backbuffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsDrawImage($backbuffer, $bitmap_from_file, 0, 0)
    _GDIPlus_GraphicsDrawImage($backbuffer, $bitmap_from_file, 0, $iY)
    GUISetState()

    Do
    _GDIPlus_GraphicsDrawImageRect($graphics, $bitmap, 0, 0, $width, $height)
    Until GUIGetMsg() = -3 * Sleep(30)

    _GDIPlus_ImageSaveToFile($bitmap, @ScriptDir & "\Test.bmp")
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_GraphicsDispose($graphics)
    _GDIPlus_GraphicsDispose($backbuffer)
    _GDIPlus_Shutdown()

    Exit

    Gruß,
    UEZ

  • Gdi+ Clone/Save

    • UEZ
    • 20. Juni 2009 um 13:13
    Zitat von ChaosKeks

    Guten Morgen!
    Ich poste einfach mal, weil ich eine totale niete in gdi+ bin und zu faul bin um projekte wie autoitoerids durchzuschauen...
    Wie kann ich ein Pic nehmen, dann clonen und unter das ursprungsbild tun und dann wieder speichern?

    Clonen und Speichern ist eigendlich kla (_GDIPlus_BitmapCloneArea + _GDIPlus_ImageSaveToFile) .. trotzdem hab ich den dreh noch nich raus :thumbdown:

    Naja sollte für die Gdi-Experten doch hoffentlich nicht schwer sein!

    -Chaos

    Moin,

    in AUTOITEROIDS wird du nicht weiter kommen, denn da werden "nur" rudimäntere GDI+ Befehle benutzt! ;)

    Wenn ich dich richtig verstanden habe, willst du ein Bild laden und es clonen, so dass das Bild unter dem Original Bild liegt.

    Schaue doch einfach mal unter http://www.autoitscript.com/forum/index.php?showtopic=87200 das Beispiel #07 Visualization: Analog Meter dir genauer an. Ich lade das Bild und clone es auf die rechte Seite!

    Zum Speichern kannst du den Befehl _GDIPlus_ImageSaveToFile($Bitmap, @ScriptDir & "\Bild.jpg") benutzen!

    Ich hoffe, dass ich dir weiter helfen konnte!

    Gruß,
    UEZ

  • [SPIEL] AUTOITEROIDS v1.019 (Final): ein Klon des Arcade Klassikers Asteroids von 1979 (Atari) (Stand: 2016-01-14)

    • UEZ
    • 15. Juni 2009 um 08:19

    @ChaosKeks & AutoBert: Danke für das Feedback. :) Ich freue mich, dass euch das Spiel gefällt.

    Zu den Tasten: vielleicht sollte ich ein Settingsmenue schreiben, wo jeder die Tasten so legen kann, wie er/sie möchte (btw, Alt Gr schießt auch)!

    autoBert: was passiert beim Streiken deiner Strg Taste? Kein Schießen mehr möglich?

    Zu den Cheats: da der Code offen ist, kann ja ehe jeder schummeln und den Highscore so drehen, wie er will. Mit den Cheats macht es kaum Spaß!
    Ich habe sie zum testen benötigt und einfach drinne gelassen, auch um zu sehen, ob sie jemanden auffallen. :whistling:

    Ansonsten viel Spaß beim Ballern! ;)

    Gruß,
    UEZ

  • [SPIEL] AUTOITEROIDS v1.019 (Final): ein Klon des Arcade Klassikers Asteroids von 1979 (Atari) (Stand: 2016-01-14)

    • UEZ
    • 14. Juni 2009 um 21:47

    Ich wollte nur mitteilen, dass ich jetzt die finale Version des Spiels fertig gestellt habe!

    Falls jemand noch interesse hat, einfach im ersten Post nachschauen und herunterladen!

    Viel Spaß beim Ballern!

    UEZ

  • Auto Ball Spiel

    • UEZ
    • 1. Juni 2009 um 19:31

    Ein nettes Tutorial über Kollision kannst du hier finden: http://www.johanvanmol.org/content/category/6/23/37/ (Collision detection & bouncing part 1-3). Ist zwar für Flash, aber sehr gut erklärt (in Englisch)!

    Kollision allgemein ist sehr komplex und nicht trivial, wobei die Kollision mit Kugel die einfachste Variante ist!

    AUTOITEROIDS habe ich nun zu 99% fertig gestellt - es fehlt nur noch ein "Credit Intro".

    Gruß,
    UEZ

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™