Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 10/17/2017 in all areas

  1. czardas was very very clear in posts #6 and #8 #include <Array.au3> #include <File.au3> Local $a = 0 Local $sFilePath = "C:\New Folder" Local $FLTAR = _FileListToArrayRec($sFilePath, "*.pdf", $FLTAR_FILES, $FLTAR_NORECUR, $FLTAR_SORT, $FLTAR_FULLPATH) ; store @error IMMEDIATELY Local $iError = @error ; then do some other things If $a = 0 Then MsgBox(0, "", $a) Sleep(100) ; etc ; then check previous $iError If $iError Then MsgBox(0, "$FLTARIf", "0 files for transfer") Else MsgBox(0, "$FLTARElse", "SUCCESS") EndIf
    2 points
  2. mikell

    Check if file is video

    I never said that the list I wrote was all inclusive - reason why I added "populate this as needed"
    1 point
  3. You mean something like this here? #include <ButtonConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Opt('MustDeclareVars',1) Global Const $MK_SHIFT = 0x4 Global Const $MK_CONTROL = 0x8 Global Const $fPi = ACos(-1), $fPi2 = $fPi / 2, $fRad = 180 / $fPi GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL") GUIRegisterMsg($WM_PAINT,'WM_PAINT') Global $gX0,$gX1,$gY0,$gY1,$gForm1,$glblPic,$iW,$iH Global $ghCanvas,$ghImage,$ghPen,$gGraphicPic,$ghBitmap,$ghMatrix,$ghImageClone,$ghGfxClone,$ghImageCropped main() Func main() Local $oldY0,$oldY1,$fAngle _GDIPlus_Startup() $ghPen = _GDIPlus_PenCreate(0xFF000000,2) $ghImage = _GDIPlus_ImageLoadFromFile('pergola.jpg') $iW = _GDIPlus_ImageGetWidth($ghImage) $iH = _GDIPlus_ImageGetHeight($ghImage) $gX0=10 $gX1=$iW-10 $gForm1 = GUICreate("Form1", $iW + 16, $iH + 50) $glblPic = GUICtrlCreateLabel("", 8, 8, $iW, $iH) Local $btn = GUICtrlCreateButton("Rotate", $iW - 100, $iH + 20, 65, 25) GUISetState(@SW_SHOW) Local $h = GUICtrlGetHandle($glblPic) $gGraphicPic = _GDIPlus_GraphicsCreateFromHWND($h) $gY0 = $iH / 2 + 100 $gY1 = $iH / 2 - 90 $ghBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH) $ghCanvas = _GDIPlus_ImageGetGraphicsContext($ghBitmap) $ghMatrix = _GDIPlus_MatrixCreate() ; Loop until the user exits. While True If $gY0<>$oldY0 Or $gY1<>$oldY1 Then Paint() $oldY0 = $gY0 $oldY1 = $gY1 Else Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $btn $ghImageClone=_GDIPlus_BitmapCreateFromScan0($iW, $iH) $ghGfxClone=_GDIPlus_ImageGetGraphicsContext($ghImageClone) _GDIPlus_MatrixTranslate($ghMatrix, $iW/2, $iH/2) _GDIPlus_MatrixRotate($ghMatrix, -Angle($gY1-$gY0, $gX1-$gX0)) _GDIPlus_MatrixTranslate($ghMatrix, -$iW/2, -$iH/2) _GDIPlus_GraphicsSetTransform($ghGfxClone, $ghMatrix) _GDIPlus_GraphicsDrawImageRect($ghGfxClone,$ghImage,0,0,$iW,$iH) _GDIPlus_GraphicsDispose($ghGfxClone) $ghGfxClone=_GDIPlus_ImageGetGraphicsContext($ghImage) _GDIPlus_GraphicsClear($ghGfxClone) _GDIPlus_GraphicsClear($ghImage) _GDIPlus_GraphicsDrawImageRect($ghGfxClone,$ghImageClone,0,0,$iW,$iH) _GDIPlus_GraphicsDispose($ghGfxClone) $gY0 = $iH / 2 $gY1 = $iH / 2 Paint() $ghImageCropped=_GDIPlus_BitmapCloneArea($ghImageClone,120,66,745,403) _GDIPlus_ImageDispose($ghImageClone) _GDIPlus_ImageSaveToFile($ghImageCropped, @ScriptDir & "\pergola_RnC.jpg") _GDIPlus_ImageDispose($ghImageCropped) ShellExecute(@ScriptDir & "\pergola_RnC.jpg") EndSwitch EndIf WEnd ; Clean up resources _GDIPlus_MatrixDispose($ghMatrix) _GDIPlus_ImageDispose($ghCanvas) _GDIPlus_ImageDispose($ghImage) _GDIPlus_ImageDispose($ghBitmap) _GDIPlus_PenDispose($ghPen) _GDIPlus_GraphicsDispose($gGraphicPic) _GDIPlus_Shutdown() EndFunc Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam Local Const $kYmax=$iH-1,$kDelta=2 Local $vec = GUIGetCursorInfo($gForm1) If $vec[4] = $vec[4]=$glblPic Then Local $iDelta = BitShift($wParam, 16) ; positive = up Local $iKeys = _WinAPI_LoWord($wParam) If BitAND($iKeys,$MK_CONTROL)=$MK_CONTROL Then If BitAND($iKeys,$MK_SHIFT)=$MK_SHIFT Then ; do nothing Else If $iDelta > 0 And $gY0>3 Then $gY0 -= $kDelta If $iDelta < 0 And $gY0<$kYmax Then $gY0 += $kDelta EndIf Else If BitAND($iKeys,$MK_SHIFT)=$MK_SHIFT Then If $iDelta > 0 And $gY1>3 Then $gY1 -= $kDelta If $iDelta < 0 And $gY1<$kYmax Then $gY1 += $kDelta Else If $iDelta > 0 And $gY0>3 Then $gY0 -= $kDelta If $iDelta < 0 And $gY0<$kYmax Then $gY0 += $kDelta If $iDelta > 0 And $gY1>3 Then $gY1 -= $kDelta If $iDelta < 0 And $gY1<$kYmax Then $gY1 += $kDelta EndIf EndIf EndIf Return $GUI_RUNDEFMSG EndFunc ;==>WM_MOUSEWHEEL Func Paint() _GDIPlus_GraphicsClear($ghCanvas,0) _GDIPlus_GraphicsDrawImageRect($ghCanvas, $ghImage, 0,0, $iW, $iH) _GDIPlus_GraphicsDrawLine($ghCanvas, $gX0, $gY0, $gX1, $gY1, $ghPen) _GDIPlus_GraphicsDrawImageRect($gGraphicPic, $ghBitmap, 0, 0, $iW, $iH) EndFunc Func WM_PAINT() _WinAPI_RedrawWindow($gForm1, 0, 0, $RDW_UPDATENOW) Paint() _WinAPI_RedrawWindow($gForm1, 0, 0, $RDW_VALIDATE) EndFunc Func Angle($y, $x) ;return value is in degree Local Const $fPi = ACos(-1), $fPi2 = ACos(-1) / 2, $fRad = 180 / $fPi Switch $x Case ($x > 0) Return ATan($y / $x) * $fRad Case ($x < 0 And $y >= 0) Return ATan($y / $x + $fPi) * $fRad Case ($x < 0 And $y < 0) Return ATan($y / $x - $fPi) * $fRad Case ($x = 0 And $y > 0) Return $fPi2 * $fRad Case ($x = 0 And $y < 0) Return -$fPi2 * $fRad Case ($x = 0 And $y = 0) Return 0 EndSwitch EndFunc I need to think about an automatic crop solution...
    1 point
  4. I am not asking for the source as I thought you already posted that, but rather: What exactly happens when you run it as you more or less only stated that it doesn't return anything. So what exactly do you see in the SciTE outputpane when running the script and hitting a hotkey? Jos
    1 point
  5. what about .scr? what about super fast .ppts?
    1 point
  6. Show Libary documentation and Demo dll if it has one. Saludos
    1 point
  7. @Danyfirex: I already hinted at that in post #12, but I guess I wasn't sufficiently explicit. In Dependency walker, cdecl = name starts with _ and has no @; stdcall = name start with _ and has an @; if it begins with @ and has another @, it's fastcall. (NB assuming the dll is C++ decorated). But the simplest way would be to try both ways; for your function return type, instead of "none" (stdcall), try "none:cdecl". Then again, if it worked before without the cdecl suffix, then the calling convention was correct to begin with.
    1 point
  8. @mikell : don't forget (?i)
    1 point
  9. mikell

    Check if file is video

    Simpler using a regular expression Local $extensions = "mp4|avi|flv|wmv|mpg|mpeg" ; populate this as needed If StringRegExp($filename, '(?i)\.(' & $extensions & ')$') Then Msgbox(0,"", "it is a video file")
    1 point
  10. Jfish

    Check if file is video

    That stack overflow method creates a list of extensions - some of which are not video formats. There is also a winAPI call to retrieve a file's perceived type based on its extension (not sure how reliable it is). Modified help file example below with list from StackOverflow example: #include <WinAPIReg.au3> #include <Array.au3> global $mediaExtensions[16]=[".PNG", ".JPG", ".JPEG", ".BMP", ".GIF",".WAV", ".MID", ".MIDI", ".WMA", ".MP3", ".OGG", ".RMA",".AVI", ".MP4", ".DIVX", ".WMV"] for $a=0 to ubound($mediaExtensions)-1 local $aData = _WinAPI_AssocGetPerceivedType($mediaExtensions[$a]) If IsArray($aData) Then ConsoleWrite('(' & $mediaExtensions[$a] & ')' & @CRLF) ConsoleWrite('String: ' & $aData[2] & @CRLF) EndIf next
    1 point
  11. Try to add this following line on top of your main script: #Au3Stripper_Ignore_Funcs=Message* EDIT: #Au3Stripper_Ignore_Funcs=Message* #AutoIt3Wrapper_Run_Au3Stripper = y #Au3Stripper_Parameters=/RM /debug /sci=9 For $c = 1 To 3 AdlibRegister("Message" & $c, 3000 * $c) Next While 1 Sleep(1000) WEnd Func Message1() ToolTip("1") EndFunc Func Message2() ToolTip("2") EndFunc Func Message3() ToolTip("3") EndFunc
    1 point
  12. Calling a MsgBox will pause the script until it's closed.
    1 point
  13. Floops

    Autoit Perform Variable

    The variable stores what is assigned to it. If you assign a function to a variable it only stores the return value of that function. For what you want to do it would be best to make your own function and call it using its name. If you really want to use a variable you could assign the name of the function to the variable and call it using the Call() function. Here is an example: #include <File.au3> _FileCreate(@DesktopDir & "\Log.txt") $test = "name_of_func" Call($test) Func name_of_func() FileWriteLine(@DesktopDir & "\Log.txt", @CRLF ) EndFunc Now you can call the function as often as you want using Call($test). Hope it helps!
    1 point
  14. Hello. Create the RicthEdit into the Tab Control. $hRichEdit = _GUICtrlRichEdit_Create(GUICtrlGetHandle($Tab1), "", 12, 161, 241, 249, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL)) Saludos
    1 point
  15. UEZ

    Ascii Art Kaleidoscope

    Here we go: ;coded by UEZ build 2017-10-16 #AutoIt3Wrapper_Version=b #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico") #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe /rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WinAPISys.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit, $fScale, $aFileList, $sFile, $bDropped = False Global Const $iW = 600, $iH = 600, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Some kind of a Kaleidoscope v1.2 ^^" Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi, $fPi2 = ACos(-1) / 2, $f2Pi = 2 * ACos(-1) AutoItSetOption("GUIOnEventMode", 1) GDIPlus_Kaleidoscope() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_Kaleidoscope() $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH, -1, -1, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST)) GUISetState(@SW_SHOW, $hGUI) Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, 5) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xFF000000), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0FFFFFF), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Local $hImage, $iW_i, $iH_i, $hBitmap, $hGfx $hImage = _GDIPlus_BitmapCreateFromMemory(_TestImage()) $iW_i = _GDIPlus_ImageGetWidth($hImage) $iH_i = _GDIPlus_ImageGetHeight($hImage) $fScale = 1 / Sqrt($iW_i * $iH_i) * 100 Local $i, $dx, $dy, $dxo, $dyo, $tr, $d, $t Local Const $hPen_Border = _GDIPlus_PenCreate(0xA0101010, 2) $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW_i, $iH_i) $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetInterpolationMode($hGfx, 3) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local $hTexture, $hTexture2, $fRot = -100 Local Const $hMatrix = _GDIPlus_MatrixCreate() GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL") GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES") AdlibRegister("CalcFPS", 1000) $dxo = $dx $dyo = $dy Do ;~ _WinAPI_BitBlt($hDC_backbuffer, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $BLACKNESS) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", 50, "float", 15) $aMPos = GUIGetCursorInfo($hGUI) $dx = $aMPos[0] - $iWh $dy = $aMPos[1] - $iHh $tr = ATan2($dy, $dx) $d = $tr - $fRot $t = Atan2(Sin($d), Cos($d)) * 10 If Not BitAnd($dx = $dxo, $dy = $dyo) Then $dxo = $dx $dyo = $dy _GDIPlus_MatrixTranslate($hMatrix, $iW_i / 2, $iH_i / 2) _GDIPlus_MatrixRotate($hMatrix, $t) _GDIPlus_MatrixTranslate($hMatrix, -$iW_i / 2, -$iH_i / 2) _GDIPlus_GraphicsSetTransform($hGfx, $hMatrix) EndIf $hTexture = _GDIPlus_TextureCreate($hImage, 3) DllCall($__g_hGDIPDll, "int", "GdipTranslateTextureTransform", "handle", $hTexture, "float", $dx, "float", $dy, "long", 0) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hGfx, "handle", $hTexture, "float", 0, "float", 0, "float", $iW_i, "float", $iH_i) _GDIPlus_BrushDispose($hTexture) $hTexture2 = _GDIPlus_TextureCreate($hBitmap, 3) DllCall($__g_hGDIPDll, "int", "GdipScaleTextureTransform", "handle", $hTexture2, "float", $fScale, "float", $fScale, "long", 0) DllCall($__g_hGDIPDll, "int", "GdipTranslateTextureTransform", "handle", $hTexture2, "float", BitShift($iW - $iW_i, 1), "float", BitShift($iH - $iH_i, 1), "long", 0) _GDIPlus_GraphicsFillEllipse($hCanvas, 0, 0, $iW, $iH, $hTexture2) _GDIPlus_BrushDispose($hTexture2) DllCall($__g_hGDIPDll, "int", "GdipDrawEllipse", "handle", $hCanvas, "handle", $hPen_Border, "float", 0, "float", 0,"float", $iW, "float", $iH) _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) If $bDropped Then _GDIPlus_ImageDispose($hImage) $hImage = _GDIPlus_ImageLoadFromFile($sFile) $iW_i = _GDIPlus_ImageGetWidth($hImage) $iH_i = _GDIPlus_ImageGetHeight($hImage) _GDIPlus_ImageDispose($hGfx) _GDIPlus_ImageDispose($hBitmap) $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW_i, $iH_i) $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetInterpolationMode($hGfx, 3) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) _GDIPlus_MatrixSetElements($hMatrix) $fScale = 1 / Sqrt($iW_i * $iH_i) * 100 $bDropped = False EndIf $iFPS += 1 If $bExit Then ExitLoop Until Not Sleep(10) GUIRegisterMsg($WM_MOUSEWHEEL, "") GUIRegisterMsg($WM_DROPFILES, "") AdlibUnRegister("CalcFPS") _GDIPlus_PenDispose($hPen_Border) _GDIPlus_MatrixDispose($hMatrix) _GDIPlus_ImageDispose($hImage) _GDIPlus_BrushDispose($hTexture) _GDIPlus_BrushDispose($hTexture2) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_ImageDispose($hBitmap) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_Kaleidoscope Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func ATan2($y, $x) ;~ Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y)))) Switch $x Case ($x > 0) Return ATan($y / $x) Case ($x < 0 And $y >= 0) Return ATan($y / $x + $fPi) Case ($x < 0 And $y < 0) Return ATan($y / $x - $fPi) Case ($x = 0 And $y > 0) Return $fPi2 Case ($x = 0 And $y < 0) Return -$fPi2 Case ($x = 0 And $y = 0) Return 0 EndSwitch EndFunc Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam) Local $i = 1, $j = 1, $aTmp, $iUbound = 0, $sExt = ".bmp|.png|.jpg|.gif" $aFileList = _WinAPI_DragQueryFileEx($wParam) Do If Not StringInStr(FileGetAttrib($aFileList[$i]), "D") Then If StringInStr($sExt, StringRegExpReplace($aFileList[$i], ".*(\.+)", "$1")) Then $bDropped = True $sFile = $aFileList[$i] $i += 1 EndIf EndIf Until $i = UBound($aFileList) _WinAPI_DragFinish($wParam) Return 0 EndFunc ;==>WM_DROPFILES Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam If _WinAPI_HiWord($wParam) > 0 Then $fScale += 0.01 $fScale = $fScale > 2.00 ? 2.00 : $fScale Else $fScale -= 0.01 $fScale = $fScale < 0.05 ? 0.05 : $fScale EndIf Return "GUI_RUNDEFMSG" EndFunc ;==>WM_MOUSEWHEEL ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2016-12-01 Func _TestImage($bSaveBinary = False, $sSavePath = @ScriptDir) Local $TestImage $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '7QfJcIJTEQ+yqA35olx7T6JoBXUv2is2QKpSThcKfGydMZ0hBJ0C4qQe6BpvxaxdrthqhVCsrTfDdAxR0OlFxRxFf6dfdcIA9uzsvM74KYqSvj3jaHtrKhnryIHW57dasrLhXqXqTOnGYNA57jdVXjAGTLonD5G8bxP3AVybLynxCHp17lSdCmcLVWwPhon9Zv3Sgl+9V4yvjbQf7R3i+T8Tajh6DX+gRHth/j35pbsCr6o9f6A4RSH8y3YOz//EACoQAAICAgIBAwMFAQEBAAAAAAABESExQVFhcRCBkTBAoSCxwdHwUOHx/9oACAEBAAE/IXJHgEkkk+kkk0S9CPgTPpRPPuLiyPYoZaEvXposgSq8iNCkSaVnyK8YKj5Bspt0McpcsOR+IsVSGxSgMUpKUsslnRE3UlpNytvkcjM5Lw/gk7saqeWYNERhsxHYzmrk0mL1kn9E/rkn0n6CiTPjoRBdoWrs6Enu+yULPkSSkx6QpPn0TdImE6slwI5shvSEmqIHCWiinhyNKjFi0OetbY6FCF6IfCHPBOeH/qHBa/GSVN/t6C9xmPWl0h50OIBJjhUTKZ8wbuDMBadQk+Dmy3rl/Wf6Z/QhW7/BpGRrqxFCEcxWPsV2YGccQS0qIeQlFiyYQnO6FCrIML0aUD1CMuCfAwRRqUISxMms5NlL7h2OSEn5aHr02Trs2UKKSwjoiVvQFWWYCxsym/kkTi+xf6H+hKWJtkXSuhaG0M/CMM/gb44LEcKzZjLHneByqQocdD6Yz4OyIyKRELJKbEaDQksiTXZ2RNiJ90ToS7gS1jwkJfGcs26fDyQMg2sE4J0xHC4QmiATTkezqeh6duCS2RT+BC+3Sr+C2aGWvkV7YnaSLmWQbJ49JJChHIjZl2Nm8fkTrZDgcEJRsUqoLT2Kl2KW+F2PMU0SEHkjf7FkXQoIcMicjUboyhrbPI0IjkNVtO/yJ1vWuBunDpiHahiNpKmxu1Bivx9kvXHpFCegkyENRlls4Mibg5D3F8PQXILBoWG2JyvwTSWCJ5MME8b8iSo2KIR+Rqx2NLpR0JNhUeENyIgUI2RRqB14HmiOBZJA15qfkp1YLqTK1a9IMHnsJo+Fe4vt8wJTSGgLeXyJ9+xwI7kwsSJnUClMt+iz4Qo4wNgpF1+Rl/kYw9yWnlEMnGGNxQXtSOePyJ1hDIsfDF4p/A0Vq/A1B7DrozvHrEKhiXNkITMEe7k0lC9CRBFojeRQsIQrv7B9eiX6VkSr8mQlm316Vex0KFRFCT4Fhj3GoSoZbyO3QuDiKFg6L3HhQ4H8CSmRdLFpAo3IoeJISWSYp5EpwqngjgPULlIpa0NLkiXwLWTQ6BZSDyHcprDO6FTHiw1YtqMdoVKSbwxU1cwvt048ipKxeW4FWV+D/DEpc+yPOSJEoRoh09itifk+AmwIUSJyL9+h9HBNzZiXcXghNrxIvNDe790WWFelktObfsKHQ6UEyx59iWRqPBM0SLtGUNUJTglyJVTG8wIyJDTI1Ohk71wbI2jmxfYR6L9CjYo7T5FbxAlDweH2HeVYl3gPHQnSknUGNlqNEE1c2eJMbKiExFCtlkryFhTYQ+HuNyonwZsTZMr55JpXIqmSZ2NQuyFIkeyIjkj0MicEA9DZEKbRBbv+ByrRFTJae0hY+syP1pCaGwQCgnQkww0uSt4Gp9CyZMlz59CliapDQJI6FPQmK2VLFkTrwJYwTDXjkUFZ29iJO06JlxV5o0K8E0lJDGktZJuxVw6HG8jJtCdjX9jXQkNdizJkhbZPmELGmrVCQMWOJCrAmpL+1nOZCByIoUaFgwJ3LMxQnCsVhqIFh8FlbCZyYko0SUQtUjrPcgsmhxykn4FComJ7PIksxF7EZQxKcWcJ8DfkxrKh4Bo0j4IYtYNBvnJKMJyZIy60LKDpdmE9CFBBAuHybmViXxKqlky/s0TsSJlHMGKJliISS4E4SZlryZSJQjNcCTS6EVDW5QtThFsW' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '+0GEVpFtUVy2hWPG5dF3jnzUMPVq6VIznMcWBkFgitQK5ruE1TGx3BrAXPM4+KiWwo8SliG/pLWWrYlBpHINP2me+6WQsA31cKxoGybig5ZL8xifQVYrr2j3pZVQ90wAMZqRVAqjROZBAqwbXo6mhpSWrzjzHQjdhfYv9QO0zOPQ1NzqViLPj1NTl9OIY2+iQJgtY4S75BiYti/MyAF2bgVPgkGl+YA0N4i4pw6jA4quZVRhW/aNDQ7JQxYaOYEeCs1GlbezD7Q06K/NSp21A+HmK7ebabeYRFFbHFwYOXdI3cc3Q2aSEcQB2VOFYHDTVyiG7V6ehKTBfnsgoPFRuv5KmUCkr/A8TlQ2DfG5d02OIDCMhOOIAcOUzq9OOo6DZ9EAgLeWC9g+kcUoWmoFTVR0x+IAGscV4lpvpWL5gAmkcEIsXwdxxeX0hmKnkh511QCWQNHfPFsbkvKNdQEBYVwWmb8+lc+ter6YvPozUdznMz65nvDDDKhiDWjQsFY6CrizglQUtzFul3b3qHo1jE00ACmIdrF1LmeH6kAC3HbmOUFuPrHdVBsntM3lgCFrT3JndHl+jE2RG9xxYcLcSyKiw5N2Spt2xzHjhp/cLBss09yuOrVa5PeJNgvbtD8SkQEC7XExTmy1dc/MtsA5KuuYgXBlOQxmHCxwYwsHdqF/WJWuAu3MFKOCzlYUbDbm42A8jbxA0HdHcVaioPOXfeJkTBWsx70L4QmryLHbKO9UzcbK0LI1LwUvmrqGUxGcXmIoDwAmRwpHIH91KHGnPof8MMX6M5nfpjU/mXDU5hn0JbMxpmQHmv3BsuW4UGs5qU2QLXSNbCcvUFjWsYZUFwjmNFW+NwUU2VdRCjz8wQdMip7A6YN4ut3jRMnAFlF3iZTeV9+b7/aU0KwRUo3LGp4EiviWVCyqadcRBXIK6YqoEOCHs5ur1zcrDbJhrHzN4rdVXXzOPEoEo4ljStUOPiYRUvzzG5xuKlSDlq93OBCUQ4gZZroZc3vgjLS8043BQYomN28wFIQ1yEiBbRtD9QxHWUdWnpmKpY1zLyqjUABtaZlis6qAFgmzzBLQEqVKnEuWzmVHHo+l3qceh6npqHIuwGvrLUuo2rfMyU3a5sOsEFQVdxWU1RxEXRvAvMFBS4DOdMF7bhgMgAxQwLkG7bi1jdshHZ25slZ7bry0/WOL3i8pp/UIrnIftUtYKXs94A1VaXmzphJIWFuvMOd8inMraoK2Bv6cSo1t1Q4j7cuBrFwA1bNVqKXECGsxmPMHcoClhfdFICDg3YTRVNUceIG9Ud4uiUhaXiVGx29wAANtN/PiPd1LWM34jgnAXTtcXCcSrbxLZLBgNxGuyYphUL8M0NOBOIFFoar3l7hRaexDXpxNX6VEx68x9OJxmFE5nMbuczjEyxm6pkr7SxuswDZ2ZgotOSFIg9swaF7zHgzi4HLeZaFLlqmF88SogIDs+YIVeGsR2NWXvuFcC65nZRULKgsPmU8PT1P7MwnCIewrEsAOlDNVGjZIw5gXLbwr8RqAyyDTfggptVgP1RK6Na/2JzgO9/WIEfBu4pGkO9svRQG1IWhLriKqrTVG6viX/NybuuXqIY2VrqPYNLUW7i1LTFLQ+I+hUy1YBumZAagArLjzFfA1hmNbZVT4iQWW4L5IgQF7IqBhvuLyZDqFi4M5Ny+UWr8Qx/3r0fTzN3GED07g9b6/4dBeTqNTpINl6VKA7FiKRm8zMrKrBeBrkIKoRI6ScMFgaR73HgFYrU0lpc3GGthzDOqArUaZbauqgC4rPDeZYsVjBqtP6+kDclycjs+uYSKAjeFX8zQuGclld+YZGtWboJTR7X3iDlMFIBaPL3GjYRqlqoubVKazXiMhWXM1GhWjDcxRrjz3GhXVWGWnjEQci2wxAs0Hm5mKG1YmiYxw6942oRhOonBmIsqvm9eIai2tXUYNW1/eC0CgaMqz69DXiZCgLl5iLgHMFhFV+JqeBb94GPTn' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= 'ro7lY0vucNQynucLcdvo3fjuLREUQXkz5lul5xK5cRCxlLguCjEar+CIhlsxGNwtWLhm8E4izzGwalEtqZQe7FgN1jMqpVn4imlAxgjWXtywy43uohkVaFxwNRhN+f4wAAAAUE3N+nBDiO4f8fMvzMelwziWk5jL59H0rEJj2gc+jKiSpdem4sat8sOgqOFmyVi6y9QyyH0qG0q2r1AbyHvFwYnxMO5tbc3nvhgbCAWvllEpLxupW0yBUSi8xAUiMK2s7uIWVqHcm+7hm3vwxzGD/swLGeZOCOqt8OCBLlZ0ntiAJzjj2OPzKxLqFhD/AFepd+Jtl49Fx6349M+hG4f4jmG/+DUdznMy3LlytVK3Er00Spuc149M8RTzC3Jj3gI+eZTzLSn/ABAnLiOfaB8A5mc0ynfEOz2hhkhvTfvGjuGVpctXCbXdelgsAezBqAV9kAhj22waYmiYPHb4ioTbIXtfSvpCGeJxVw9DE/cfRZm8xfrNwoPQOfRnHpz6YgQJjuXLsalVOZ7EOZeZp3LxU5n/2Q==' Local $bString = _WinAPI_Base64Decode($TestImage) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\salvador-dali 528x528.jpg", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_TestImage 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 Here your version from post #1 without ASCII chars: ;coded by UEZ build 2017-10-10 #AutoIt3Wrapper_Version=b #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico") #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe /rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit Global Const $iW = 600, $iH = 600, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Kaleidoscope ^^" Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi, $fPi2 = ACos(-1) / 2, $f2Pi = 2 * ACos(-1) AutoItSetOption("GUIOnEventMode", 1) ;~ AutoItSetOption("MouseCoordMode", 0) GDIPlus_Kaleidoscope() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_Kaleidoscope($iSlices = 50) $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH) ;, 0, 0, $WS_POPUP) GUISetState(@SW_SHOW, $hGUI) ;~ GUISetCursor(16, 1) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) ;~ _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xFF808080) Local Const $aApplesoft_color[16] = [ _ ; LoRes colors in Applesoft basic 0x000000, _ ; 0x0 = 00 = Black 0XFF00FF, _ ; 0x1 = 01 = Magenta 0X0000A0, _ ; 0x2 = 02 = Dark Blue 0X800080, _ ; 0x3 = 03 = Purple 0X006400, _ ; 0x4 = 04 = Dark Green 0X808080, _ ; 0x5 = 05 = Grey 0X0000CD, _ ; 0x6 = 06 = Medium Blue 0XADD8E6, _ ; 0x7 = 07 = Light Blue 0XA52A2A, _ ; 0x8 = 08 = Brown 0XFFA500, _ ; 0x9 = 09 = Orange 0XD3D3D3, _ ; 0xA = 10 = Light Grey 0XFFC0CB, _ ; 0xB = 11 = Pink 0X008000, _ ; 0xC = 12 = Green 0XFFFF00, _ ; 0xD = 13 = Yellow 0X00FFFF, _ ; 0xE = 14 = Aqua 0xFFFFFF]; ; 0xF = 15 = White Local Const $hBrush_Color = _GDIPlus_BrushCreateSolid() GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Do For $W = 3 To 50 For $x = 19 To 1 Step - 1 For $y = 19 To 0 Step - 1 $xy = $x + $y $iColor = Mod(Int($y * 3 / ($x + 3) + $x * $W / 12), 16) If $iColor > 15 Then $iColor = 15 Print($x, $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print($xy, $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $x, 40 - $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $xy, 40 - $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print($xy, 40 - $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $x, $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print($x, 40 - $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $xy, $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Next Next _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI Next If $bExit Then ExitLoop Until Not Sleep(10) ;release resources _GDIPlus_BrushDispose($hBrush_Color) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_Kaleidoscope Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func Print($x, $y, $color, $hCanvas, $hBrush_Color) Local $iSize = 14 _GDIPlus_BrushSetSolidColor($hBrush_Color, 0x80000000 + $color) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Color, _ "float", 10 + $x * $iSize, "float", 10 + $y * $iSize, _ "float", $iSize, "float", $iSize) EndFunc It is probably faster using native GDI functions. FreeBasic version: 'coded by UEZ build 2017-10-16 #include "fbgfx.bi" Sub _Print(x as UShort, y as ushort, col as UInteger) dim as UByte size = 14 Dim as short x1 = 10 + x * size, y1 = 10 + y * size Line(x1, y1)-(x1 + size, y1 + size), col, bf End sub Dim as UInteger aApplesoft_color(0 to ...) = {&h000000, &hFF00FF, &h0000A0, &h800080, &h006400, &h808080, &h0000CD, &hADD8E6, &hA52A2A, &hFFA500, &hD3D3D3, &hFFC0CB, &h008000, &hFFFF00, &h00FFFF, &hFFFFFF} Dim as Short w, x, y, xy Dim as UInteger col screenres 600, 600, 32 do for w = 3 to 50 for x = 19 to 1 Step -1 for y = 19 to 0 Step -1 xy = x + y col = cshort(y * 3 / (x + 3) + x * w / 12) mod 16 _Print(x, xy, aApplesoft_color(col)) _Print(xy, x, aApplesoft_color(col)) _Print(40 - x, 40 - xy, aApplesoft_color(col)) _Print(40 - xy, 40 - x, aApplesoft_color(col)) _Print(xy, 40 - x, aApplesoft_color(col)) _Print(40 - x, xy, aApplesoft_color(col)) _Print(x, 40 - xy, aApplesoft_color(col)) _Print(40 - xy, x, aApplesoft_color(col)) Next Next Sleep(30) Next loop until Inkey = Chr(27)
    1 point
  16. I fully support czardas's example in the direct case. When you're calling your own functions that may return errors, it gets slightly more complicated. In this example from my matrix computing environment (Eigen4AutoIt), I use SetError directly within a function body as early-out when various things go wrong: Func _Eigen_Release_ExclusiveAccess($matrix, $timeoutInMs=0) If Not @AutoItX64 Then Return SetError(1,0,False) Local $mat_ptr=_Eigen_GetPtr($matrix) If @error Then Return SetError(2,0,False) Return _HighMem_ReleaseExclusiveAccess($mat_ptr, $timeoutInMs) ; all other errors are dealt with by _HighMem EndFunc Here @error=1 in a 32-bit environment (not supported by HighMem), and 2 if no valid pointer is obtained. If all is well the Return argument being the real (NB _HighMem, not _Eigen, note the different prefix) function call, @error and @extended from that call are parsed upwards to whatever routine called _Eigen_Release_ExclusiveAccess (which returns True if successful). This can also be chained, like so: Func _Eigen_Release_Mutex($matrix, $timeoutInMs=0) Local $tmp=_Eigen_Release_ExclusiveAccess($matrix, $timeoutInMs) Return SetError(@error, @extended, $tmp) EndFunc This second example is a so-called alias wrapper (exclusive access is controlled by a mutex, and since I always forget my own function names, I add tons of alias wrappers as mental crutches). Note how we collect whatever the true function returns in local variabe $tmp, and immediately afterwards, we parse the current contents of @error and @extended up the calling chain, preserving their status. Circling back to the original argument, if we wanted to do other stuff inbetween we'd have to collect those macro contents first: Func _Eigen_Release_Mutex($matrix, $timeoutInMs=0) Local $tmp=_Eigen_Release_ExclusiveAccess($matrix, $timeoutInMs) Local $error=@error Local $extended=@extended < do other stuff...> Return SetError($error, $extended, $tmp) EndFunc That's how I do it.
    1 point
  17. You can store as many error values as you like, for as long as you like, using different variable names or even an array of error values. You could even store multiple errors as single integer using bitwise functions. There are many possible solutions to your query.
    1 point
  18. Just store @error in some temporary variable $error imediately, then evaluate that later on.
    1 point
  19. Do not call any function between these two lines: Local $FLTAR = _FileListToArrayRec($sFilePath = "", "*.pdf", $FLTAR_FILES, $FLTAR_NORECUR, $FLTAR_SORT, $FLTAR_FULLPATH) Local $iError = @error ; we might need to refer to this later Also check my edits to #5 above.
    1 point
  20. Some modifications to your code. #include <Array.au3> #include <File.au3> Local $sFilePath = "C:\New Folder" Local $FLTAR = _FileListToArrayRec($sFilePath = "", "*.pdf", $FLTAR_FILES, $FLTAR_NORECUR, $FLTAR_SORT, $FLTAR_FULLPATH) Local $iError = @error ; we might need to refer to this later If $iError Then MsgBox(0, "$FLTARIf", "0 files for transfer") Else MsgBox(0, "$FLTARElse", "SUCCESS") EndIf
    1 point
×
×
  • Create New...