saraconor Posted August 8, 2019 Share Posted August 8, 2019 With use GIFAnimation.au3 how it's possible? GIF.rar Link to comment Share on other sites More sharing options...
Werty Posted August 8, 2019 Share Posted August 8, 2019 From the GIFAnimation.au3 file... Func _GIF_GdipImageSelectActiveFrame($pBitmap, $pGUID, $iFrameIndex) Local $aCall = DllCall($hGIFDLL__GDIPLUS, "dword", "GdipImageSelectActiveFrame", _ "ptr", $pBitmap, _ "ptr", $pGUID, _ "dword", $iFrameIndex) If @error Or $aCall[0] Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_GIF_GdipImageSelectActiveFrame Some guy's script + some other guy's script = my script! Link to comment Share on other sites More sharing options...
Nine Posted August 8, 2019 Share Posted August 8, 2019 Get rid of GIFAutomation. Just tested it, and my comp crashed. Those assembler / thread add-ins are not robust and stable enough... “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Screen Scraping Multi-Threading Made Easy Link to comment Share on other sites More sharing options...
saraconor Posted August 9, 2019 Author Share Posted August 9, 2019 Can you give me an example please, in my script? Link to comment Share on other sites More sharing options...
Nine Posted August 9, 2019 Share Posted August 9, 2019 Look example of _GDIPlus_ImageGetFrameCount in help file. It is a good way to implement GIF animation. Personally, I use AdlibRegister function at every 10ms, to see if it is time to display next frame... “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Screen Scraping Multi-Threading Made Easy Link to comment Share on other sites More sharing options...
Mbee Posted September 10, 2019 Share Posted September 10, 2019 On 8/8/2019 at 7:49 PM, Nine said: Get rid of GIFAutomation. Just tested it, and my comp crashed. Those assembler / thread add-ins are not robust and stable enough... I agree that the code is a rat's nest (and I had to pay for help with it, with almost nothing in return), but it has capabilities that a careful examination of alternatives do not and can not provide, at least without far more work than sticking with GIFAnimation (otherwise there was no way in hell I'd have forked over so much cash!) I'll try to take a look at GifAnimation in the next few days and see if I can provide any help, but my instincts tell me that it would very likely do what you need. At least all that spaghetti code provides great power... Link to comment Share on other sites More sharing options...
Mbee Posted September 10, 2019 Share Posted September 10, 2019 (edited) That didn't take long! I may have found two different ways to do what you want. The first is to see what happens if you call either trancexx's function _GIF_GdipImageSelectActiveFrame() (which I would do in order to avoid side-effects) -or- _GDIPlus_ImageSelectActiveFrame() which is the official AutoIt function to do the same thing. What I don't know is whether that would cause playback to begin where you want. Another option would be if you could find a way to create an "image list" (official Autoit "_GUIImageList_Create())" / trancexx "_GIF_ImageList_Create()") from your GIF, but be careful about setting the correct parameters. Then you would call "_GUIImageList_Draw()" in a loop starting with the desired index (frame #). The thing is, I don't know how to create an image list from a GIF. I know you can add a GIF as one member of an image list, but that's not at all what you want to do. You would have to experiment and learn if that's possible and how to do it. There might be a UDF or Windows function to either create the image list frame by frame directly or a function to return one frame at a time from the source GIF, which you can then add to the image list. Good luck! Edited September 10, 2019 by Mbee Link to comment Share on other sites More sharing options...
Mbee Posted September 10, 2019 Share Posted September 10, 2019 @saraconor, roughly how many frames do you want to skip past? If the frame you wish to begin with is no more than approximately two seconds in, I have a solution that's much simpler than my previous suggestions. What do you say? Link to comment Share on other sites More sharing options...
UEZ Posted September 10, 2019 Share Posted September 10, 2019 (edited) Here an example: expandcollapse popup;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 $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, $iH) Global Const $iPic = GUICtrlCreatePic("", 0, 0, $iW, $iH) 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, $iH) Local $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp) _GDIPlus_GraphicsClear($hGfx, 0xFFFFFFFF) _GDIPlus_GraphicsDrawImageRect($hGfx, $hGIFImage, 0, 0, $iW, $iH) 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 &= 'BI4EjGSKZpFJj5BpY5OUmVVon51um2GVSqCldqNfqHWiqmehrVavsEoMt7i5krRYlbm/DLu8WFULC0oDA8LDU8XHScnLzFHIA8bGycaz08TQ1tfZz4ncWUjGDugO18/aAORa5gvp6tfxTO/dxgcH6+vj+FLi7etXLxVAagAI+jN4EKHCgvcaXoknoKKAdhLhJVxg8eKzjF/iLZTFpaFIiCRd4dvHkmWClzBjyoTJgcODBxHJtWw5s6fM/5o3c/JSgqAoAp8xDRiYWdNYUHfTiBpFClMpUw5OcUJ9JdXoVKRKlXbJKnRTV69HwYYdu+DpUABo0VINawBJgwYny0K5wLevX75QkMT1OnctgLt5t075y/iCE8EIIMctfO8kxikWLFSgALhbUcly1VbeuPBKZgsFOk+EG5n1ZKSJ4kmYLUHvhNOaLTR23Iw1aMKw7cimbRt35t2rP/t2nTbmhg1IXubcNiRzhdOMw0Deznzm8+gJpqsUYlz3X+3LNWhAol798/cbpDOMgpvvifv484dMvx5Aew3wPSefbU7Ud0F+CJ6wn1dIZJABZFSVpQRjuE0CWoMPshahYkJM+P9XbhaMwp2DEAbXYRIKpKgAgWYtR6KGJhICgIorckjLiBmmNKOK/zCDo45I0NjjMBcCcNORSD7wEm3EzcdNkUkmuSSTtTlJjjMPtVMaSFhmmRhIQ3DXxk0psgiQmGOQWSOYWzBX1ExiWZnRb81VVZecB9H5pkzgmYmPnnXKJx+bVAz2VUx92miSm6EhCsCgXDIaQQR0VWoYpIvGNamlliaaqVFxTjppFXR5midzoYpK6qXhKUokqneKGoF4pT7a6pmwIiErraz6aWGuAOzqKhJxYhoVsMI+BkCxtx7rVaqjunpircZyhayq0lJBbbNv1Zpsb8z6egexhn0b0LJ3VqvSCrm6YlsOuqZ2G6u73YSb7a+pitumvT7CG+ys9zbBrq36vjGwueCmy+2N/iJ8Lr/HyhftfhC/JTHAFCtcsBmJTqxRxQxfvLG2Ggc8SMcYf1xyvyKbXMTA6opoa5wjw7ywtS/R7PK+Kx8LXswIgWztzzcnHO+6Rj4gtNEE71wGEjct/XDPMt8kaNHvKuVx1Uq2CvRqWqcs80wj50G20++eDQfRXxtc0rhNI4Z2N9RxHDdec4OJBAQQvOQWob3x7bdWgPemduEIHY44QnUvLvDbcAQBACH5BAkAABMALCgADABKAGoAAAX/4CSOZGlOQKqu6em+cCyXbA3MeK6Ldn/vwODIZxMac4FAqlAgro7QV3LZdLaiWNKKyS0ku8znUJUFbsFfsJhHLuOmLIKcAO+xFXjF1eRwuEV1KnN0Sj53eXslfX8TgStJkIU1WioLC4mMJI4qkZuJK5aYmYCSVkUoABISlqE/o5qlpixsqqyXrq+kKwy8vb52qLWsoqOBvscMwCnCrbkmNa0pAwPKqaoSk85soLfS1KfL19naK9O25t1t2wCteXq4o+UD5/Ppn5W37sSZKZZ9fbb63XIhMIU+ePzYLfjnIKDCfQUBHCSn8MABWw73seljEBFCNwItYhym7kQKjhI9/+oQoxGVLQECMn6kobDdu5VtWgq0BFOmjJ35bs4AuuaFwJ4kcRBVUcCC0prpfipE2mwo1BUUKjy1paolpZFXrHDg4FBEBadWuWKb+QxqVbFkk06wgFaqWp0qLOrVuyKB37+AAY+tSvfCBbusurJFlWLv3r6BI/sdPHCuBcNSHzy4Jg7XCgSgQ4OWTDrwuBGYY6TQzFkxpRSiRZeeneC0iNSIXY+JzRsB7dqnYBg+m3stpd6xfwMTfoFu8XvIZZdO4dfricKHjSrUzSZ66NnUgQOxUAG3ye3GUXmXHjl89cXMYQjUDXv9aMnuxQcxT/Dhj/r1IUdaeNa5YNhwFMjnX/93CATY24AAvCfEgc0VoKAliomWQgYZCGhahH8V+IJhzmmH4VoaAsChh4DlJ6KBzdV13okAqphBChrk' $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 &= 'M3IsfYIrgDKFVGaHKImKVYyNfgyUlZZvkZIslpwMmJk7LQsLLAMDn6AmNaOlp0OpJ62jo6asf7ChKrWzuzW4MCqjDsMOs6QAtr8vwQvExbPMkMolzAcHxsaL0yPV19i20kUY4xhhyN/Qhmfk5T/M6MfhROxPzAL3Asnr5PXn+PnHwNA78y6dQH4Ez2Xz8WRcPxbWIkb0Na9dkRoSJVLUceGCwxEfZbBAQLJkgpMoU/+e1PaiY0gOL4GtKGlSpU2WJiZMcNmuYxAANIMisGmTpjwSOnmK8DlDhVCaRFUaZXhCp85xHZmKBPqUZNSUThEcHWF1AtasP7t6/bqS61gRBSiU7digwdlQamvaNMDXQFiSYy1UmHuh7t1YXPNG7es3sViqOa2yi8kNgAQJgLlq2Mx5g+fPnttuDvuWQ9nJFqlZxvyYJOfOoD+L1kAacgmdFSwYTq1qdeYMGYSyVQF85GMUOi3otstb9eXfwYMOB1B85vETysvqDDXqMji3NmyOpg48A04O2bVzX+A9Hvga4mmTr14atwWZox48qJHZ2GUWsxFnHnjITaAcfgvox9//Y/5JAGACKoxXXWYwKHcgYvntB0BdtV3moQQL1TDhdShYeB+GCWrIIXgftvcdCyOWJsKFvV2m4IYN/PUYCxnq56OPxsmIXgWh2Khijo6tkuKPPwZpGwoVUEBDCy06aB1UKLFQ5YfnlVjAlFq2aByWbamwpYddLgOAAmwqYCaI6Yw5FFFC9NOmm6uFeOWcN91hRQ0uHnNnWNMxAiictgzKVaGwUEEmnU8e4qhekG6jo3BfCQnIpdJlGqmhjpEUQQSMldqXCm3hwumoppqKKoSfJkQTXyqMOmoNjL2q6RWO0QqArRHgeioAqUaio6/ASqNCrsTCmsmxjSVL1bLDFrtp/q/R2joWtbrGehG2tWobKbfN7ppWSciKKxOz1v4J7q/qqsmuswkxK+1Pvrbbj73xbpUvvWCQe28O5OrLa7q3eqvav+Y2BUC6DU/JsML4ZhsxBwUD7C7CwVJc2cRwCNyvwyDj0W3C5pQccLnwXpzxxaG0hbI7Dzdm8Lcyd5yyzRqvnLPLNXcbMssz6/Cyx1ud5CvQKrurdGNM8wyzmq/eHMPRQ1fdM8lSI62mfk1XLLS7YHe989jf6teW1RUXTYQKasPKNtdum9OnzypNrfXcP9399it4q7Ditxs5Devg2xAMAAQQnHRj4g4z7riGkCedt9fK7L115YgVznkuLYQAACH5BAkKABMALCIADAA8AGoAAAX/4CSOZGmWQKqu6em+cDyyNCDf+Fnvdu7LvNpveAoEUoVCcEVsToxI5bLlHK6S2IIxm2RWc1fuluv9xqAsgpqA3pllbdWafeS9z3WacZ9n3WFxK3yBKn8vhFNlhiWIiVSLjH0Mk5SVbpCRK5WbDJeYKCwLCysDA56fM6GjKqWnqBOkA6KipaI0JFSKZrGzC7WrirmFiymiDscOvcWruCrKPXfLyMmzy4+wztXQb8sHB73P1ykSEs+G3d/gtsMi4+Xa5wC9AgLh2+0A5OZ/y6L09ibc7Yvnrx48UKL0LTh2LZq8Bf8ONkv4juE9fg8HgiLHUUJDjOo+4utITuQbbyhT/x7QhU2jIZUqWfZjhjEFgpsIEujcydPLTJNNVuDMybOoz4w0qwgdirOo050rjDkACkYF06ZPnUZdOPViQBUePDS7ejWr2QQpjq2DsSLsWLJDz2ZNS41qCgUKUrjFBjfuUwOAAzvlQJiDXQB49Yrl2/dm1sCCixY27BUb3sQAGjQIa7MxUaeAacytfPdyCs2cAXj+XDQ0i9EuSp/WTDvsUA0ayhbdsCGFTmG3XsjOTBu1h9u5mTrl7RttD1epHjzAXLxz2AwZUuDeroG39w2/AYS3AkA6ddrWPWDXzr37d/DOx/+gUVxzZ8Wd/fYUD7UyWxb1NXAfAKnptt9+PrhDDv89NBDW2XqqKWcUf1TFlg9HDLLgYIQQGtif' $BruceLee &= 'fAkiRRJJk3Uo4YHOkdfLiB2VmF2E+n2Y4nxITaOOfSx42ByIVfViIzg4LhXjjjPiMJwjbw0JAGA8AoFYXo5skx9W4TFZ5A2lYRaijksaUKEOT2pZFZeukceSk2R66Z9wftCY5pfxwKUVhWvGSdacTWIypYfh5QnJnifKCKcTgEYQAWSIBtbcoORdZWiiiS5aJxFTumaooTRAJumfMCJg6aWZKkqnnTd9iqmUXbrmJ6GdmhqBOKmquWqjOLlqUgqqXqlUq2pe+ippXW76RaW9gromrqLOiiWvKfh6mKajsgqts5PikyvGoxu1AGBOa6yRwUYbAFS31IZ4bbVsANpKrrWy6kopALi/kjfurp9iAIuusN+aK266APKCYm9V7w5LAOep7uJ7LpjhAAFMY7+7FtwuAL8C7/LvwtwiAOyvwtgiSy+rABQPbLG3EyfgANqgGysbok4fAJMbsrq7EglyALciV6WyySyjAEyjdBL/V/O6ADQ3vOzNIUrXAKfMNhtg8Lc+AMcHdLlCQ7zuAJzfMr30hE1DAL1ucFHPli8+AFQ/bfXAr+ADAAEEOkl3tZ4AAHwd9gNjc+p0ANfLrs32slm/AB3DDiEAACH5AAQFMgATACwiAAAQADwAZgAAAAX/4CSOZGmWAECqrunpvnA8ALI0IN/4We92AO7LvNpvqKsVAApBonKyOyaXAL7gMRA4OllQAJy0QLUisVlgAI1AJlCfYdiuAGwOoNOuIHXuABbCX3J6nXbHAAf/LX1FgG+CADMsDImKi4l8AIYoiIySjo+QACkUFCkCmwKXAJkqlXEqmJqcAJ4roYMACwsDAAOsrK6sqIciALRwK7GvsLILALdMPb+4q7AOAMYOsL49JLmwAIHDycfIzsuHACnJz2nXsAfdAAfY1bYAEhLgAH3brN7f1CYpAOTmd+jJ89niAO/s8cTz9OHAAPez/cJs4yQAAGA7YveM1dNGAIygQUisEjpYAAgNnyhyGCVQAGQI72JGjQHTAKgbeUAYsI6CAEj/qjMpb6OSABUIYiJIQLOmAE1aLUO+VCFzAKbNnzj1KRPIALOnzJ9IazZTAKgzB0yjMZMmAF06sam4FB48ADADABWq1K8JAFIYeygKq9ZDAF2NgpUqdppLAGAKFJgVl7anAFQDePMi5cCXAMPbFHHnAqt7ADRpXr0/+/oNAAk4rlwADRpkAE1BOKphAzTYADIG4Phx5MlcACvfxcxCs6jAAJAjq87aU4MGAK8/N2xIQTPQAA41nD2r/uyhAPVrtbFnA6gdAMzOwQcPUO+mAIwga4YMKVxLANcgu/oG4sSHAKRArlw1c+fQAAFMd21dNvawAFZVpdgdmblZAOZ2gQ5Xmv7gAAr2DdwDAA37AOb87E6Ng9EmADTwxdxz8BXmAB//gFEISA6BACwYGBqCocW3ACB62gn10UeKAFHYH30MBpjMAIYZdRjeh+e9ACVKNMfs0x4LAB/SRl+GLI41AM+LT1mInn8NAKJGSDUJWkYcAF4hiuEjIVvFAAgAkRgG2JmKAJAoiReUBz1ZAB9awA1JWoYmAIkh5ZY/UBLgAJdU5pMWUjKWAEnUmfIV+UiQAFmC2GQqcOqYAOKVO0EVQQSHAPWZV5p4hlmhAEx7+uknoIYkADglAHvuScNhAIgKoihpjUbwAOif86l5w6QpAFSaTQqQZhqoAJcyLeopkEtiAOpmnqVS2uhGAKCStioRnDL6AOpmi87aYE+mAN6KW6i6bjpoAK+ONhVrrnPSAJpqr10WgaymAAeFWmyZsUa6AJOutJYGWu1/AMk2iK2m2/K4AESsxBXrrazdAArKZKfZnmvtALgqlNtugM+OAGqJqObSiy60AH7IS22q70IBAGi+YtR7znyLAP5rMEM0JXxlALjpChzvjMKuAGsvbjIGu5XFAMMgt3DB+14MAInHIWsBsKgSACN3Z4Z4EaysAMo7RhxDrC5nAIimyBlTbLN8ADvdvJOYO6+XAB/OxilL' $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 Change variable $iCurrentFrame in line 20 to choose start frame. Requires _GDIPlus_GIFAnim.au3 which can be found here: Edited September 10, 2019 by UEZ Mbee 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Mbee Posted September 10, 2019 Share Posted September 10, 2019 As always, @UEZ, I am deeply impressed with your knowledge and skills! I chose to enter this thread because I've always wanted to give back, even though I'm still a virtual newb. I will study your code carefully. Thank you! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now