Leaderboard
Popular Content
Showing content with the highest reputation on 02/27/2024 in all areas
-
LAteNightSpecial banned indefinitely
jaberwacky and 2 others reacted to Jos for a topic
LAteNightSpecial did show "its" true nature and got indefinitely banned for that. Also done some posts cleanup to avoid any more discussion/questions.3 points -
LAteNightSpecial, I have an even better idea - you press your "neck retract" button very firmly and start acting like the neophyte AutoIt scripter that you are, rather that posting AI-generated wordwalls on complex subjects about which you are (by your own admission) completely unqualified to comment. Your future as part of this community has been under discussion for some days and we have shown considerable forbearance in not banning you already. Continuing as you have been will make any future such decision extremely easy. So it would be to your advantage to start acting like the "newbie" you are and limit your posts to questions which help your understanding of AutoIt rather the obviously untested rubbish code with which you have been polluting the forum over the past few days. Up to you - choose wisely. And now - in the immortal style of Jos - <click> M232 points
-
How to Resize Animated GIF when Loaded by _GDIPlus_BitmapCreateFromMemory()
teodoric666 and one other reacted to UEZ for a topic
You can use _GDIPlus_GIFAnim.au3: ;coded by UEZ build 2017-07-04 ;requires 3.3.11.5+ #AutoIt3Wrapper_Version=b #include-once #include <GDIPlus.au3> #include <Memory.au3> ;_GDIPlus_BitmapConvertTo8Bit ;_GDIPlus_GIFAnimCreateFile ;_GDIPlus_GIFAnimExtractAllFrames ;_GDIPlus_GIFAnimGetFrameCount ;_GDIPlus_GIFAnimGetFrameDelays ;_GDIPlus_GIFAnimGetFrameDelaysFromBinFile ;_GDIPlus_GIFAnimGetFrameDimensionsCount ;_GDIPlus_GIFAnimGetFrameDimensionsList ;_GDIPlus_GIFAnimSelectActiveFrame ;_GDIPlus_ImageGetColorPalette ;_GDIPlus_ImageGetColorPaletteSize ;_GDIPlus_ImageSaveAdd ;_GDIPlus_ImageSaveAddImage ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimGetFrameDimensionsCount ; Description ...: Gets the number of frame dimensions in this Image object. ; Syntax ........: _GDIPlus_GIFAnimGetFrameDimensionsCount($hImage) ; Parameters ....: $hImage - A handle to an image / bitmap object ; Return values .: The number of frame dimensions in this Image object. ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimGetFrameDimensionsCount($hImage) Local Const $aResult = DllCall($__g_hGDIPDll, "int", "GdipImageGetFrameDimensionsCount", "handle", $hImage, "ulong*", 0) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(10, $aResult[0], 0) Return $aResult[2] EndFunc ;==>_GDIPlus_GIFAnimGetFrameDimensionsCount ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimGetFrameDimensionsList ; Description ...: Gets the identifiers for the frame dimensions of this Image object which fills the GUID struct. ; Syntax ........: _GDIPlus_GIFAnimGetFrameDimensionsList($hImage, $iFramesCount) ; Parameters ....: $hImage - A handle to an image / bitmap object ; $iFramesCount - An integer value. ; Return values .: tagGUID struct ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimGetFrameDimensionsList($hImage, $iFramesCount) Local Const $tGUID = DllStructCreate($tagGUID) Local Const $aResult = DllCall($__g_hGDIPDll, "int", "GdipImageGetFrameDimensionsList", "handle", $hImage, "struct*", $tGUID, "uint", $iFramesCount) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(10, $aResult[0], 0) Return $tGUID EndFunc ;==>_GDIPlus_GIFAnimGetFrameDimensionsList ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimGetFrameCount ; Description ...: Gets the frame count of the loaded gif by passing the GUID struct ; Syntax ........: _GDIPlus_GIFAnimGetFrameCount($hImage, $tGUID) ; Parameters ....: $hImage - A handle to an image / bitmap object ; $tGUID - A struct to a GUID that specifies the frame dimension. ; Return values .: The amount of frames from a GIF animated image handle ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: _GDIPlus_ImageLoadFromFile _GDIPlus_BitmapCreateFromFile ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimGetFrameCount($hImage, $tGUID) Local Const $aResult = DllCall($__g_hGDIPDll, "int", "GdipImageGetFrameCount", "handle", $hImage, "struct*", $tGUID, "ptr*", 0) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(10, $aResult[0], 0) Return Int($aResult[3]) EndFunc ;==>_GDIPlus_GIFAnimGetFrameCount ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimSelectActiveFrame ; Description ...: Selects the frame in this Image object specified by passing the GUID struct and current frame. ; Syntax ........: _GDIPlus_GIFAnimSelectActiveFrame($hImage, $tGUID, $iCurrentFrame) ; Parameters ....: $hImage - A handle to an image / bitmap object ; $tGUID - A struct to a GUID that specifies the frame dimension. ; $iCurrentFrame - An integer value. ; Return values .: True or False on errors ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: _GDIPlus_ImageLoadFromFile _GDIPlus_BitmapCreateFromFile ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimSelectActiveFrame($hImage, $tGUID, $iCurrentFrame) Local Const $aResult = DllCall($__g_hGDIPDll, "int", "GdipImageSelectActiveFrame", "handle", $hImage, "struct*", $tGUID, "uint", $iCurrentFrame) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(10, $aResult[0], 0) Return True EndFunc ;==>_GDIPlus_GIFAnimSelectActiveFrame ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimGetFrameDelays ; Description ...: Gets the delay of each frame from an image handle ; Syntax ........: _GDIPlus_GIFAnimGetFrameDelays($hImage, $iAnimFrameCount) ; Parameters ....: $hImage - A handle to an image / bitmap object ; $iAnimFrameCount - An integer value. ; Return values .: An array with the information about the delay of each frame or the error code ; Author ........: UEZ ; Modified ......: ; Remarks .......: If frame delays cannot be read try _GDIPlus_GIFAnimGetFrameDelaysFromBinFile instead ; Related .......: _GDIPlus_ImageLoadFromFile _GDIPlus_BitmapCreateFromFile _GDIPlus_ImageGetPropertyItem ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimGetFrameDelays($hImage, $iAnimFrameCount) If $iAnimFrameCount < 2 Then Return SetError(1, 0, 0) Local Const $GDIP_PROPERTYTAGFRAMEDELAY = 0x5100 Local $tPropItem = __GDIPlus_ImageGetPropertyItem($hImage, $GDIP_PROPERTYTAGFRAMEDELAY) If IsDllStruct($tPropItem) And (Not @error) Then Local $iType = $tPropItem.type, $iLength, $tVal If $iType Then $iLength = $tPropItem.length Switch $iType Case 1 $tVal = DllStructCreate("byte delay[" & $iLength & "]", $tPropItem.value) Case 3 $tVal = DllStructCreate("short delay[" & Ceiling($iLength / 2) & "]", $tPropItem.value) Case 4 $tVal = DllStructCreate("long delay[" & Ceiling($iLength / 4) & "]", $tPropItem.value) Case Else Return SetError(3, 0, 0) EndSwitch Local $aFrameDelays[Int($iAnimFrameCount)], $i For $i = 0 To UBound($aFrameDelays) - 1 $aFrameDelays[$i] = $tVal.delay(($i + 1)) * 10 ;~ ConsoleWrite($i & ": "& $aFrameDelays[$i] & @CRLF) Next EndIf Return $aFrameDelays EndIf Return SetError(2, 0, 0) EndFunc ;==>_GDIPlus_GIFAnimGetFrameDelays ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_ImageGetPropertyItem ; Description ...: Gets a specified property item (piece of metadata) from this Image object. ; Syntax ........: __GDIPlus_ImageGetPropertyItem($hImage, $iPropID) ; Parameters ....: $hImage - A handle to an image object. ; $iPropID - An integer that identifies the property item to be retrieved. ; Return values .: $tagGDIPPROPERTYITEM structure or 0 on errors ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: _GDIPlus_ImageLoadFromFile _GDIPlus_ImageLoadFromStream ; Link ..........: Property Item Descriptions -> http://msdn.microsoft.com/en-us/library/windows/desktop/ms534416(v=vs.85).aspx ; =============================================================================================================================== Func __GDIPlus_ImageGetPropertyItem($hImage, $iPropID) Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetPropertyItemSize", "handle", $hImage, "uint", $iPropID, "ulong*", 0) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(10, $aResult[0], 0) Local Static $tBuffer ;why static? because otherwise it would crash when running it as x64 exe (workaround) $tBuffer = DllStructCreate("byte[" & $aResult[3] & "]") $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetPropertyItem", "handle", $hImage, "uint", $iPropID, "ulong", $aResult[3], "struct*", $tBuffer) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(11, $aResult[0], 0) Local Const $tagGDIPPROPERTYITEM = "uint id;ulong length;word type;ptr value" Local $tPropertyItem = DllStructCreate($tagGDIPPROPERTYITEM, DllStructGetPtr($tBuffer)) If @error Then Return SetError(20, $aResult[0], 0) Return $tPropertyItem EndFunc ;==>__GDIPlus_ImageGetPropertyItem ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimGetFrameDelaysFromBinFile ; Description ...: Gets the delay of each frame from a binary gif file ; Syntax ........: _GDIPlus_GIFAnimGetFrameDelaysFromBinFile($binGIF, $iAnimFrameCount[, $iDelay = 10]) ; Parameters ....: $binGIF - A binary string with the GIF anim. ; $iAnimFrameCount - An integer value. ; Return values .: An array with the information about the delay of each frame or the error code ; Author ........: UEZ ; Modified ......: ; Remarks .......: ; Related .......: ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimGetFrameDelaysFromBinFile($binGIF, $iAnimFrameCount) If Not IsBinary($binGIF) Then Return SetError(1, 0, 0) If $iAnimFrameCount < 2 Then Return SetError(2, 0, 0) Local $aFrameDelays = StringRegExp($binGIF, "(?i)0021F904[[:xdigit:]]{2}([[:xdigit:]]{4})", 3) If @error Then Return SetError(3, 0, 0) Local Const $iDelay = 10 For $i = 0 To UBound($aFrameDelays) - 1 $aFrameDelays[$i] = $iDelay * Dec(StringRegExpReplace($aFrameDelays[$i], "([[:xdigit:]]{2})([[:xdigit:]]{2})", "$2$1")) Next If UBound($aFrameDelays) <> $iAnimFrameCount Then ReDim $aFrameDelays[$iAnimFrameCount] Return $aFrameDelays EndFunc ;==>_GDIPlus_GIFAnimGetFrameDelaysFromBinFile ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimExtractAllFrames ; Description ...: Extracts all frames from a GIF animation file with the option to resize the frames ; Syntax ........: _GDIPlus_GIFAnimExtractAllFrames($hImage, $sFilename[, $iJPGQual = 85[, $iW = 0[, $iH = 0[, $iResizeQual = 7[, ; $bReverse = False]]]]]) ; Parameters ....: $hImage - A handle to an image / bitmap object ; $sFilename - A string value. Folders will be created if not existing. ; $iJPGQual - [optional] An integer value. Default is 85. ; $iW - [optional] An integer value. Default is 0. ; $iH - [optional] An integer value. Default is 0. ; $iResizeQual - [optional] An integer value. Default is 2. ; $bReverse - [optional] A binary value. Default is False. ; Return values .: True or False on errors ; Author ........: UEZ ; Modified ......: ; Remarks .......: All frames will be extracted whereas the filename will be <filename>_XX.<ext>. XX is the amount of frames. If ; $bReverse is set True then the frames will be saved in reverse order. If $iW and $iH are zero then no resizing will be done. ; Related .......: _GDIPlus_EncodersGetCLSID _GDIPlus_ParamInit _GDIPlus_BitmapCreateFromScan0 _GDIPlus_GraphicsSetInterpolationMode _GDIPlus_ImageSaveToFile ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimExtractAllFrames($hImage, $sFilename, $iJPGQual = 85, $iW = 0, $iH = 0, $iResizeQual = 2, $bReverse = False) If $sFilename = "" Then Return SetError(1, @error, 0) Local Const $iAnimDimCount = _GDIPlus_GIFAnimGetFrameDimensionsCount($hImage) If @error Then Return SetError(2, @error, 0) Local Const $tGUID = _GDIPlus_GIFAnimGetFrameDimensionsList($hImage, $iAnimDimCount) If @error Then Return SetError(3, @error, 0) Local Const $iAnimFrameCount = _GDIPlus_GIFAnimGetFrameCount($hImage, $tGUID) If @error Then Return SetError(4, @error, 0) Local $sPath = StringRegExpReplace($sFilename, "(.+)\\.+", "$1") If StringLen($sPath) > 2 Then If Not FileExists($sPath) Then DirCreate($sPath) EndIf Local $sPrefixList = "jpg,png,bmp,gif,tif,", $sSuffix = StringRight($sFilename, 3) If Not StringInStr($sPrefixList, $sSuffix) Or StringMid($sFilename, StringLen($sFilename) - 3, 1) <> "." Then $sSuffix = "png" $sFilename &= ".png" EndIf Switch $sSuffix Case "jpg" Local $sCLSID = _GDIPlus_EncodersGetCLSID("JPG") Local $tParams = _GDIPlus_ParamInit(1) Local $tData = DllStructCreate("int Quality") Local $pData = DllStructGetPtr($tData) Local $pParams = DllStructGetPtr($tParams) $tData.Quality = $iJPGQual _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData) EndSwitch Local $sPrefix = StringTrimRight($sFilename, 4), $hFrame, $iCurrentFrame = 0, $i, $iRet, $hBitmap, $hGfx, $bError = False, $bResize = False If ($iW > 0) And ($iH > 0) And ($iW <> _GDIPlus_ImageGetWidth($hImage)) And ($iH <> _GDIPlus_ImageGetHeight($hImage)) Then $bResize = True $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetInterpolationMode($hGfx, $iResizeQual) EndIf Local $iFrame For $i = 0 To $iAnimFrameCount If $bReverse Then $iFrame = $iAnimFrameCount - $i Else $iFrame = $i EndIf _GDIPlus_GIFAnimSelectActiveFrame($hImage, $tGUID, $i) Switch $bResize Case False $hFrame = $hImage Case Else _GDIPlus_GraphicsClear($hGfx, 0x00000000) _GDIPlus_GraphicsDrawImageRect($hGfx, $hImage, 0, 0, $iW, $iH) $hFrame = $hBitmap EndSwitch Switch $sSuffix Case "jpg" $iRet = _GDIPlus_ImageSaveToFileEx($hFrame, $sPrefix & "_" & StringFormat("%0" & StringLen(Int($iAnimFrameCount)) & "i." & $sSuffix, $iFrame), $sCLSID, $pParams) If Not $iRet Then $bError = True Case Else $iRet = _GDIPlus_ImageSaveToFile($hFrame, $sPrefix & "_" & StringFormat("%0" & StringLen(Int($iAnimFrameCount)) & "i." & $sSuffix, $iFrame)) If Not $iRet Then $bError = True EndSwitch Next If $bResize Then _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_BitmapDispose($hBitmap) EndIf Return $bError EndFunc ;==>_GDIPlus_GIFAnimExtractAllFrames ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_GIFAnimCreateFile ; Description ...: Creates a GIF animation file ; Syntax ........: _GDIPlus_GIFAnimCreateFile($aImages, $sFilename[, $iDelay = 100]) ; Parameters ....: $aImages - An array of image handles (animation frames). ; $sFilename - The filename of the GIF animation. ; $iDelay - [optional] An integer value. Default is 100 ms per frame. ; Return values .: True or False on errors ; Author ........: UEZ ; Modified ......: ; Remarks .......: Vista or a higher operating system is required to create a GIF animation! ; Related .......: _GDIPlus_EncodersGetCLSID _GDIPlus_ParamInit _GDIPlus_ParamAdd _GDIPlus_ImageSaveToFileEx ; Link ..........: ; =============================================================================================================================== Func _GDIPlus_GIFAnimCreateFile($aImages, $sFilename, $iDelay = 100) Local Const $GDIP_EVTFrameDimensionTime = 21 Local $sCLSID = _GDIPlus_EncodersGetCLSID("GIF") Local $tMultiFrameParam = DllStructCreate("int;") DllStructSetData($tMultiFrameParam, 1, $GDIP_EVTMULTIFRAME) Local $tParams = _GDIPlus_ParamInit(1) _GDIPlus_ParamAdd($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tMultiFrameParam)) Local $hStream = _WinAPI_CreateStreamOnHGlobal() Local $tGUID = _WinAPI_GUIDFromString($sCLSID) _GDIPlus_ImageSaveToStream($aImages[1], $hStream, DllStructGetPtr($tGUID), DllStructGetPtr($tParams)) DllStructSetData($tMultiFrameParam, 1, $GDIP_EVTFrameDimensionTime) $tParams = _GDIPlus_ParamInit(1) _GDIPlus_ParamAdd($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tMultiFrameParam)) Local $i For $i = 2 To $aImages[0] - 1 _GDIPlus_ImageSaveAddImage($aImages[1], $aImages[$i], $tParams) Next DllStructSetData($tParams, 1, $GDIP_EVTLASTFRAME) $tParams = _GDIPlus_ParamInit(1) _GDIPlus_ParamAdd($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tMultiFrameParam)) _GDIPlus_ImageSaveAddImage($aImages[1], $aImages[$i], $tParams) DllStructSetData($tParams, 1, $GDIP_EVTFLUSH) $tParams = _GDIPlus_ParamInit(1) _GDIPlus_ParamAdd($tParams, $GDIP_EPGSAVEFLAG, 1, $GDIP_EPTLONG, DllStructGetPtr($tMultiFrameParam)) _GDIPlus_ImageSaveAdd($aImages[$i], $tParams) Local $hMemory = _WinAPI_GetHGlobalFromStream($hStream) Local $iMemSize = _MemGlobalSize($hMemory) Local $pMem = _MemGlobalLock($hMemory) Local $tData = DllStructCreate("byte[" & $iMemSize & "]", $pMem) Local $bData = DllStructGetData($tData, 1) _WinAPI_ReleaseStream($hStream) _MemGlobalFree($hMemory) $bData = StringRegExpReplace($bData, "(?i)(0021F904[[:xdigit:]]{2})[[:xdigit:]]{4}", "${1}" & StringRegExpReplace(Hex(Int($iDelay / 10), 4), "([[:xdigit:]]{2})([[:xdigit:]]{2})", "$2$1")) Local $iExtended = @extended Local $hFile = FileOpen($sFilename, 2) If @error Then Return SetError(2, 0, False) FileWrite($hFile, Binary($bData)) FileClose($hFile) If Not $iExtended Then Return SetError(1, 0, False) Return SetExtended($iExtended, True) EndFunc ;==>_GDIPlus_GIFAnimCreateFile Func _GDIPlus_GIFAnimCreateFileFromImageFiles($aFrames, $sGIFFileName, $bReplay = True) Local $tagGIFHeader = "byte Header[6];byte Width[2];byte Height[2];byte PackedField[1];byte BackgroundColorIndex[1];byte PixelAspectRatio[1];" Local $tGIFHeader_1frame = DllStructCreate($tagGIFHeader & "byte ColorTable[768];") Local $hFile = _WinAPI_CreateFile($aFrames[0][0], 2, 2), $nBytes _WinAPI_ReadFile($hFile, DllStructGetPtr($tGIFHeader_1frame), DllStructGetSize($tGIFHeader_1frame), $nBytes) _WinAPI_CloseHandle($hFile) Local $iColorTableSize = 3 * 2 ^ (BitAND($tGIFHeader_1frame.PackedField, 7) + 1) Local $tGIFHeader_File = DllStructCreate($tagGIFHeader & "byte ColorTable[" & $iColorTableSize & "];byte ApplicationBlockExtension[18]") $tGIFHeader_File.Header = $tGIFHeader_1frame.Header $tGIFHeader_File.Width = $tGIFHeader_1frame.Width $tGIFHeader_File.Height = $tGIFHeader_1frame.Height $tGIFHeader_File.PackedField = $tGIFHeader_1frame.PackedField $tGIFHeader_File.BackgroundColorIndex = $tGIFHeader_1frame.BackgroundColorIndex $tGIFHeader_File.PixelAspectRatio = $tGIFHeader_1frame.PixelAspectRatio $tGIFHeader_File.ColorTable = BinaryMid($tGIFHeader_1frame.ColorTable, 1, $iColorTableSize) $tGIFHeader_File.ApplicationBlockExtension = Binary("0x21FF0B4E45545343415045322E3003010000") Local $bGIFHeader, $i, $b, $p, $d For $i = 1 To 8 $bGIFHeader &= StringTrimLeft(DllStructGetData($tGIFHeader_File, $i), 2) Next For $i = 0 To UBound($aFrames) - 1 $b = Binary(FileRead($aFrames[$i][0])) $p = Floor(StringInStr($b, "0021F904") / 2) $d = Hex(Dec($aFrames[$i][1] / 10), 4) If Not $p Then ContinueLoop $bGIFHeader &= StringMid(StringRegExpReplace(BinaryMid($b, $p, BinaryLen($b) - $p - 1), "(?i)0021F904([[:xdigit:]]{2})([[:xdigit:]]{4})(.*)", "0021F904${1}" & StringRight($d, 2) & StringLeft($d, 2) & "$3"), 3) Next $hFile = FileOpen($sGIFFileName, 18) FileWrite($hFile, Binary("0x" & $bGIFHeader & "3B")) FileClose($hFile) EndFunc ;==>_GDIPlus_GIFAnimCreateFileFromImageFiles ; #FUNCTION# ==================================================================================================================== ; Name ..........: _GDIPlus_BitmapConvertTo8Bit ; Description ...: Converts a bitmap to a 8-bit image ; Syntax ........: _GDIPlus_BitmapConvertTo8Bit(Byref $hBitmap[, $iColorCount = 253[,$iDitherType = $GDIP_DitherTypeDualSpiral8x8[, ; $iPaletteType = $GDIP_PaletteTypeFixedHalftone252,[$bUseTransparentColor = True]]]]) ; Parameters ....: $hBitmap - A handle to an image / bitmap object ; $iColorCount - [optional] An integer value. Default is 253. ; $iDitherType - [optional] An integer value. Default is $GDIP_DitherTypeDualSpiral8x8. -> http://msdn.microsoft.com/en-us/library/ms534106(v=vs.85).aspx ; $iPaletteType - [optional] An integer value. Default is $GDIP_PaletteTypeFixedHalftone252 . -> http://msdn.microsoft.com/en-us/library/ms534159(v=vs.85).aspx ; $bUseTransparentColor - [optional] A binary value. Default is True. ; Return values .: True or False on errors ; Author ........: UEZ ; Modified ......: ; Remarks .......: Vista or a higher operating system is required ; Related .......: _GDIPlus_PaletteInitialize _GDIPlus_BitmapConvertFormat _GDIPlus_ImageLoadFromFile _GDIPlus_BitmapCreateFromScan0 ; Link ..........: http://msdn.microsoft.com/en-us/library/windows/desktop/ms534106(v=vs.85).aspx) ; =============================================================================================================================== Func _GDIPlus_BitmapConvertTo8Bit(ByRef $hBitmap, $iColorCount = 256, $iDitherType = $GDIP_DitherTypeDualSpiral8x8, $iPaletteType = $GDIP_PaletteTypeFixedHalftone252, $bUseTransparentColor = True) $iColorCount = ($iColorCount > 2 ^ 8) ? 2 ^ 8 : $iColorCount Local $tPalette = _GDIPlus_PaletteInitialize(256, $iPaletteType, $iColorCount, $bUseTransparentColor, $hBitmap) If @error Then Return SetError(1, @error, 0) Local $iRet = _GDIPlus_BitmapConvertFormat($hBitmap, $GDIP_PXF08INDEXED, $iDitherType, $iPaletteType, $tPalette) If @error Then Return SetError(2, @error, 0) Return $iRet EndFunc ;==>_GDIPlus_BitmapConvertTo8Bit Func _GDIPlus_BitmapConvertToXBit(ByRef $hBitmap, $iColorCount = 16, $iPixelFormat = $GDIP_PXF04INDEXED, $iDitherType = $GDIP_DitherTypeDualSpiral8x8, $iPaletteType = $GDIP_PaletteTypeFixedHalftone252, $bUseTransparentColor = False) Switch $iPixelFormat Case $GDIP_PXF08INDEXED $iColorCount = ($iColorCount > 2 ^ 8) ? 2 ^ 8 : $iColorCount Case $GDIP_PXF04INDEXED $iColorCount = ($iColorCount > 2 ^ 4) ? 2 ^ 4 : $iColorCount Case $GDIP_PXF01INDEXED $iPaletteType = $GDIP_PaletteTypeFixedBW $iColorCount = 2 Case Else $iPixelFormat = $GDIP_PXF04INDEXED $iColorCount = 16 $iDitherType = $GDIP_DitherTypeDualSpiral8x8 $iPaletteType = $GDIP_PaletteTypeFixedHalftone252 EndSwitch Local $tPalette = _GDIPlus_PaletteInitialize(256, $iPaletteType, $iColorCount, $bUseTransparentColor, $hBitmap) If @error Then Return SetError(1, @error, 0) Local $iRet = _GDIPlus_BitmapConvertFormat($hBitmap, $iPixelFormat, $iDitherType, $iPaletteType, $tPalette) If @error Then Return SetError(2, @error, 0) Return $iRet EndFunc ;==>_GDIPlus_BitmapConvertToXBit Func _GDIPlus_ImageGetColorPalette($hImage, ByRef $tColorPalette, $iSize) Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetImagePalette", "handle", $hImage, "struct*", $tColorPalette, "uint", $iSize) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(10, $aResult[0], 0) Return True EndFunc ;==>_GDIPlus_ImageGetColorPalette Func _GDIPlus_ImageGetColorPaletteSize($hImage) Local $aResult = DllCall($__g_hGDIPDll, "uint", "GdipGetImagePaletteSize", "handle", $hImage, "uint*", 0) If @error Then Return SetError(@error, @extended, 0) If $aResult[0] Then Return SetError(10, $aResult[0], 0) Return $aResult[2] EndFunc ;==>_GDIPlus_ImageGetColorPaletteSize Example: ;requires 3.3.15.0+ version #AutoIt3Wrapper_Version=b #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so ;/pe /rm ;~ #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <Array.au3> #include <WindowsConstants.au3> #include "_GDIPlus_GIFAnim.au3" _GDIPlus_Startup() Global $fSize = 3.5 Global $binGIFAnim = _BruceLee() Global $hGIFImage = _GDIPlus_BitmapCreateFromMemory($binGIFAnim) Global Const $iW = _GDIPlus_ImageGetWidth($hGIFImage), $iH = _GDIPlus_ImageGetHeight($hGIFImage) Global Const $hGUI = GUICreate("GIF Anim UDF Example", $iW * $fSize, $iH * $fSize) Global Const $iPic = GUICtrlCreatePic("", 0, 0, $iW * $fSize, $iH * $fSize) GUISetState() Global $iCurrentFrame = 0 Global Const $iAnimDimCount = _GDIPlus_GIFAnimGetFrameDimensionsCount($hGIFImage) Global Const $tGUID = _GDIPlus_GIFAnimGetFrameDimensionsList($hGIFImage, $iAnimDimCount) Global Const $iAnimFrameCount = _GDIPlus_GIFAnimGetFrameCount($hGIFImage, $tGUID) Global Const $aFrameDelays = _GDIPlus_GIFAnimGetFrameDelaysFromBinFile($binGIFAnim, $iAnimFrameCount) AdlibRegister("PlayAnimPreview", 10) Do If GUIGetMsg() = -3 Then ;$GUI_EVENT_CLOSE = -3 AdlibUnRegister("PlayAnimPreview") _GDIPlus_BitmapDispose($hGIFImage) _GDIPlus_Shutdown() GUIDelete() $binGIFAnim = 0 Exit EndIf Until False Func PlayAnimPreview() AdlibUnRegister("PlayAnimPreview") Local $iDelay = $aFrameDelays[$iCurrentFrame] Local Static $iTimerCurrentFrame = TimerInit() _GDIPlus_GIFAnimSelectActiveFrame($hGIFImage, $tGUID, $iCurrentFrame) Local $hBmp = _GDIPlus_BitmapCreateFromScan0($iW * $fSize, $iH * $fSize) Local $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsSetInterpolationMode($hGfx, $GDIP_INTERPOLATIONMODE_NEARESTNEIGHBOR) _GDIPlus_GraphicsClear($hGfx, 0xFFFFFFFF) _GDIPlus_GraphicsDrawImageRectRect($hGfx, $hGIFImage, 0, 0, $iW, $iH, 0, 0, $iW * $fSize, $iH * $fSize) Local $hBitmap_GDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp) _WinAPI_DeleteObject(GUICtrlSendMsg($iPic, 0x0172 , 0, $hBitmap_GDI)) ;$STM_SETIMAGE = 0x0172, $IMAGE_BITMAP = 0 _WinAPI_DeleteObject($hBitmap_GDI) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_BitmapDispose($hBmp) If TimerDiff($iTimerCurrentFrame) > $iDelay Then $iCurrentFrame += 1 $iTimerCurrentFrame = TimerInit() EndIf If $iCurrentFrame > UBound($aFrameDelays) - 1 Then $iCurrentFrame = 0 AdlibRegister("PlayAnimPreview", 10) EndFunc ;==>PlayAnimPreview ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2016-12-01 Func _BruceLee($bSaveBinary = False, $sSavePath = @ScriptDir) Local $BruceLee $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '0J4w/KQYSfUnU6wvtB79V1Iq2HMrEiTgwAHegwdkAZqdilaFWrZu4ZLcoSQuuJOAD9RQS7gwYbwL3vqd0Xcvq8AnBxuejFixY8Zm9WFLgaAzgsmgQRsYTXpxnaZuOHsOzZow6dKXE8E7pkyF59ufWydA8Xr0LjJHaRNVjTt3a969f2cJLuEPiuLFjwPwvcJEHOBmhW+Gjls6dX3XlwN4S027NO63QyNXiyU8LBTky+NEvxr0+t0/3N+6aB4c/fT2TWfAGHHoJ0KBExyYIP9fPPW3z3/1TYYcgQVaV+EFBmKmjYPPIdAhdxIKyB4pCJpggQUlDsFfc6R0+CF0IY42IgkpkmBBBTUyuCGL/nmGQgYZaCDkkEJuYOSRE1qToY0oXmihUzti8eKPQRI55JFICvjHkiPcmCONC0K5gHAuAgCkbd0ZlqSFXIpwIoJwhjmCfiuiSSWaABa2ZglflvBmnE7OKeeK1Nz5w4udxTigknLCUEGTOfZJaDVnHgpAdGpqySgOf0YaaFU2LcDWfGmOKCN+bH7aQgGQAprhUfCM2uKlpeJ36pZwykABjq6qCipXB2FqqgEz8tnoDI8ieOKJp6XkHK152kosqsYCQUH/Acoum4hmD9Z6H66uyrBskzgox4qw0hYLZrgxjNsmgyAS9i2JuXa1HYzyikitgn3ai2iE6e6LYa/vXvNvovneSi/BVB0M8IjqCkpwv6U4jLCeAETM78QFiwdhiBrby8vHmYYs8nm4RRBBbyzDZrLI/6rccssovNwwtAhQp7LKPbxWs8Anv6jzzj27DHRXQi+6cwTP+pzx0TffNjTP1iBHnc0MJY3C0v8kifU8Wv8/A8D1Xl5DnTXOUzN9mdWLfr0f2koTvbaAV5ttMN1xUw1G3aY5wvbWcu/dtt3LJDk2EGX3DYjhgTPId2xvD624NI/fLDnkm1WeFON6Oz745NilPXmr4phX/DTgoO+juU8/o146K6vL1LrYahNB+s0jdo64pm77Mrvuns+OO37ACy785k9/9zrlny+PnVrK28474Xf/3DsvsZdlPfUaTZ+69G9ln8Ptso/3gPjleu+8iuZDzH0ioxVfePv4XV9H/LWfHeLiT2MMdv/54t/+5GIu8YwoKv8r4BJmh8CT+Q0AEICAWizjQDqgIIIT1EsFn5epDRqwgx4UjwJDCIYR6iAEACH5BAkKABkALCwADAA2AGoAAAX/YCaOZDkCaKqiZuu+sLjOQGzfJK3XeO/uNJ9wFAigCgWgyoVpYoak4jGpZLWcT6gshewWil7k8urUqsLfAHpswg6lK4KcANfB3L16ak437u5leX4zRYWDKzZNPnoqhowpiVk4j1VsI4qXGBcXk4eViCWYIk2bnSoMqKmqdi2lGaQXExM2eqq2DKwmrrCyODMLCyoDA7klm5tNsr03v8Epw8UkxxfJyr7PA8DAw8AzTBgNDZvKExUU1yjc2ureZOHjyhYFPijADvcO2s7dPG1YGOSG1FuAL5+2gVb8YQkoZOCBA/r0WfIXzoKFZfQAAHsY8SCkF00qXpzVUGNHjwlf/5CTVcGCQJMnnaV0sXKCRTMmBegUwM+HRYxQBu7k6cznSC05YHrEYfEm0qQdZ75o6rIHkIdYD7SD4TSjjqwPt06tAEMHgrNo06ZNwLYtW1YtbZhVS/esW7esurYYGDVFXbR3A7c9Gy0D34gq/toVHJhwkBIoJEiejEKBZQUz1g6uqyJmysiTJVe+nBnwZrqdT0pNzQ+FztAoFrN1rCK0bcr9TqSQmOI1btkJaKe4fVtqUhWWHzzgnRgBaMk6PX8suyL5cpR+nQMIHV31dKsA7vG+jHm3NuWtv78U75E86wXoZaoPusO90nvGnxquT/q+g/z67YdaCm+BEuAPAAyIQv+BEx2YFF2BoWCAAQAeGJtaEQIwYYUBXqhZgRMW6CCCELYloQEijmiCh6aBiGICHOrHInAnpqjigxiaqOGLMT41IwJ47WjjjT/SKCSM' $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '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' $BruceLee &= '3IupAGQIAQQ0IcdvACUpLN30A0+/AMmtxklv5XPWAAECzTXGLIQAAAA7' $BruceLee = _WinAPI_Base64Decode($BruceLee) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($BruceLee) & ']') DllStructSetData($tSource, 1, $BruceLee) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 17546) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\BruceLee_128x128.gif", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_BruceLee Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize) $tOutput = DllStructCreate("byte[" & $iBufferSize & "]") If @error Then Return SetError(1, 0, 0) Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0) If @error Then Return SetError(2, 0, 0) If $aRet[0] Then Return SetError(3, $aRet[0], 0) Return $aRet[6] EndFunc ;==>_WinAPI_LZNTDecompress It scales the GIF anim to factor 3.5.2 points -
Is it possible to toggle between to different applications.
ioa747 reacted to MichaelCrawley for a topic
@ioa747 Correct that will get me started where I want to go.... I can work though the rest.1 point -
Is it possible to toggle between to different applications.
MichaelCrawley reacted to ioa747 for a topic
Func Toggle($hWin1, $hWin2) ;==>Toggle between web pages ConsoleWrite('@@ (8) :(' & @MIN & ':' & @SEC & ') Toggle()' & @CR) ;### Trace Function Static $bFirst = True If $bFirst Then If WinExists($hWin1) Then WinActivate($hWin1) Send("^1") Else MsgBox(0, 'Toggle @error:', "$hWin1 not exist" ) EndIf Else If WinExists($hWin2) Then WinActivate($hWin2) Send("^2") Else MsgBox(0, 'Toggle @error:', "$hWin2 not exist" ) EndIf EndIf $bFirst = Not $bFirst EndFunc ;==>Toggle1 point -
True AutoIt multi-threading! Split off
LAteNightSpecial reacted to Nine for a topic
@RTFC Could be then may be a mod will see that and shut this bot up...1 point -
True AutoIt multi-threading! Split off
LAteNightSpecial reacted to RTFC for a topic
@Nine: You're wasting your breath, mate; that's a bot you're shouting at.1 point -
Fixed a few issues I found on last release (for Spanish number to text) as well as added a text to number feature for Spanish.1 point
-
How to Resize Animated GIF when Loaded by _GDIPlus_BitmapCreateFromMemory()
teodoric666 reacted to Parsix for a topic
hi , I have a Animated Gif when Stored as Binary i Load it with _GDIPlus_BitmapCreateFromMemory() How to Resize it and get it As a handle to bitmap (GDI+ bitmap format) Func _BinaryDB() Local $BIN $BIN &= 'R0lGODlhQABAANUAAAQCBISChMTCxERCROzq7GRmZLSytCQmJNTS1JSSlPT29Hx+fFxeXGxubAwODIyOjMzKzExKTLy+vDw+PNza3Pz+/AQGBISGhERGRPTy9GxqbLS2tCwqLJyenPz6/HRydMzOzNze3P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCQAiACwAAAAAQABAAAAG/kCRcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/wDAUiEEAoGXYVFBKFhoUUHnMVIIeOEiAVcoQSApWXlpYUcRmPnhKBbwiWn4ebbxCljhBwl4aksIUCcKSHsYe0tbWvlbNvlLyZBqSnbp23w66gccCyugbFbx6NypXDCIpyHsACyQLYdnp9fYB45l0IDRwODhwNCFwEGwkXAQkbBFIeBQD9/v0FslnxYGCBwYMGDQhkomDAv4cAJiyUoqCDwQALMGpc0GFiEg0QIWqwsiEjwpMBDDRBEDIkvCkETso8mG8Jv5YPC1ApaHLm80GVSw7gfHjASIgEDCJEYJAghJEEMzH2XJCAiYWh/ywQ8fBgwASvYAc8WHgRodSDGq1i9adViIIPX+N6jftBwZCzKKcGYCJ0LYCiQrrKHez1wRCoZ/GWrWrTLwCdIiiAJSx3gFMRPM1m/HAWqBKWfl8Knkw6rmERMdGqDsB5Qc3GWCGLYEC59AAGQzJfbG3S85IME4ZOCCVigG3KGIZ4sNhTKuuOTxTchFjA7hAMtQknV56ZtVSFUtIdYHfgnREGx0vjLkLAQIIA9gy8/jI6e2E4ku1/tRzngf4Jp8GhQAPpTVDXHFwdN5YdFCCFwVIJRINFEAAh+QQJCQAi' $BIN &= 'ACwAAAAAQABAAAAG/kCRcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2++IBsfh4DQQdh4FAISFhAUecwoDho0AE4lxGo6OGnEIlJSAb4OZjQVwB56NB3AWo4YWpqiFqm+irAClnLEAoG+YsZu0qLdwGROjExmKnY4FCnZ5B3wHf3fQ0VYhCQwREQwJIVwZFBACAhAUxFEeDwMT6OoDD5FWHhQS8vPyFO5MCh/p++j7H8lVKoCgR1ACiApOzvFbiO6BlXgSBEScKFEihSYh1DHkN2DblAzyJBakR06JQo0o9zmcAnEkwYtLGKScOYGBEQIbElwIkGAD8AEjFV3Sg8CE5kwMRDwYWMC0KVMD90TSE0k1IhMMRhciFeKhA9MAC8CKXdDBXUiCVUMyYbBxpk0hS8E6dRrAwBAIaAtKJLrkZFuVQgjMHdz0pwgEE+cJMACOcT0mFLKu8xiX8Fy7IkAqPptYQkmTkiesFJGAsFy5CxIMaRnR8WKLThQ0yPpvCOqvuOkO8YB481kI95aYo9mOyO3bYZMHSAqRKmMEwZtQqBYBQzaPRErPHetUdZFu4CSI++xlaW66H8BidiO4qdj0yhcYfmPefVj4C9a/6ZrcftgE0bWh1Ff41RXgGwQYkEAAPBmAXRZBAAAh+QQJCQAiACwAAAAAQABAAAAG/kCRcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdgtFNDgOB6eB4Go9BYB6rS54zFbFgE0HTN7wqaZe1+SlCHx8ZX9PaYJ0BYVPB4h0B4tOFo5sFpFNk5RqlpdLjZoAkJ1Kh5qKo0mBoISoSKWIp61IGROOExmySgqvbAUKuUxeB2EHZMDHyMkhCQwREQwJIclIHg8DE9fZAw9400IKH9ji1+Ifv94i1uPr1w/oIdns4wPS0+rx+OLu0wz5/hMMvP3zh8EbhoHrCvKT5y+gPYTx9iWjABEbPXT3GE6QOE1BA4Tm' $BIN &= '0Amp9o+bSCIUmEXAAK3eyZcw/xDYkOBCgAQbCMT0YGCB8M+fPg108+ahg88AC5AqXdBhaLINQKMeNYCOwFGpUXVO64lVKtVpCZJGRSrWZwIjGShAECAAAgVchcj+JCv3KBEPFCTo3auXgtMtS7EuDTDEAwi+iCWAqJAnLNDAQM8KyStAQuXLli2z4tKz7tUAH5B+zZC4tAS4XKzOLRuarNa8pvkK2LyF6+OyAb6KqBybL4Q8Ra8uCJ30Q9MhvPXyXr5XwB+ec+UKJZI8eWbllhcRMJAgwE0DWqkjtp789zTY1S0bSE7BW4b0EtYzRz1R9nX17dF5gJB5vfL1EPyFTAXoqccWAgJOkxZbErhFHxZBAAAh+QQJCQAiACwAAAAAQABAAAAG/kCRcEgsGo+IBsfh4DQQx6h0SpV6CoCsNlvwVL/gqmKwLQMm3rB6LdKYzRq2vIp4v6HzvBFrLxf0VSEJDBERDAkhRgd9ZQeAVg8DE5KUAw9pQhaMWxaPRwofk6KSoh8KQ5qbWZ2eRZGjsJIPQ4uqAI6tQyGUsaMDiSJ8qn+5Qq+8yKKzInW2eMUMydITDEPCfcTFItPSGEMZE4wTGdpCGNyw3kNXdgWn5SIMvdLVRUkHTAdP8EPH88r81FBAVwlYQDD+pi07CEZBA3SmGKrxkFAZJolhKAyKgOGQQYwgQ4rMQ2BDggsBEmwgMPKLBwMLYsqMaeBiyyIeOsQMsICn888FHWzeFLJhptGdBoYWIbDzqFGWSoXAdHo0aVQRCXoa5ak1ZoKrIrjK5Cp2J9ifTn8GAJt1JtqZX6/CLNs0wAeeVqMyHdv1Lleoco+iDZD3as6mC+72/BAU7LqpPcXWdLzUQIIAKQ0Apsy588EMFCAIEACBAjnPFShIWM16NQWhSiuAaE1bAogKlFVLELC7N2/eFBxnqE1cwumoCHgXbx38KoTltCGA7c1aufXVAsAqb329uvbt26uvln5Vt/jfBpQ3jzq8e3rq' $BIN &= 'xh2bxw5ewnrDs+HvTg8B9lAP5gnwngAI+MceBaONZppnDDbo4IMQRghSEAAh+QQJCQAiACwAAAAAQABAAAAG/kCRcEgsGo+hBCMSYSRCx6h0SpV6HoNJdjt4eKrgcFXx0Zqz5o9CzG4Lsed49uGuV0Nb+XkAtfuNcHmCZnR/VAQbCRcBCRsERgx6gwMMRggNHA4OHA0Ibh4GC6KjogZfQwOTehhEHgUAsLGwBadgHh2iAQu6vAsdtaqTrEIKA7LHABO1VBukzrkGQwzBcZVCGsjIGmAEuc/OjyIPknKFCNnZnlSh38/RIhTUXBRCr+jHBVUJu866/KIJhgQiV0jEgXvHDlTxN8ofw1xDFDSgpmaIBYSyLCz896xXgFYD83ghgjGjvn4cRwUsQkEJhiYJ6BU5WBKAwnUpvQX4oOud/Bt7JfMdItVrAU9/4dycq6kOJ0qHPusAvSe0yi1vRnl9+PUnwwSEEzKIAdWQoSlDIlyhK7CmDQEDCQIwMpAUrQgEGg5oOtDJrt+/gAMfyUABggABECiIFWyoAgUJkCNDprCMMZsKICRrlgCigmU3jyUIEE169GiZn8Nk2MxawuLUVRCMbi0ZNewpEGhrhnC7CunIs4NDFtCbymzJwoEXn3IY+ObZvJdHCe3ctIHZtqUTWZ38+m/X2qdrbj5cQvbwQzxk/i76OoTK6NNTF+BdAAL48bdTOHxYcf7/AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGP4RBAAh+QQJCQAiACwAAAAAQABAAAAG/kCRcEgsGo+ETeISSGwIx6h0SpV6DIusNmvwVL/gqqeTDSzM6EXHG267RZutvGx426uE8lwOvfuNWHtzdX9UGRQQAgIQFBlGCWdyZpFZCUYUCQwREQwJIW8VFBKjpKMUbEKTWpOqZUQeDwMTsrQDD6hVFSClvBIgFUNpe2kBQx4NA7SzE8sfCmCiEgLS1NPTFEOQW8JblkKxy8rKD18Z' $BIN &= 'vecSjiKBc2gfZoQUyeH0tJ9UCNPopdgieauU3k3qA05cvQnkqEDYxwvCEHYAWRESweCgwQEMqlAjpa/jKAHGyLhj9WHNkIsWMVTRV8ojx1fsVAXoQmQeSmUqqSji2Euf/sMiBAwkCNDEQB8iFW+Gy0glGk9rBvT1e/MgnNKEU8y5jLox3R15Su19cfqR5bU/F8LaAuNhV1dpUSHgeuNBg9IGz9g6FcBVAIK5dmChTJC3zSFFihoVKoKJwQBOCaYunky5suXLlhE04ODAAYcGCDAv9lAAgOnTpgsAFg1GwQDUsAFMWM2aiobYsTXUboMAN24Qu8GU9g27QPAvB4jDPnC8igXlqC00p/Icumnp06Uktw6AefYow60b/36kN/fQ5I+EJz4+vZEME5RPUOfeiIL1qAsUrl++wYHOB4DG34AEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGGao4Yb8AgUBACH5BAkJACIALAAAAABAAEAAAAb+QJFwSCwajxkKRCCAUDLHqHRKlVYokqw2S/FUv+BqBbQtS0CVsHotxEoE7zgcTmHbqxmzXgK9+40IcHtbdX+GQhCDZRBGBBsJFwEJGwSHU3FagppZAkQeBguhoqEGXpZGglubmUMeHaEBC7GzCx2mp0NMmWaCjEKgo8GyBrhEbrtzBoKFBMLOC5XFInmryph8v8/CxNIix5ypdEMPo7GysKIJ3SIeZNdvyhC35uei9LDr7McC1gIItyLu1UM3K5+QJEyYPDGSAB3BD/TUGQQDbCDEe9wmVmlm76K9UNE0VqkYgF4AiAsyiqTiKtjJkrUArpzySRZKcwb6zARDwEDwgpIJDITcSbSoUUshEjCIEIFBghBHWT4YMIGq1QEPZEYVouBD1a9Uv35QsLXIVLBoqT4oOySE1bRgB0Ble/at3a9r2TK4y3cCA7Yi+vIdABiDYLQYADOAy/cv3cNv85alALnqgEKPGeMFzLXB4bGchXioizZraGNK' $BIN &= 'I2BwOve069d3EDTg4MABhwYIYHsoAKC3794FtG5VMOC3cQAThB/VcPy4Bs4ImjfPzZa3dOMFAB+4bvwAYAvcf1v4Ht73eLbbywPwXl09gOxso6un3j48fMAZJnCfoBOwAuvHFUDWa7IdUNsBuMGm4IIMNuiggkEAACH5BAkJACIALAAAAABAAEAAAAb+QJFwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y8VmKBCBAELJdLMVimTNXlM852oF1K5LQJX4VC0R9P9+fhR6URl2hxJmhE4Ifohtg4tNEI91EJJNf2yOnGsCmEyObZ2boEtim3aOl6ZJfKmBBo6RrUeGpLKaibWudaieErS8Rh50un2yEHDDSB6vArkCCMvMSV9iYmXV29zdSAQbCRcBCRsE3sQGC+vs6wbU3h4d6wEL9fcLHfDcG+3+9AbQEaD3z9+5buoK/gvYLYE9f/UerkvgLSK7iBbpVZT4D18Abw7b4fNHESHHi/Y+1GPIbSDKiCojHjQJUWIAlt3kEVygMqXpPnRCPCS0Z/EdUCIEDCQIQM7AzKNQo04JkYBBhAgMEoSQ6uHBgAlfww54sI+bgg9g035N+0EBUK9q4359gC5EWLlqB2ztBveu37R0CSFowMGBAw4NEBhh8LfxBAZ6PBQAQLky5QLwHDfGEEfBAMugAUygplnugDgaQofWMIQB3saQuyBQrVqxiL6vAZ+ZTBt0ASEUSovdy+VAb9AHhuB2HLiLheOWLQxR0KB02zjPoVOWPqQr87JajGsHkLwIhaoRMGQlHoe39t/dZo+33c19b/jeMkw4PkEROgX2WVaAW1ENdoBhByTGRRAAOw==' Local $bString = _WinAPI_Base64Decode_BinaryDB($BIN) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) Return $bString EndFunc ;==>_BinaryDB Func _WinAPI_Base64Decode_BinaryDB($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode_BinaryDB1 point -
Word Wrap for Edit Control
t0nZ reacted to pixelsearch for a topic
Hi everybody It seems tricky. Have you already seen any AutoIt script where OP's need is solved with a simple control style (added or removed) after the Edit control has been created ? Even MS write this on its msdn page, topic Edit Control Styles After the control has been created, these styles cannot be modified, except as noted (...) It seems frustrating because when we open NotePad, menu Format, option Word Wrap, then we can easily check/unchech the Word wrap option and the Edit control in NotePad reacts immediately & correctly. But did you notice the following ? If you use "AutoIt Window Info Tool" to check the handle of NotePad's Edit control, before and after you checked the Word Wrap option... the handle CHANGES each time ! (we're talking here of NotePad Edit control handle, not of NotePad window handle) It means that even MS deletes the Edit Control and recreates it immediately, with the new appropriate style, when the user checks/unchecks Word Wrap in NotePad @ahha I tried the same way to solve it in the script below, it seems to work fine : #include <GUIConstantsEx.au3> #include <GUIEdit.au3> #include <String.au3> #include <WindowsConstants.au3> Opt("MustDeclareVars", 1) ;0=no, 1=require pre-declaration Global $g_hGUI, $g_idEdit $g_hGUI = GUICreate("GUI Window", 920, 570, -1, -1, $WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES) ;handle _EditRecreate(False) ;False = no word wrap (keep it False here, to match with the unchecked Menu item "Word Wrap") ;Format Menu Local $idFormatMenu = GUICtrlCreateMenu("F&ormat") ;Create the Format menu. Underline o when Alt is pressed. ;sub-menus Local $idFormatMenu_WordWrap = GUICtrlCreateMenuItem("&Word Wrap" &@TAB& "", $idFormatMenu) ;Create the "Word Wrap" menu item. Underline W when Alt is pressed. GUISetState(@SW_SHOW, $g_hGUI) ;display the GUI _GUICtrlEdit_SetSel($g_idEdit, -1, 0) ;deselects only when placed AFTER GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $idFormatMenu_WordWrap _WordWrap() Case $GUI_EVENT_DROPPED _GUICtrlEdit_SetText($g_idEdit, FileRead(@GUI_DragFile)) ;read and set the data to be displayed EndSwitch WEnd ;============================= Func _WordWrap() If BitAND(GUICtrlRead($idFormatMenu_WordWrap), $GUI_CHECKED) = $GUI_CHECKED Then ;turn off Word Wrap _EditRecreate(False) ; False = no word wrap GUICtrlSetState($idFormatMenu_WordWrap, $GUI_UNCHECKED) ;uncheck Word Wrap Else ;turn on Word Wrap _EditRecreate(True) ; True = word wrap GUICtrlSetState($idFormatMenu_WordWrap, $GUI_CHECKED) ;turn on Word Wrap and show checked EndIf EndFunc ;============================= Func _EditRecreate($bWordWrap) Local $idEdit_Old = $g_idEdit ;0 at first passage If $idEdit_Old Then Local $aPos = ControlGetPos($g_hGUI, "", $idEdit_Old) Else ;1st passage Local $aPos[4] = [10, 10, 800, 455] EndIf $g_idEdit = GUICtrlCreateEdit("", $aPos[0], $aPos[1], $aPos[2], $aPos[3], ($bWordWrap _ ? BitOr($ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL) _ : -1)) ;control ID GUICtrlSetState(-1, $GUI_DROPACCEPTED) ;allow drag and drop GUICtrlSetFont(-1, 10, 400, 0, "Courier New") ;change default font If $idEdit_Old Then _GUICtrlEdit_SetText($g_idEdit, GUICtrlRead($idEdit_Old)) Local $aSel = _GUICtrlEdit_GetSel($idEdit_Old) GUICtrlDelete($idEdit_Old) _GUICtrlEdit_SetSel($g_idEdit, $aSel[0], $aSel[1]) Else ;1st passage _GUICtrlEdit_SetText($g_idEdit, _StringRepeat("1234567890", 20)) EndIf EndFunc Hope it helps1 point -
You need to install/use the Full version of SciTE in stead of the Lite version that comes with Autot3.1 point
-
Date Diffrence between _NowCalc() and FileGettime
Marc reacted to FrancescoDiMuro for a topic
@great77 Look closely in the Help file about _DateDiff()! Try this: Global $strFileName = @ScriptDir & "\File.txt", _ $arrFileTime, _ $strFileTime = "", _ $strNowCalc = "", _ $strDateDiff = "" ; Get the Date/Time for the Created property of the file $arrFileTime = FileGetTime($strFileName, $FT_CREATED, $FT_ARRAY) ; Format the Date/Time to calculate the difference $strFileTime = $arrFileTime[0] & "/" & $arrFileTime[1] & "/" & $arrFileTime[2] & " " & $arrFileTime[3] & ":" & $arrFileTime[4] & ":" & $arrFileTime[5] ; Get the "Now" time to calculate the difference $strNowCalc = _NowCalc() ; Calculate the difference in Days ("D") $strDateDiff = _DateDiff("D", $strFileTime, $strNowCalc) ; Display the Difference in Days ConsoleWrite("Difference between '" & $strFileTime & "' and '" & $strNowCalc & "' ( in Days ) = " & $strDateDiff & @CRLF) Cheers1 point