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

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 21. September 2016 um 16:35

    Ich wollte keinen neuen Thread dafür aufmachen, also hier der Battle GDI vs GDI+ anhand eines Tunnel Fluges.

    Tunnel Flight - WipeOut Style.jpg

    Original JS: http://js1k.com/2010-first/demo/763


    Im Anhang unten die Source Codes + kompilierte Exe Dateien.

    Dateien

    Tunnel Flight - WipeOut Style.zip 995,74 kB – 392 Downloads
  • gibts MsgBoxen in anderer als der Systemsprache?

    • UEZ
    • 8. September 2016 um 21:19

    Du könntest immer Englisch als Sprache wählen:

    AutoIt
    #include <WinAPI.au3>
    Opt("MustDeclareVars", 1)
    Global $hHookMsgBox
    _MsgBoxEnglish(0, "Title", "Text")
    _MsgBoxEnglish(1, "Title", "Text")
    _MsgBoxEnglish(2, "Title", "Text")
    _MsgBoxEnglish(3, "Title", "Text")
    _MsgBoxEnglish(4, "Title", "Text")
    _MsgBoxEnglish(5, "Title", "Text")
    _MsgBoxEnglish(6, "Title", "Text")
    _MsgBoxEnglish(7, "Title", "Text")
    #region English Button text for MsgBox!!
    ;##########################################################
    Func _MsgBoxEnglish($flag, $title, $text, $timeout = 0, $hwnd = 0)
     Local $hProcMsgBox = DllCallbackRegister("CbtHookProcMsgBox", "int", "int;int;int")
     Local $TIDMsgBox = _WinAPI_GetCurrentThreadId()
     $hHookMsgBox = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($hProcMsgBox), 0, $TIDMsgBox)
     Local $iRet = MsgBox($flag, $title, $text, $timeout, $hwnd)
     _WinAPI_UnhookWindowsHookEx($hHookMsgBox)
     DllCallbackFree($hProcMsgBox)
     Return $iRet
    EndFunc   ;==>_MsgBoxEnglish
    Func CbtHookProcMsgBox($nCode, $wParam, $lParam, $hHookMsgBox)
     Local $RET = 0, $hBitmap = 0, $xWnd = 0
     Local $sButtonText
     If $nCode < 0 Then
      $RET = _WinAPI_CallNextHookEx($hHookMsgBox, $nCode, $wParam, $lParam)
      Return $RET
     EndIf
     Switch $nCode
      Case 5 ;5=HCBT_ACTIVATE
       _WinAPI_SetDlgItemText($wParam, 1, "OK")
       _WinAPI_SetDlgItemText($wParam, 2, "Cancel")
       _WinAPI_SetDlgItemText($wParam, 3, "&Abort")
       _WinAPI_SetDlgItemText($wParam, 4, "&Retry")
       _WinAPI_SetDlgItemText($wParam, 5, "&Ignore")
       _WinAPI_SetDlgItemText($wParam, 6, "&Yes")
       _WinAPI_SetDlgItemText($wParam, 7, "&No")
       _WinAPI_SetDlgItemText($wParam, 8, "Help")
       _WinAPI_SetDlgItemText($wParam, 10, "&Try Again")
       _WinAPI_SetDlgItemText($wParam, 11, "&Continue")
     EndSwitch
     Return
    EndFunc   ;==>CbtHookProcMsgBox
    Func _WinAPI_SetDlgItemText($hDlg, $nIDDlgItem, $lpString)
     Local $aRet = DllCall('user32.dll', "int", "SetDlgItemText", _
       "hwnd", $hDlg, _
       "int", $nIDDlgItem, _
       "str", $lpString)
     Return $aRet[0]
    EndFunc   ;==>_WinAPI_SetDlgItemText
    ;##########################################################
    #endregion English Button text for MsgBox!!
    Alles anzeigen
  • Speicherleck / AutoIT Hardcrash bei laden von binären Bilddateien

    • UEZ
    • 5. September 2016 um 21:37
    Zitat von KriZza

    Func _Set_PreviewPic()
    For $i = 1 to 9
    _GDIPlus_Startup()
    Global $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(Binary($pic), True)
    _WinAPI_DeleteObject(GUICtrlSendMsg($DemoPicture[$i -1], 0x0172, 0, $Bmp_Logo))
    ;~ _GDIPlus_BitmapDispose($Bmp_Logo)
    _GDIPlus_Shutdown()
    Next
    EndFunc

    Alles anzeigen
    • In einer Schleife _GDIPlus_Startup() / _GDIPlus_Shutdown() macht keinen Sinn!
    • $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(Binary($pic), True) liefert dir ein GDI Bitmap Handle zurück, was inkompatible zu GDI+ Bitmap Handles ist!
    • GUICtrlSendMsg($DemoPicture[$i -1], 0x0172, 0, $Bmp_Logo) gibt dir wiederum ein GDI Bitmap Handle zurück, das mit _WinAPI_DeleteObject freigegeben werden muss
    • Anstelle von _GDIPlus_BitmapDispose($Bmp_Logo) musst du _WinAPI_DeleteObject($Bmp_Logo) nehmen, um den Memory Leak zu unterbinden, ansonsten CRASH
  • Speicherleck / AutoIT Hardcrash bei laden von binären Bilddateien

    • UEZ
    • 5. September 2016 um 15:41

    "Load_BMP_From_Mem" ist seit längerem als "_GDIPlus_BitmapCreateFromMemory" integriert. Probiere es mal damit.

    Abgesehen davon bewirkt TimerDiff($timer) > 1 immer, dass dein Skript 100% auf einem Core CPU Last erzeugt, aber ein Memory Leak kann ich nicht mit _GDIPlus_BitmapCreateFromMemory sehen.

  • Darstellungsproblem Bei Text (Label) auf GUI

    • UEZ
    • 1. September 2016 um 22:19

    Probiere mal eine dunklere Transparent Farbe:

    AutoIt
    GUISetBkColor(0x101010, $hGUI)
    	_WinAPI_SetLayeredWindowAttributes($hGUI, 0x101010, 255)
  • UDF - TrueType Fonts im Script mitgeben und verwenden

    • UEZ
    • 25. August 2016 um 11:55

    Bitte sehr.

    Dateien

    Generate.au3 1,66 kB – 292 Downloads
  • eingefügte Grafik skalieren oder skaliert einfügen

    • UEZ
    • 24. August 2016 um 22:48

    Schnappschüsse kannst auch direkt aus AutoIt machen -> _ScreenCapture_Capture.

    Da _ScreenCapture_Capture GDI Bitmaps erstellt, kannst du diese in GDI+ umwandeln, um die danach zu skalieren -> _GDIPlus_BitmapCreateFromHBITMAP.

    Skalieren kannst du mit _GDIPlus_ImageScale, _GDIPlus_ImageResize. Das Result ist ein GDI+ Bild, d.h. du musst es wieder zurück in GDI umwandeln -> _GDIPlus_BitmapCreateHBITMAPFromBitmap.

    Diese GDI Bild kannst du nun in den Clipboard kopieren und dann bequem in PP einfügen.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 24. August 2016 um 21:34
    Zitat von Xorianator

    Du kannst bereits SIMD Befehle von Hause aus nutzen, das macht sogar @UEZ manchmal, wenn ich richtig sah, da er die MMX Technologie benutzt.

    In diesem Beispiel "GDI Liquid Pixels" bringen die manuellen Sin/Cos Assembler Versionen ca. 25% mehr Leistung, aber dafür auf Kosten der Genauigkeit, ist aber für dieses Beispiel irrelevant.
    Für hoch kritische Anwendungen, z.B. Raumfahrt, könnte es zu Problemen führen, dass die Werte zu "ungenau" sind.

    Ich habe leider nicht das Wissen bezüglich Compilerbau, so dass ich nicht qualitativ bewerten kann, ob der FB Compiler seinen Arbeit gut erledigt, aber da ist für spezielle Bereiche, wie grafische Verarbeitung, noch Luft nach oben.

    Wie bereits erwähnt, müssten man den gleichen Codeaufbau mit verschiedenen Programmiersprachen vergleichen, was der Compiler da noch heraus kitzelt.
    Der Vergleich mit AutoIt war da nur Just for Fun und eher unfair. Man vergleicht ja auch nicht ein Kleinwagen mit einem Sportwagen bezüglich Geschwindigkeit, z.B. Corsa vs. Ferrari.

  • eingefügte Grafik skalieren oder skaliert einfügen

    • UEZ
    • 24. August 2016 um 16:48

    Wo möchtest du die Gfx einfügen?

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 24. August 2016 um 16:36

    Auf meinem Schlepptop läuft's mit ca. 20 FPS.

    CPU: Intel Core i5-4300U
    Gfx: Intel HD Graphics 4400

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 24. August 2016 um 16:05
    Zitat von autoBert

    Ich erinnere mich an ein Script (mit Dali als Bild) bei dem das Gesicht sich verändert. Es handelt sich um autoit.de/index.php/Attachment/83460-Wave-v1-3-2-au3/ in dem ich spaßhalber Dali (aus CosinusBrothers) eingesetzt habe, läuft bei mir mit 2 FPS.

    Da werden nur die Zeilen versetzt dargestellt und in diesem FB Beispiel jedes einzelne Pixel. Je mehr Pixel desto langsamer.

    Aber ja, ähnlich sieht es aus. ;)

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 24. August 2016 um 13:11
    Zitat von autoBert

    Afair hast du aber schon einmal ein ähnliches mit AutoIt geschriebenes Skript eingestellt.

    Nun ja, definiere "ähnliches". Über 1000 Pixel nativ in AutoIt macht keinen Sinn, es sei denn, du codest mit Inline Assembler, das aber erst mal gelernt werden will.

    7 FPS ist nicht besonders schnell. Da nehme ich an, dass deine CPU nicht die Schnellste ist.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 24. August 2016 um 09:53

    Hmmm, die Exe zu GDI Liquid Pixels sollte eigentlich nicht funzen, da der Pfad zu dem Bild fest eingelinkt wurde und keiner hat sich gemeldet.
    Ich dachte, dass __PATH__ & "\salvador-dali 528x528.png" ein Makro ist, ist aber nicht so.

    Ich habe jetzt den Code angepasst, sodass nur im gleichen Pfad geschaut wird, d.h. sollte jetzt funzen.

    Bitte mal testen!

  • Kicktipp Bundesliga 2016/2017 Wetttippen! Jetzt mitmachen :)

    • UEZ
    • 24. August 2016 um 09:01
    Zitat von autoiter

    Hi Leute,

    nun schmeiße ich meinen Handschuh in die Runde. Äh, in das Dreieck. Rainer_Zufall hat ja wohl keine Chance gegen geballtes Fußballwissen..

    Ich würde mich auch freuen, wenn noch ein paar Leute teilnehmen ;)

    :thumbup:

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 24. August 2016 um 09:00
    Zitat von alpines

    Wie wäre es denn mal mit Benchmarks die der realen Welt nahekommen?
    Z.B. Textverarbeitung, Dateien benennen/verschieben, Netzwerkleistung (TCP/UDP).

    Interessanter wäre der Vergleich zwischen den BASIC Derivaten bzw. mit anderen Compiler Sprachen, denn der direkte Vergleich mit AutoIt macht keinen richtigen Sinn.

    Da gebe ich Andy recht, dass man Tests wählen sollte, die keine externen Abhängigkeiten haben, damit das Ergebnis nicht verfälscht wird.

  • Battle: Autoit vs. FreeBasic - Runde 1+2+3

    • UEZ
    • 23. August 2016 um 23:27

    Hier noch ein weiteres Beispiel -> GDI Liquid Pixels (siehe Post #1) mit 278784 sich bewegenden Pixels. In AutoIt brauche ich erst gar nicht damit anzufangen. :*

    Danke an Eukalyptus für die schneller Sin/Cos ASM Funktionen! :rock:

    Momentan versuche ich _GDIPlus_BitmapCreateFromMemory in FB zu implementieren... ?(

  • UDF - TrueType Fonts im Script mitgeben und verwenden

    • UEZ
    • 22. August 2016 um 17:49

    Guckst du

    AutoIt
    _GDIPlus_FontPrivateAddMemoryFont()
    _WinAPI_AddFontMemResourceEx()

    ^^

  • Kicktipp Bundesliga 2016/2017 Wetttippen! Jetzt mitmachen :)

    • UEZ
    • 19. August 2016 um 18:31

    Das Interesse ist ja riesig - nicht alle auf einmal bitte. :(

    Wird wohl wieder nur ein Duell.

  • GDI+ layered gui (transparent)

    • UEZ
    • 18. August 2016 um 21:44

    Hier wird ein GDI+ image nacg GDI konvertiert und per _WinAPI_UpdateLayeredWindow in der GUI angezeigt. Dazu benötigst du kein Backbuffer.

  • GDI+ layered gui (transparent)

    • UEZ
    • 18. August 2016 um 20:37

    Du kannst nicht einfach GDI+ Elemente mit GDI Elementen mischen.
    Ferner musst du das Resultat immer wieder neu setzen.

    Älteres Beispiel von mir:

    AutoIt
    #Include <ScreenCapture.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    
    
    Global Const $width = 600
    Global Const $height = 600
    _GDIPlus_Startup()
    Global $hBG_HBitmap = _ScreenCapture_Capture("", 0, 0, $width, $height, False)
    Global $hBG_Bitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBG_HBitmap)
    _WinAPI_DeleteObject($hBG_HBitmap)
    
    
    Global $dx = $width
    Global $dy = $height
    
    
    Global $i
    
    
    Global $hWnd = GUICreate("GDI+: Example by UEZ 2010", $width, $height, -1, -1, 0, $WS_EX_LAYERED + $WS_EX_TOOLWINDOW)
    GUISetOnEvent(-3, "_Exit")
    GUISetState()
    
    
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphics)
    Global $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    ;~ _GDIPlus_GraphicsSetSmoothingMode($hBackbuffer, 2)
    ;~ DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $hBackbuffer, "int", 7)
    
    
    #region mache GUI transparent
    $ScreenDc = _WinAPI_GetDC($hWnd)
    $GDIBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
    $dc = _WinAPI_CreateCompatibleDC($ScreenDc)
    _WinAPI_SelectObject($dc, $GDIBitmap)
    ; _WinAPI_UpdateLayeredWindow parameters
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", $width)
    DllStructSetData($tSize, "Y", $height)
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    Global $alpha = 255
    DllStructSetData($tBlend, "Alpha", $alpha)
    DllStructSetData($tBlend, "Format", 1)
    $tPoint = DllStructCreate($tagPOINT)
    $pPoint = DllStructGetPtr($tPoint)
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)
    #endregion
    
    
    Global $hMatrix = _GDIPlus_MatrixCreate()
    Global $rot_mid_x = $width / 2
    Global $rot_mid_y = $height / 2
    _GDIPlus_MatrixTranslate($hMatrix, $rot_mid_x, $rot_mid_y)
    
    
    $i = 0.5
    
    
    While Sleep(30)
    	_GDIPlus_GraphicsClear($hBackbuffer, 0xFF000000)
    
    
    	_GDIPlus_MatrixRotate($hMatrix, $i)
    	_GDIPlus_GraphicsSetTransform($hBackbuffer, $hMatrix)
    	_GDIPlus_GraphicsDrawImageRect($hBackbuffer, $hBG_Bitmap, -$rot_mid_x / 2, -$rot_mid_y / 2, $dx / 2, $dy / 2)
    
    
    	$GDIBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
        _WinAPI_SelectObject($dc, $gdibitmap)
        _WinAPI_UpdateLayeredWindow($hWnd, $ScreenDc, 0, $pSize, $dc, $pSource, 0, $pBlend, 1)
    	_WinAPI_DeleteObject($GDIBitmap)
    WEnd
    
    
    Func _Exit()
    	_WinAPI_DeleteDC($dc)
        _WinAPI_ReleaseDC($hWnd, $ScreenDc)
    	_GDIPlus_BitmapDispose($hBitmap)
    	_GDIPlus_GraphicsDispose($hBackbuffer)
    	_GDIPlus_MatrixDispose($hMatrix)
        _GDIPlus_BitmapDispose($hBitmap)
        _GDIPlus_GraphicsDispose($hBackbuffer)
        _GDIPlus_GraphicsDispose($hGraphics)
        _GDIPlus_Shutdown()
        Exit
    EndFunc
    Alles anzeigen

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™