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

  • Genial einfaches Tool zur Web Recherche - Smartclip

    • UEZ
    • 16. August 2017 um 17:17

    Ich habe die _WinAPI_BitmapCopyToClipboard() Funktion ein wenig erweitert:

    AutoIt
    #include <Clipboard.au3>
    #include <GDIPlus.au3>
    #include <Memory.au3>
    
    
    _GDIPlus_Startup()
    Global $sFile = StringReplace(@AutoItExe, "autoit3.exe", "Examples\GUI\Torus.png")
    Global $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    
    
    If _WinAPI_BitmapCopyToClipboard($hImage) Then
    	MsgBox(0, "Info", "Image copied to clipboard", 30)
    Else
    	MsgBox(16, "Error", "An error has occured: " & @error, 30)
    EndIf
    
    
    
    
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _WinAPI_BitmapCopyToClipboard
    ; Description ...: Copies a GDIPlus bitmap to the clipboard using CF_DIBV5, CF_BITMAP or PNG format.
    ; Syntax ........: _WinAPI_BitmapCopyToClipboard($hImage)
    ; Parameters ....: $hImage              - a GDIPlus bitmap handle.
    ;                  $iMode               - [optional] an integer value. Default is 3.
    ; Return values .: True on success otherwise False
    ; Author ........: UEZ
    ; Modified ......:
    ; Remarks .......: It copies the color values from a GDIPlus bitmap to a device-independent bitmap (DIB) v5 32-bit or raw PNG data
    ;				   (mode 1 and 2) to support transparent bitmaps (might not supported by an application).
    ; Links .........: $tagBITMAPV5HEADER -> http://msdn.microsoft.com/en-us/library/windows/desktop/dd183381(v=vs.85).aspx
    ; Version .......: 2017-08-16
    ; Example .......: No
    ; ===============================================================================================================================
    Func _WinAPI_BitmapCopyToClipboard($hImage, $iMode = 3)
    	If _ClipBoard_Open(0) Then
    		If _ClipBoard_Empty() Then
    			$iMode = $iMode < 1 ? 1 : $iMode > 3 ? 3 : $iMode
    			Switch $iMode
    				Case 1
    					Local Const $aDim = _GDIPlus_ImageGetDimension($hImage)
    					If @error Then Return SetError(3, 0, False)
    					Local Const $iW = $aDim[0], $iH = $aDim[1]
    					Local $tBMPData = _GDIPlus_BitmapLockBits($hImage, 0, 0, $iW, $iH, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
    					If @error Then Return SetError(4, 0, False)
    					Local Const $iBmpSize = $iH * $tBMPData.Stride
    					Local $tBIV5HDR = DllStructCreate($tagBITMAPV5HEADER)
    					Local Const $iBuffLen = DllStructGetSize($tBIV5HDR) + $iBmpSize
    					Local $hMem = _MemGlobalAlloc($iBuffLen + 1, $GHND)
    					Local Const $pDIBV5 = _MemGlobalLock($hMem)
    					$tBIV5HDR = DllStructCreate($tagBITMAPV5HEADER, $pDIBV5)
    					With $tBIV5HDR
    						.bV5Size = DllStructGetSize($tBIV5HDR)
    						.bV5Width = $iW
    						.bV5Height = $iH
    						.bV5Planes = 1
    						.bV5BitCount = 32
    						.biCompression = $BI_RGB
    						.bV5ClrUsed = 0
    						.bV5ClrImportant = 0
    						.bV5SizeImage = 0
    						.bV5CSType = 2
    						.bV5Intent = 4
    						.bV5AlphaMask = 0xFF000000
    						.bV5RedMask = 0x00FF0000
    						.bV5GreenMask = 0x0000FF00
    						.bV5BlueMask = 0x000000FF
    					EndWith
    
    
    					Local $pBits
    					Local Const $hBitmap = _WinAPI_CreateDIBSection(0, $tBIV5HDR, $DIB_RGB_COLORS, $pBits)
    
    
    					_WinAPI_SetBitmapBits($hBitmap, $iBuffLen, $tBMPData.Scan0)
    
    
    					_MemMoveMemory($pBits, $pDIBV5 + $tBIV5HDR.bV5Size, $iBmpSize)
    
    
    					Local $iError = 0
    					If Not _ClipBoard_SetDataEx($hMem, $CF_DIBV5) Then $iError += 1
    
    
    					_GDIPlus_BitmapUnlockBits($hImage, $tBMPData)
    					_MemGlobalUnlock($pDIBV5)
    					_MemGlobalFree($hMem)
    					_WinAPI_DeleteObject($hBitmap)
    					If $iError Then Return SetError(5, 0, False)
    				Case 2
    					Local $binImage = _GDIPlus_StreamImage2BinaryString($hImage, "PNG")
    					If @error Then Return SetError(6, 0, False)
    					Local $iFormat = _ClipBoard_RegisterFormat("PNG")
    					If Not _ClipBoard_SetData($binImage, $iFormat) Then
    						$binImage = 0
    						Return SetError(7, 0, False)
    					EndIf
    					$binImage = 0
    				Case 3
    					Local Const $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    					If @error Then Return SetError(8, 0, False)
    					Local $hHBmp_Clipboard = _WinAPI_CopyImage($hHBmp, $IMAGE_BITMAP, 0, 0, BitOR($LR_COPYDELETEORG, $LR_COPYRETURNORG))
    					_ClipBoard_SetDataEx($hHBmp_Clipboard, $CF_BITMAP)
    					_WinAPI_DeleteObject($hHBmp)
    					_WinAPI_DeleteObject($hHBmp_Clipboard)
    			EndSwitch
    		Else
    			Return SetError(2, 0, False)
    		EndIf
    		_ClipBoard_Close()
    	Else
    		Return SetError(1, 0, False)
    	EndIf
    	Return True
    EndFunc   ;==>_WinAPI_BitmapCopyToClipboard
    
    
    Func _GDIPlus_StreamImage2BinaryString($hBitmap, $sFormat = "JPG", $iQuality = 80, $bSave = False, $sFilename = @ScriptDir & "\Converted.jpg") ;coded by UEZ 2013 build 2014-01-25 (based on the code by Andreik)
    	Local $sImgCLSID, $tGUID, $tParams, $tData
    	Switch $sFormat
    		Case "JPG"
    			$sImgCLSID = _GDIPlus_EncodersGetCLSID($sFormat)
    			$tGUID = _WinAPI_GUIDFromString($sImgCLSID)
    			$tData = DllStructCreate("int Quality")
    			$iQuality = $iQuality < 0 ? 0 : $iQuality > 100 ? 100 : $iQuality
    			DllStructSetData($tData, "Quality", $iQuality) ;quality 0-100
    			Local $pData = DllStructGetPtr($tData)
    			$tParams = _GDIPlus_ParamInit(1)
    			_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
    		Case "PNG", "BMP", "GIF", "TIF"
    			$sImgCLSID = _GDIPlus_EncodersGetCLSID($sFormat)
    			$tGUID = _WinAPI_GUIDFromString($sImgCLSID)
    		Case Else
    			Return SetError(1, 0, 0)
    	EndSwitch
    	Local $hStream = _WinAPI_CreateStreamOnHGlobal() ;http://msdn.microsoft.com/en-us/library/ms864401.aspx
    	If @error Then Return SetError(2, 0, 0)
    	_GDIPlus_ImageSaveToStream($hBitmap, $hStream, DllStructGetPtr($tGUID), DllStructGetPtr($tParams))
    	If @error Then Return SetError(3, 0, 0)
    
    
    	Local $hMemory = _WinAPI_GetHGlobalFromStream($hStream) ;http://msdn.microsoft.com/en-us/library/aa911736.aspx
    	If @error Then Return SetError(4, 0, 0)
    	Local $iMemSize = _MemGlobalSize($hMemory)
    	If Not $iMemSize Then Return SetError(5, 0, 0)
    	Local $pMem = _MemGlobalLock($hMemory)
    	$tData = DllStructCreate("byte[" & $iMemSize & "]", $pMem)
    	Local $bData = DllStructGetData($tData, 1)
    	_WinAPI_ReleaseStream($hStream) ;http://msdn.microsoft.com/en-us/library/windows/desktop/ms221473(v=vs.85).aspx
    	_MemGlobalFree($hMemory)
    	If $bSave Then
    		Local $hFile = FileOpen($sFilename, 18)
    		If @error Then Return SetError(6, 0, $bData)
    		FileWrite($hFile, $bData)
    		FileClose($hFile)
    	EndIf
    	Return $bData
    EndFunc   ;==>_GDIPlus_StreamImage2BinaryString
    Alles anzeigen

    Je nach Anwendung funktioniert der jeweilige Modus.

  • Genial einfaches Tool zur Web Recherche - Smartclip

    • UEZ
    • 15. August 2017 um 21:59

    Soweit ich es verstanden habe, willst du 32-bit Bitmaps mit Transparenz in den Clipboard kopieren.

    Versuche es mal mit dieser Funktion:

    AutoIt
    #include <Clipboard.au3>
    #include <GDIPlus.au3>
    #include <Memory.au3>
    
    
    _GDIPlus_Startup()
    Global $sFile = StringReplace(@AutoItExe, "autoit3.exe", "Examples\GUI\Torus.png")
    Global $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    Global $aDim = _GDIPlus_ImageGetDimension($hImage)
    
    
    If _WinAPI_BitmapCopyToClipboard($hImage) Then
    	MsgBox(0, "Info", "Image copied to clipboard", 30)
    Else
    	MsgBox(16, "Error", "An error has occured: " & @error, 30)
    EndIf
    
    
    
    
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _WinAPI_BitmapCopyToClipboard
    ; Description ...: Copies a GDIPlus bitmap to the clipboard
    ; Syntax ........: _WinAPI_BitmapCopyToClipboard($hImage)
    ; Parameters ....: $hImage              - a GDIPlus bitmap handle.
    ; Return values .: True on success otherwise False
    ; Author ........: UEZ
    ; Modified ......: 
    ; Remarks .......: It copies the color values from a GDIPlus bitmap to a device-independent bitmap (DIB) v5 32-bit to support
    ;				   transparent bitmaps.
    ; Version .......: 2017-08-15
    ; Example .......: No
    ; ===============================================================================================================================
    Func _WinAPI_BitmapCopyToClipboard($hImage)
    	If _ClipBoard_Open(0) Then
    		If _ClipBoard_Empty() Then
    			Local Const $iW = $aDim[0], $iH = $aDim[1]
    			Local $tBMPData = _GDIPlus_BitmapLockBits($hImage, 0, 0, $iW, $iH, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
    			If @error Then Return SetError(3, 0, False)
    			Local Const $iBmpSize = $iH * $tBMPData.Stride
    			Local $tBIV5HDR = DllStructCreate($tagBITMAPV5HEADER)
    			Local Const $iBuffLen = DllStructGetSize($tBIV5HDR) + $iBmpSize
    			Local $hMem = _MemGlobalAlloc($iBuffLen, $GHND)
    			Local Const $pDIBV5 = _MemGlobalLock($hMem)
    			$tBIV5HDR = DllStructCreate($tagBITMAPV5HEADER, $pDIBV5)
    			$tBIV5HDR.bV5Size = DllStructGetSize($tBIV5HDR)
    			$tBIV5HDR.bV5Width = $iW
    			$tBIV5HDR.bV5Height = $iH
    			$tBIV5HDR.bV5Planes = 1
    			$tBIV5HDR.bV5BitCount = 32
    			$tBIV5HDR.biCompression = $BI_BITFIELDS
    			$tBIV5HDR.bV5AlphaMask = 0xFF000000
    			$tBIV5HDR.bV5RedMask = 0x00FF0000
    			$tBIV5HDR.bV5GreenMask = 0x0000FF00
    			$tBIV5HDR.bV5BlueMask = 0x000000FF
    
    
    			Local $pBits, $iRowOffset, $iRowOffset2, $iX, $iY
    			Local Const $hBitmap = _WinAPI_CreateDIBSection(0, $tBIV5HDR, $DIB_RGB_COLORS, $pBits)
    
    
    			Local $tPixel = DllStructCreate("uint argb[" & $iW * $iH & "];", $tBMPData.Scan0)
    			Local $tBits = DllStructCreate("uint argb[" & $iW * $iH  & "]", $pBits)
    
    
    			For $iY = 0 To $iH - 1
    				$iRowOffset = $iY * $iW
    				$iRowOffset2 = ($iH - $iY + 1) * $iW
    				For $iX = 1 To $iW
    					$tBits.argb(($iRowOffset + $iX)) = $tPixel.argb(($iRowOffset2 + $iX))
    				Next
    			Next
    
    
    			_MemMoveMemory($pBits, $pDIBV5 + DLLStructGetSize($tBIV5HDR), $iBmpSize)
    
    
    			_ClipBoard_SetDataEx($hMem, $CF_DIBV5)
    
    
    			_GDIPlus_BitmapUnlockBits($hImage, $tBMPData)
    			_MemGlobalUnlock($pDIBV5)
    			_MemGlobalFree($hMem)
    			_WinAPI_DeleteObject($hBitmap)
    		Else
    			Return SetError(2, 0, False)
    		EndIf
    		_ClipBoard_Close()
    	Else
    		Return SetError(1, 0, False)
    	EndIf
    	Return True
    EndFunc
    Alles anzeigen

    Das Kopieren von größeren Bitmaps dauert länger, da AutoIt nicht schneller kopieren kann. Das riecht förmlich nach einem Inline ASM Boost (gelle Andy ^^ ).

    Das Bild wird mit XnView richtig dargestellt, mit IrfanView nicht. Andere Programme habe ich nicht getestet.

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

    • UEZ
    • 11. August 2017 um 11:27

    Danke für die Anmeldungen! :thumbup:

    Es würde Sinn machen, wenn die Kicktipp User Namen dem des Forum entsprechen, da ich nicht weiß, wer die "fremden" User Namen sind. ;)

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

    • UEZ
    • 4. August 2017 um 22:22

    Kostenlos und nur zum Spaß - einfach nur "just for fun".

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

    • UEZ
    • 4. August 2017 um 20:31
    Zitat von Tweaky

    @UEZ
    Ist Rainer_Zufall auch wieder am Start?

    Diesmal ist "Raeiner Zufall" nicht dabei. ;)

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

    • UEZ
    • 4. August 2017 um 16:53

    Bald fängt die neue Saison an und wer mitmachen möchte, einfach auf Kicktipp registrieren und unter https://www.kicktipp.de/autoit-bl Mitglied werden.

    Ich hoffe diesmal auf zahlreiche Teilnehmer.

    autoiter, Techmix und Tweaky sind mit übernommen, d.h. ihr benötigt keine Anmeldung, falls ihr wieder mittippen wollt.

    Am 18.08.2017 geht's los!

  • Starplayer v4

    • UEZ
    • 2. August 2017 um 22:44

    Keine Ahnung, woran das liegen könnte. Vielleicht gibt es eine Option "Trim Silence", um die Stille am Anfang / Ende zu entfernen.

    Vielleicht liegt's ja an VBR...

  • Starplayer v4

    • UEZ
    • 2. August 2017 um 16:47
    Zitat von Oscar

    Wie ermittele ich dann die Laufzeit?

    Du kannst mit den Funktionen

    • BASS_ChannelGetLength (liefert die Länge in Bytes)
    • BASS_ChannelBytes2Seconds (wandelt die Bytes in Sekunden um)

    die Zeit ermitteln.

  • Starplayer v4

    • UEZ
    • 2. August 2017 um 15:11

    Hallo Oscar,

    hier das Resultat einiger Tests:

    • wenn der ID3 Tag nicht gelesen werden kann, wird die Datei nicht hinzugefügt -> da würde ich den Dateiname nehmen
    • wenn ich eine Datei per DnD auf die GUI ziehe und Play drücke, wird die Liste geleert (Anzahl = 0, Dauer = 00:00:00)
    • einmal ist das Skript abgestürzt, als ich das Skript geschlossen habe, aber die Musik noch spielte
    • vor / zurück Spulen funktioniert nur, wenn man auf die Position klickt, aber nicht, wenn man den grauen Knopf verschieben will
  • Skript direkt mit der Beta Version von SciTE öffnen

    • UEZ
    • 23. Juli 2017 um 13:02

    Wenn du beide AutoIt Versionen installiert hast, kannst du mit dieser Direktive

    AutoIt
    #AutoIt3Wrapper_Version=b

    das Skript immer mit der Beta Version starten.

  • Mit GDI+ das Image beim Speichern überschreiben

    • UEZ
    • 21. Juli 2017 um 10:44

    Du musst die Exif Daten auslesen und sie in das neue Bild zurück schreiben.

    Vielleicht hilft dir dieser Link: https://www.autoitscript.com/forum/topic/82…ting-meta-data/

  • Clipboard mit Grafik-Kopie ausstatten

    • UEZ
    • 13. Juli 2017 um 10:27

    Probiere es mal damit:

    AutoIt
    #include <Clipboard.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Gdiplus.au3>
    
    
    _GDIPlus_Startup()
    $nBild = InetRead("https://rosettacode.org/mw/title.png",16);Gibt dir Binary vom Bild
    $hBild = _GDIPlus_BitmapCreateFromMemory($nBild, True) ;erstellt dir ein GDI Bitmap vom InetRead.
    $hClipboard_Bild = _WinAPI_CopyImage($hBild, 0, 0, 0, BitOR($LR_COPYDELETEORG, $LR_COPYRETURNORG))
    _ClipBoard_Open(0)
    _ClipBoard_Empty()
    _ClipBoard_SetDataEx($hClipboard_Bild, $CF_BITMAP)
    _ClipBoard_Close()
    _WinAPI_DeleteObject($hBild)
    _WinAPI_DeleteObject($hClipboard_Bild)
    _GDIPlus_Shutdown()
    HotKeySet("{F2}", "F_Ende")
    
    
    ConsoleWrite("Bild kann jetzt eingefügt werden!" & @CRLF)
    
    
    While 1
    	Sleep(500)
    WEnd
    
    
    Func F_Ende()
    	Exit
    EndFunc
    Alles anzeigen
  • Clipboard mit Grafik-Kopie ausstatten

    • UEZ
    • 12. Juli 2017 um 20:17

    Du kannst ein GDI Bild mit

    AutoIt
    _ClipBoard_SetDataEx($hHBitmap, $CF_BITMAP)

    in den Clipboard kopieren, musst vorher noch das Bild mit

    AutoIt
    _WinAPI_CopyImage()

    umwandeln, z.B.


    AutoIt
    $hHBitmap = _WinAPI_CopyImage($hHBmp, 0, 0, 0, BitOR($LR_COPYDELETEORG, $LR_COPYRETURNORG))

    $hHBmp ist ein GDI Handle -> nicht GDI+!

  • File to Base64 String Code Generator v1.20 Build 2020-06-05

    • UEZ
    • 11. Juli 2017 um 23:06
    AutoIt
    _GDIPlus_Startup()

    ist dein Freund. ;)

  • AutoIt-Heise-Newsticker

    • UEZ
    • 10. Juli 2017 um 00:47
    Zitat von BLinz

    Zufällig habe ich den heute auch gesehen und in mein Programm eingebaut.Aber @UEZ:

    Der hat einen Fehler, Rot und Blau sind vertauscht und somit kommen falsche Farben raus.
    Richtig wäre es so rum

    AutoIt
    $color_hex_rgb = 0x1188AA
        $Red = BitAND($color_hex_rgb, 0xFF)
        $Green = BitAND(BitShift($color_hex_rgb, 8), 0xFF)
        $Blue = BitAND(BitShift($color_hex_rgb, 16), 0xFF)
        $color_argb = 0xFF000000 + $Red * 0x10000 + $Green * 0x100 + $Blue
        MsgBox(0, "Test", Hex($color_argb, 8))

    da ich immer erst mit Grün getestet hatte ist es mir erst spät aufgefallen.

    Nachtrag: Ich könnte da auch einen ARGB zu RGB Konverter gut brauchen ....

    Dein Konverter macht aus ARGB ein ABGR, wenn wir annehmen, dass der Farbwert als ARGB kodiert ist. ;)

  • GIF-Animation mit GDI+

    • UEZ
    • 4. Juli 2017 um 22:07

    @autoiter: danke für den Hinweis. Ich hatte eine modifizierte lokale GDIPlus.au3, so dass die fehlenden Funktionen nicht aufgefallen sind. :whistling:

    Ich habe das Archiv aktualisiert. -> Post#3

  • GIF-Animation mit GDI+

    • UEZ
    • 4. Juli 2017 um 20:48

    Hallo Oscar,

    sorry, dass ich hier so herein platze! Ich hatte vor längerer Zeit eine GIF UDF gebastelt, aber nie richtig veröffentlicht und auch nicht weiter gecodet! Irgendwie passt die UDF hier rein.

    Download ca. 13.4 MB: https://www.mediafire.com/?ooc7mow9zmwdd8k


    Mit der UDF kann man auch GIF Animationen erstellen, wenn als BS Vista oder höher installiert ist.

  • Kleines Desktop-Spiel (ChipHunter)

    • UEZ
    • 15. Juni 2017 um 17:15

    Was mich ein bissl "stört" ist, dass, wenn man vorbei schießt, man keinen Schuss hört, sondern nur, wenn man trifft.

    Imho sollte man den Schuss immer hören und bei Treffer einen anderen.

    Ansonsten hat sich das Spiel gut weiter entwickelt. :thumbup:

  • GDI+ GIF Animation

    • UEZ
    • 12. Juni 2017 um 21:57

    xSunLighTx3: das ist aber nicht die feine Art einfach den Post zu löschen und "#solved thx to Avandos Game Studios for the help! " zu schreiben - sehr egoistisch. :thumbdown:

    Wenn das jeder machen würde, bräuchte man kein Forum. Ich hoffe, dass für deine zukünftigen Probleme du genau nur auf solche Topics stößt.

    Ich wollte dir helfen, aber das werde ich für dich in Zukunft nicht mehr tun!

    X(

  • C# / VB .NET DLLs erstellen und in AutoIt verwenden

    • UEZ
    • 8. Juni 2017 um 20:08

    Hier gibt's auch noch was zu diesem Thema:

    https://www.autoitscript.com/forum/topic/18…autoit-possible
    https://www.autoitscript.com/forum/topic/18…-clr-framework/

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™