Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 10/11/2021 in all areas

  1. I voted other, because i wanted to. šŸ˜¬
    3 points
  2. You're right. I worded that badly, good catch. Something more like "AutoIt was intended for automating things" would be more accurate. Trying to say, use the right tool and all well, read TheSaint's post above, lol
    3 points
  3. One AutoIt ā€œfeatureā€ that wonā€™t be transferred to EasyCodeIt is a predisposition to anti-viral false positives. Although, thatā€™s actually not my call
    2 points
  4. Maps are simpler and faster: Global $mCodes[] $mCodes["Alabama"] = "AL" $mCodes["Alaska"] = "AK" $mCodes["Arizona"] = "AZ" $mCodes["Arkansas"] = "AR" $mCodes["California"] = "CA" $mCodes["Colorado"] = "CO" $mCodes["Connecticut"] = "CT" $mCodes["Delaware"] = "DE" $mCodes["District of Columbia"] = "DC" $mCodes["Florida"] = "FL" $mCodes["Georgia"] = "GA" $mCodes["Hawaii"] = "HI" $mCodes["Idaho"] = "ID" $mCodes["Illinois"] = "IL" $mCodes["Indiana"] = "IN" $mCodes["Iowa"] = "IA" $mCodes["Kansas"] = "KS" $mCodes["Kentucky"] = "KY" $mCodes["Louisiana"] = "LA" $mCodes["Maine"] = "ME" $mCodes["Maryland"] = "MD" $mCodes["Massachusetts"] = "MA" $mCodes["Michigan"] = "MI" $mCodes["Minnesota"] = "MN" $mCodes["Mississippi"] = "MS" $mCodes["Missouri"] = "MO" $mCodes["Montana"] = "MT" $mCodes["Nebraska"] = "NE" $mCodes["Nevada"] = "NV" $mCodes["New Hampshire"] = "NH" $mCodes["New Jersey"] = "NJ" $mCodes["New Mexico"] = "NM" $mCodes["New York"] = "NY" $mCodes["North Carolina"] = "NC" $mCodes["North Dakota"] = "ND" $mCodes["Ohio"] = "OH" $mCodes["Oklahoma"] = "OK" $mCodes["Oregon"] = "OR" $mCodes["Pennsylvania"] = "PA" $mCodes["Rhode Island"] = "RI" $mCodes["South Carolina"] = "SC" $mCodes["South Dakota"] = "SD" $mCodes["Tennessee"] = "TN" $mCodes["Texas"] = "TX" $mCodes["Utah"] = "UT" $mCodes["Vermont"] = "VT" $mCodes["Virginia"] = "VA" $mCodes["Washington"] = "WA" $mCodes["West Virginia"] = "WV" $mCodes["Wisconsin"] = "WI" $mCodes["Wyoming"] = "WY" ; ... ; to use it: Local $sState = "Iowa" ConsoleWrite("The code for " & $sState & " is: " & $mCodes[$sState] & @LF) I made a map of official US state names and USPS codes. Change if needed.
    2 points
  5. jchd

    Too many IF Statements

    Like @Melba23said in 2) From https://en.wikipedia.org/wiki/List_of_U.S._state_and_territory_abbreviations copy thee content of the states' table, remove the unwanted columns and make the data a global array (or better: a Map) in your code.
    2 points
  6. SkysLastChance, Two suggestions: 1. Use a Switch block. 2. Put the names and abbreviations into an array and search through it to find a match. M23
    2 points
  7. Sorry, gotta disagree with you there, as I have built plenty of applications. So it does both. Sure, it doesn't have multi-threading and is not as fast as some other languages, but it can create great applications, and very quickly compared to most other languages. But as they say, use the right tool for the job, and there is certainly some jobs or applications that AutoIt is ill-suited for ... or another language does it better in some significant way. When AutoIt was introduced to the world, it was just a great scripting language, since then it has become a great GUI language as well. And back then, multi-threading wasn't even really a thing, multi-core processors either, certainly not for most ... unless maybe you owned an Apple PC.
    2 points
  8. Right #include <AutoItConstants.au3> $cmd = "curl -sk " & "https://www.internetdownloadmanager.com/getlatestversion.html" Local $iPID = Run($cmd, "", @SW_HIDE, $STDOUT_CHILD) ProcessWaitClose($iPID) $file = StringRegExpReplace(StdoutRead($iPID), '(?s).*?filename=([^"]+).*', "$1") Msgbox(0,"", $file) Note that curl could be used to eventually dowload the file too
    2 points
  9. I feel like this conversation has been going since I joined this board. I'm starting to wonder if that conversation is as old as Autoit 2.
    2 points
  10. Well, that's good to know. Only if AutoIt executables weren't detected as viruses all the time. I updated one of my programs 2 weeks ago but due to all the false positives, the update process at chocolatey (it's a software repository) is still not complete. Yeah, in my opinion AutoIt isn't the best tool for product testing, instead one should rely on more integrated methods to test, and nothing tops a manual test by a human before a major release AutoIt is good for quick and easy automation, which is exactly what it's made for.
    1 point
  11. jchd

    Too many IF Statements

    Oops, it seems that I permanently installed a beta supplied by jpm for test purpose. Sorry for the noise. It remains that the Map support in beta has been stable for long and that no issue has been reported yet. Given the power Maps give us I see no reason not to use them when they offer a benefit.
    1 point
  12. @Earthshine Can you share the reason? Also, do you mean "im out" as in "im out" of this thread or as in "im out" of this forum?
    1 point
  13. @Exitare you using the latest release? Should the OP or anyone else need the reverse lookup, just use that: Global $mStates[] $mStates["AL"] = "Alabama" $mStates["AK"] = "Alaska" $mStates["AZ"] = "Arizona" $mStates["AR"] = "Arkansas" $mStates["CA"] = "California" $mStates["CO"] = "Colorado" $mStates["CT"] = "Connecticut" $mStates["DE"] = "Delaware" $mStates["DC"] = "District of Columbia" $mStates["FL"] = "Florida" $mStates["GA"] = "Georgia" $mStates["HI"] = "Hawaii" $mStates["ID"] = "Idaho" $mStates["IL"] = "Illinois" $mStates["IN"] = "Indiana" $mStates["IA"] = "Iowa" $mStates["KS"] = "Kansas" $mStates["KY"] = "Kentucky" $mStates["LA"] = "Louisiana" $mStates["ME"] = "Maine" $mStates["MD"] = "Maryland" $mStates["MA"] = "Massachusetts" $mStates["MI"] = "Michigan" $mStates["MN"] = "Minnesota" $mStates["MS"] = "Mississippi" $mStates["MO"] = "Missouri" $mStates["MT"] = "Montana" $mStates["NE"] = "Nebraska" $mStates["NV"] = "Nevada" $mStates["NH"] = "New Hampshire" $mStates["NJ"] = "New Jersey" $mStates["NM"] = "New Mexico" $mStates["NY"] = "New York" $mStates["NC"] = "North Carolina" $mStates["ND"] = "North Dakota" $mStates["OH"] = "Ohio" $mStates["OK"] = "Oklahoma" $mStates["OR"] = "Oregon" $mStates["PA"] = "Pennsylvania" $mStates["RI"] = "Rhode Island" $mStates["SC"] = "South Carolina" $mStates["SD"] = "South Dakota" $mStates["TN"] = "Tennessee" $mStates["TX"] = "Texas" $mStates["UT"] = "Utah" $mStates["VT"] = "Vermont" $mStates["VA"] = "Virginia" $mStates["WA"] = "Washington" $mStates["WV"] = "West Virginia" $mStates["WI"] = "Wisconsin" $mStates["WY"] = "Wyoming" ; ... ; to use it: Local $sCode = "DC" ConsoleWrite("The code " & $sCode & " is for: " & $mStates[$sCode] & @LF)
    1 point
  14. Use a function to do that with a return value so you can exit your loop as soon as the match is found and have it return the value you want as part of the function. Else put an ExitLoop as part of your If/then statement to at least save some loops when the first value is matched. #include <Array.au3> Global $aStateArray[4][2] = [["Alabama","AL"],["Arkansas","AR"],["Arizona","AZ"],["Alaska","AK"]] $vAbbreviations = "Alaska" Local $iIndex = _ArraySearch($aStateArray, $vAbbreviations) For $i = 0 to UBound($aStateArray, 2)-1 If $aStateArray[$iIndex][$i] = $vAbbreviations Then $iSubIndex = $i Next MsgBox(0, "Found",$aStateArray[$iIndex][1]) ;New Code MsgBox(0, "Found", AbrevLookup($vAbbreviations)) ;Functions Func AbrevLookup($sState) For $i = 0 to UBound($aStateArray) -1 If StringInStr($aStateArray[$i][0], $sState) Then Return $aStateArray[$i][1] Next EndFunc
    1 point
  15. I am NOT a number! I am a FREE MAN!
    1 point
  16. For the fun By checking the download in the Scite console, you could even build a progressbar, a percent progress etc #include <AutoItConstants.au3> $url = "https://www.internetdownloadmanager.com/getlatestversion.html" ; get filename $cmd = "curl -sk " & $url Local $iPID = Run($cmd, "", @SW_HIDE, $STDOUT_CHILD) ProcessWaitClose($iPID) $file = StringRegExpReplace(StdoutRead($iPID), '(?s).*?filename=([^"]+).*', "$1") Msgbox(0,"", $file) ; then download $cmd = 'curl -Lk ' & $url SplashTextOn ("", "Downloading ...", 300, 55, -1, 350, 49, "", 12) Local $iPID = Run($cmd, "", @SW_HIDE, $STDOUT_CHILD) ProcessWaitClose($iPID) Local $out = StdoutRead($iPID) SplashOff() $h = Fileopen(@desktopdir & "\" & $file, 18) Filewrite($h, $out) Fileclose($h)
    1 point
  17. Thanks man i'll check all files and your code
    1 point
  18. cURL is probably is not installed. Download cURL here: https://curl.se/windows/ Extract the zip Copy the file bin\curl.exe to your script's folder. Alternatively you can place the file in C:\Windows\System32. Edit: I asked the output of curl --version, not what you entered
    1 point
  19. Open Command Prompt (cmd) and run curl --version Then post the output here.
    1 point
  20. Using the command line tool curl it shows you the link you need: C:\Users\User>curl https://www.internetdownloadmanager.com/getlatestversion.html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>302 Found</title> </head><body> <h1>Found</h1> <p>The document has moved <a href="https://mirror2.internetdownloadmanager.com/idman639build2.exe?v=lt&ampfilename=idman639build2.exe">here</a>.</p> </body></html> Perhaps you can use StringRegExp() to extract the link from the output of this command? (I know there is a cURL UDF, but it does not appear to work with the 64 bit libcurl-x64.dll file) More info: Get output from a command: https://www.autoitscript.com/forum/topic/193401-how-to-get-output-of-run/ StringRegExp function: https://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm (I am assuming you already know this because you use StringRegExp in your code)
    1 point
  21. (This example uses a "flash" animation and therefore needs the "flash player" to work. Since "flash player" is discontinued and no longer present on many systems, this script may not work. I have therefore prepared a new script which does not use flash, but is based only on javascript. You can find it in this new post: www.autoitscript.com/forum/topic/206853-aquarium) If you set within a window, a given color as transparent, every area of that window painted with that color, act as an hole through wich you can see what's behind, and click on what's behind as well. What's funny is that if you embed a browser control within that window, the "transparent" color works even within the browser! This allow some interesting effects by simply opening any of the many javascript animations, or css effects or whatever within a browser control embedded into a GUI: Here, for example, is a simple effect of fishes swimming around on the screen. For lazyness I have embedded an ready made swf flash by a link to the web, but is of course possible embed any web page with javascripts css or whatever..... Have fun #include <WinAPI.au3> #include <WindowsConstants.au3> #include <Misc.au3> ; for _IsPressed (23 END key) Local $hDLL = DllOpen("user32.dll"), $oIE = ObjCreate("Shell.Explorer.2") Local $hBackground = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUPWINDOW, $WS_EX_LAYERED + $WS_EX_TOPMOST) Local $AlphaKey = 0xF0F7FF ; everything with color $AlphaKey within this window will be transparent ; even if within an embedded browser control!..... _WinAPI_SetLayeredWindowAttributes($hBackground, $AlphaKey, 0, $LWA_COLORKEY) GUISetState(@SW_SHOW, $hBackground) $hIE = GUICtrlCreateObj($oIE, 0, 0, @DesktopWidth, @DesktopHeight) ; <- embedd $oIE in the AutoIt GUI GUISetBkColor($AlphaKey, $hBackground) ; $AlphaKey $hBackground transparent $oIE.navigate('http://cdn.abowman.com/widgets/fish/fish.swf') ; $oIE.navigate('http://cdn.abowman.com/widgets/spider/spider.swf') ; a spider goes around on the screen .... ; !! to use the spider.swf, you need to set $AlphaKey = 0xffffff on line 7 "! While True If _IsPressed("23", $hDLL) Then ExitLoop ; END key was pressed Sleep(250) WEnd $oIE = "" $hDLL = "" GUIDelete($hBackground)
    1 point
  22. Great ... so what exactly is your AutoIt3 question or is your wish we code the whole thing for you?
    1 point
  23. Parsix

    Icons UDF

    oh my GOD ! šŸ˜±
    1 point
  24. Finally I'v had time to prepare example: #include <ButtonConstants.au3> #include <GuiComboBoxEx.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WindowsConstants.au3> #include "wd_helper.au3" Global $idAbortTest Global $WD_SESSION _Example() Func _Example() SetupChrome() ; Create a GUI with various controls. Local $hGUI = GUICreate("Example") Local $idTest = GUICtrlCreateButton("Test", 10, 370, 85, 25) $idAbortTest = GUICtrlCreateButton("Abort", 150, 370, 85, 25) ; Display the GUI. GUISetState(@SW_SHOW, $hGUI) ConsoleWrite("- TESTING" & @CRLF) Local $sFilePath = _WriteTestHtml() ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $idTest _WD_Navigate($WD_SESSION, $sFilePath) _WD_WaitElement($WD_SESSION, $_WD_LOCATOR_ByXPath, '//a[contains(text(),"TEST")]', 100, 30 * 1000) ; timeout = 50 seconds ConsoleWrite("---> @error=" & @error & " @extended=" & @extended & _ " : after _WD_WaitElement()" & @CRLF) Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ; Delete the previous GUI and all controls. GUIDelete($hGUI) EndFunc ;==>_Example Func _My_Sleep($v_Parameter) Local $hTimer = TimerInit() ; Begin the timer and store the handle in a variable. Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ConsoleWrite("! USER EXIT" & @CRLF) Exit Case $idAbortTest Return SetError($_WD_ERROR_UserAbort) EndSwitch Until TimerDiff($hTimer) > $v_Parameter EndFunc ;==>_My_Sleep Func _WriteTestHtml($sFilePath = @ScriptDir & "\TestFile.html") FileDelete($sFilePath) Local Const $sHtml = _ '<html lang="en">' & @CRLF & _ ' <head>' & @CRLF & _ ' <meta charset="utf-8">' & @CRLF & _ ' <title>TESTING</title>' & @CRLF & _ ' </head>' & @CRLF & _ ' <body>' & @CRLF & _ ' <div id="MyLink">Waiting</div>' & @CRLF & _ ' </body>' & @CRLF & _ ' <script type="text/javascript">' & @CRLF & _ ' setTimeout(function()' & @CRLF & _ ' {' & @CRLF & _ ' // Delayed code in here' & @CRLF & _ ' document.getElementById("MyLink").innerHTML="<a>TESTING</a>";' & @CRLF & _ ' }, 20000); // 20000 = 20 seconds' & @CRLF & _ ' </script>' & @CRLF & _ '</html>' FileWrite($sFilePath, $sHtml) Return "file:///" & StringReplace($sFilePath, "\", "/") EndFunc ;==>_WriteTestHtml Func SetupChrome() _WD_Startup() _WD_Option('Driver', 'chromedriver.exe') _WD_Option('Port', 9515) _WD_Option('HTTPTimeouts', True) _WD_Option('DefaultTimeout', 40001) _WD_Option('DriverParams', '--verbose --log-path="' & @ScriptDir & '\chrome.log"') _WD_Option("Sleep", _My_Sleep) Local $sCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "excludeSwitches": [ "enable-automation"]}}}}' $WD_SESSION = _WD_CreateSession($sCapabilities) _WD_Timeouts($WD_SESSION, 40002) EndFunc ;==>SetupChrome
    1 point
  25. RAM, Disk and CPU have plenty power/big/unrestricted nowadays. I write programs/applications/CallItWhatYouWill without much of a problem in AutoIt. Open your browser and you're gonna see forking left and right. I believe that those who wish for MT in AutoIt scripting, could not code it ( in C, Rust, ASM, etc. ) and if did, it would work more like forking than anything else hence, fork if you need to and drop the MT rhetorical. It gets boring. ...and if the code is too heavy for AutoIt scripting:
    1 point
  26. I feel like this is a super important point. Whenever my application gets complicated enough that multithreading would be helpful, I realize that it's time to rewrite (at least) that portion in another language. AutoIt is for automating things, not building applications. That's not to say I haven't tried though
    1 point
  27. @JockoDundee There are no such blasphemous things in Windows world, only CreateProcess()
    1 point
  28. It is quite funny how often this multithreading stuff comes up which probably means one has really no clue what it entails to create a script that will automate something with multithreading. AutoIt3Wrapper is a multi process script and works fine that way. Just shell another process and don't hold your breath for it to be part of the standard AutoIT3 functionality.
    1 point
  29. Melba23

    Short My Code ?

    jmp, No, you try and code something yourself based on what I have already given you. If it does not work we can discuss why. M23
    1 point
  30. Hi, The Devs were discussing this a while ago and came up with two possible workarounds for the standard AutoIt include functions to prevent this scenario. Here are the options for _NowCalc: Func _NowCalc_Atomic() Local $tStamp = _Date_Time_GetLocalTime() Return DllStructGetData($tStamp, "Year") & "/" & _ StringFormat("%02s", DllStructGetData($tStamp, "Month")) & "/" & _ StringFormat("%02s", DllStructGetData($tStamp, "Day")) & " " & _ StringFormat("%02s", DllStructGetData($tStamp, "Hour")) & ":" & _ StringFormat("%02s", DllStructGetData($tStamp, "Minute")) & ":" & _ StringFormat("%02s", DllStructGetData($tStamp, "Second")) EndFunc ;==>_NowCalc_Atomic Func _NowCalc_Check() Local $sRet, $sCheck Do $sCheck = @SEC $sRet = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC Until @SEC = $sCheck Return $sRet EndFunc ;==>_NowCalc_Check The first of these options will be incorporated for all such functions in the next AutoIt release - and please, please do not ask me when that will be! M23
    1 point
  31. Try this: #include <ButtonConstants.au3> #include <MsgBoxConstants.au3> #include <StructureConstants.au3> #include <WinAPIConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPISysWin.au3> _GDIPlus_Startup() Global Const $SC_DRAGMOVE = 0xF012 Global $iW, $iH, $hImage, $hBitmap, $hGUI $hImage = _GDIPlus_BitmapCreateFromMemory(_Image()) _AddText2Img($hImage, @UserName) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $iW = _GDIPlus_ImageGetWidth($hImage) $iH = _GDIPlus_ImageGetHeight($hImage) $hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST)) GUISetState() _WinAPI_BitmapDisplayTransparentInGUI($hBitmap, $hGUI) GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN") Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hBitmap) _GDIPlus_BitmapDispose($hImage) _GDIPlus_Shutdown() GUIDelete() Func _AddText2Img($hImage, $sText, $iX = 5, $iY = 70, $sFontName = "Comic Sans MS", $fSize = 22, $iColor = 0xF00F5000) Local Const $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage) _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 3) Local Const $hBrush = _GDIPlus_BrushCreateSolid($iColor) Local Const $hFormat = _GDIPlus_StringFormatCreate() _GDIPlus_StringFormatSetAlign($hFormat, 1) ;center text horizontally Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFontName) Local Const $hFont = _GDIPlus_FontCreate($hFamily, $fSize) Local Const $aDim = _GDIPlus_ImageGetDimension($hImage) Local Const $tLayout = _GDIPlus_RectFCreate($iX, $iY, $aDim[0], $aDim[1]) _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $tLayout, $hFormat, $hBrush) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphic) EndFunc Func _WinAPI_BitmapDisplayTransparentInGUI(ByRef $hHBitmap, ByRef $hGUI, $iOpacity = 0xFF, $bReleaseGDI = True) If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0) Local $tDim = DllStructCreate($tagBITMAP) If Not _WinAPI_GetObject($hHBitmap, DllStructGetSize($tDim), DllStructGetPtr($tDim)) Then Return SetError(2, 0, 0) Local $tSize = DllStructCreate($tagSIZE), $tSource = DllStructCreate($tagPOINT), $tBlend = DllStructCreate($tagBLENDFUNCTION) Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap) $tSize.X = $tDim.bmWidth $tSize.Y = $tDim.bmHeight $tBlend.Alpha = $iOpacity $tBlend.Format = 1 _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteDC($hMemDC) If $bReleaseGDI Then _WinAPI_DeleteObject($hHBitmap) Return True EndFunc Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) EndFunc ;==>_WM_LBUTTONDOWN ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2018-02-02 Func _Image($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Image $Image &= 'iVBORw0KGgoAAAANSUhEUgAAAQQAAAEVCAMAAAAxXGsGAAACE1BMVEVHcEwCAgEIBgUEAACcLi4EAwMGAwOHAQ2qARCTAQyRAQmkAQt8CA47LiibARCzAQzAAQ3LAg7WAg/gAhAIBgbrAQ95AAMEAQEZFxIGAwN8AAIEBATl3rUMBgVnY1Lp37XZzqLm26/Mw5rv5bnx6bve1am6sI3r477CHib07MLp3rLVypvXz6zWzKDw5LP37LnZz6XXzaPSyKHg1KTTyJrb0ano3KrZ0Kff7LioWUrfLTzmQVDYzqPHfmnbFya6a1jKn4CTLinl3LTd1K7c06zr4LPe1rDQr43f17Lb0qoFBQXQxJMHAQHtZXPf1rHNxJ3Vyp0DAwMFAgLGvpjCupW+tpLJyqYDAwPIwZy6sY6apX6QnHfZ1bIEAgKmrYi1rYsEAgJziFwEAwNkfk8DAwOBkmgDAwMDAwMDAgIDAwMEAgIDAgIDAgIjIBoEAwMFBATg2LQ2Myzk3Lvn4MFGQzjd063Zz6bx68/j3Lrf1rJeWkv89NPh2bZwbFvi2rj/+9t6dmdUcz8PUAIsXRyytpHh2LWVjnTm379CaS8sXRuNm3EDAgKspYoDAgIDAgIDAgIEAwMKCQjCvKLd2LkDAgIEAwPp48UDAgLt583l3b1VdUHo4cQEAgL999Lr5ckEAwPs5svr48Q5NiwEAgIDAQFfW07q5MfRxphuaVjl3r5NSkHo4cL//+YEAgIDAgIEAgIEAgLeQ1HhAAAAsXRSTlMAAQQQRzYaarjj//+7XJD//////yv//wwISPAlGxcmvKyEbW5ZTFQw/53Q3/P////////+///////////////////////v/////yH/FP////8oQP////8v//////88//9F/1v/S/9OU2hXX2VzhWsd/43//4r//////5P//53//rX//////9b/////b+SAi4+Wn+r/enf/ff////+D4P+T/+WnmYe/' $Image &= '///H/6f//0JiMzp0cOCKAAAkbUlEQVR42uSWh5bjIAxFfVNtyBo8TGv//50bSBUeZM85ZutzpaMryUmzpFBK2gBGVav1Zru61XFu4Vwk74+4CSEWqa98ZxoOKBWa3b7tOmO7w484FPK+RXNAsRWlckmhAEFanIm7ht5e1e5GQxBwmUSBuj+qkJiP++ZiRNfWRrl0N3aTTzEdFNyBQwH/S/MClTVZ8vTWOefT6SKG/Uykks4NgjKIpdGg7xAKRmT1bCIC7wd/VMJgNgtGILKeOqkAk7GJ2r93RwJnRQzWtgpdPaWZ9EMFCMVFQCEkmw4RwcNJCYN1G4FSW5U5ScndpmjqCR0zV2sY2df7aH4IIWFIFPpC2s8OSpSd1BRoZQobgmbvQkSQlCg4257Howyc4RakE35XDOjIIJ6PJpr/lI4QEoW2BPZWL9uY/DxSyXQEgvw+Xwf3dFGCMLj9d8MPaaX+RaapKr4IRFkGwS6pf/ZXCE8xI7oXxb26AG0o1SDwnT6M4vO1M+ZGITw9mLevpmVk0AJ7rSEotpQzfGOsNXYIZwr+eS+a/wutemPT32Xnh/jL8P6xrFtYrV6P+ozXT8rLasFBGIii+7yueasFl2kJmbr+/1ftDQx1PRD3U6X1+Bun3emeodftCVp7ALH2fO1r7YPAD0JcQtRkUR2EvmSR85tM+P4KB+78sRPx/KxeIzSgMUSCCbUfortbx9P1gj3dA4iSHgLobukAF6cgw71PnlNf/oQ9YrA9KA6hGpcKxpTWkiFjqcJaNjQcFWxt0x3tDrYjHo+G5ECNQQeajKZKKUjA/+bv2Xw+gwg1HRTssENmImTMiBhYYqkYEeCLXGgrmSHhgecHKLhPAlgsqphuUjIdYCZLBeo3wvfKSfj6eHleTkjOIueRE0ueb0KXW6KnBxAJ/fsl0MMSzGStRAIcVBJWn5CwmfB5CfwwJR8R/TNrFzpuxEAYxwPFtaSFY2Zm9jEzUfD9X6T+PN7E' $Image &= 'Bw7uSP2L2yP/NHbAaXw7pKmUG8Fd4wgw8JBPCGoQNMLp0hkbwiAQGjbgR5AnZGAGoWMvRug+Pd9ZQg0jNN4gra8xAn6EnYtTGAhBCOZI0Ajdu5IJYaG3wTFgQvicPNQGyA/DqAMIRwah+0SyICw1iJC2EYYud9gQrtQgAEB4tBuO9mMEpXB6xoMwn6ms839AOL/2tIEv7CMhhAEUrs94ELD6xgzcCGtUAgjyhAwC3zoSIgyCAMKxZDkTFALVKEEmk+FEOPS0QRAAwT4SBBROb3gQ6r/F9Ikg456EteZyIGiD0BfxswQgeIIQVnc4EEbqHwm2AEong+DYDkJogyj08ehgniXQKeF1e5ssCKON7wUA4NWnmoTbrWqJIlxd60EIQ1IwzxIAAwTPuz7nnAT3PYURIAKUZkS4vZ0VZBB1REEwqxBmfcwGEAQrgjtLAASoJ/WLD2FVHmsEunGI1HbYmw2C+Aaq+3RniwFhY7TmefBVQJW6Y0JAN/e+TwgdSGNEkUHwdlkeIleB4L4R+0yAsnwISB77xiDu6OgoDAnhOhmEddWm1Zz7Xjo26DUCRJB9SN9dXvAhXK3O6kmIL17Mc0YcCt4xDFDCCGOOy6K0ZQAAElAED0OZzstzJgQkrwN7Eo72Hx/3CUHsXC1ZJYng7BMBBBTB0K8eXoRVeWJPQhchwACbgQfBef+SBgEyAhgCRfDrV5YJIf4pW/LaGoWj+Elj1eBTTa8f2QjL486PlFUJssgI3N0NPPx8+oRgahGh8g/rqmckn/cIwTDAYPZeri4l2Eu1bSBYDJ8M7H3wCwQDA6+dv94WnxJAsDjU0t9RTpVHhcLJkVaIOswnNI7P5VJC2ZNATdhHoW1QnQIFQAKaoFh8fVs8u1XFCO2lBEpYfp4q6/K5QulwNlKBIJw9XJIXSwkjrFfanHTcgWU+EZCAIvhH3l0wtw0EUQDupbUHO1hSmRlUdJkpMMnYYXaZmbk/ve9WL7Iu8smRpXM8' $Image &= '6paJvlnS1ZLHS+NeTggkmNA5wH8/Y3R0ZHhsavqSxNX+mbO9RxhOEPY0fcWrCg0aBIFAabZWWm0gVNJHaKB7gBiECHPzCEGYnJ4a88dmZs7ePY2/qGuEeGgCRESgWl0gqNVnc0MAAQ2IAAKEZEL/3L2pUxNDOmjgDOHInua1IFkAAgQJaFD3vNr9fBCYB9FEmLvayITpB/MBAgncIRzbGmuMyjBAGoCAaTBb8zzvoecOYV4MiPBodGiYBm4Rjm61JAJrIcyDEtPg4eMnj5/mg3BEtgITATGnEaCAwA9pBdcIR/bZJgPGQlODx8+e5IRAA0SkJUhBcEBohAmmgnsEZZaEAsLKCMJCS5Q8eHb/WX4IZjkwEQwEpkJnENTigtALAldEGtTF4PmL5y/zQqCBgYAwMiFIheNpIh0CYnPsDIEjUhqj7AdMBBg8fPLs2fOnL/JDoIIVAZEaYanXDhGVzbHXCTMTglQggjZgMQDhVY6ZEENgSUQRoJAzghn8n/kVMQbpCiYCmuITGLx++spdJnBGhggI9wiHNluvHYggS0KpFiA8u/8iQLiJ6G0VrUdkDIERzYQJ5wi3NtheCI5UiCBgTRKE57kjoCCSEYY6gqD40nojVI+uh7IohAhP0iGcTgyNcMKK4LYxmnFQMoEIRvRga9QDYhHC06evX+eJgFywI7AahtwinASCUQbmlWSQCgFCPX8ENgUgCIEFwXkm+Ad7rK8Q72l0BewJ4aqUG0IFr3oNTpVEwESIrs3uEWwGSgYEVgUgjAcI3sOFTKjkhTBEgjAWI6BlwMA1gu22Xe7OKzVCWA/MhJwQkAYshEYYBiNGIrhFaISK7QrIhEBBI4TLUm92hN7TJ4KOOGlHoAERXAWmg/XWLXaFLeU3fdWqRqjh2iENQrIPKkEMYghGR6CB7zIuHtlmVoJ5oxxbY5n1gM5IhJtAyBQwmLAihMXAyXDkuFuEM9sbBgZCEHIZVZZVgQjP7muEG9czG9gR' $Image &= '4rXgu0U43cgEy6kzUiFEgIJGeJEV4bSfhECDiQkS0MBhOWyP3csdP1yRAVGCgiC8wKX020wIvf4JGwL++cGOqAGEoNJGpESobCeAJRQRwlQQhHfXsyNMxBBGUQEyDiscLW1HSgR/e/I9fEpfUUcQ0BRePH0OhBstIrkajpuZQALkgEbwlwtB2e71lXoAQlXPh7oni3MOCEwFIjTqABWAAug0wgHbjbyKXQEXk7o14iqKCPdzQjALAq2QibA8CMkPAEIqDAwAoSoIUg/3MyL0VoBgdoXREAEGHUfYYV0SlGIqNOZDrU6E91kRQgUDQR8c+MuEwLBkQ1APfWyN+SDI0dpYmAuNlgCDjiP4N4jAZIg/X4S7c/kN6oGbwvP77z5kQ8A/UF9GIxcChlEmgtRC5xFu7kh+pATrAZdREYRnH7Mi9J72g+YoDHpF5mxkdBYhVg6K2WD+RwwRSrMWhHTx6dMn/Bs/674wBoYgBXpjVKmjXYRKi56guDBhPnBTeEiEbMH2CAeET4DU4RDBtFA8VpB9SRDuP/l4LDsCQp8u4a9wk7F8CLtsT+RiVRBBDpjkeAlHbHkhMPJGSP+/gzuM1/Tazp0xHwShNFtIhEYmqFgWGFsjTtnWEOFx8RAQyvaUQFIE8wEIemcsIMJOY1GyBeaDLI3BzviwgJmASDZgKkQQvlwfdBydRPB3MeXjTywzd2dBqGJdKhwCyyE5GTgl5XxpvJsQkk0YSzE4SoRkCM6HPkF4+BgIX7+liu5GuLnLuiiaJDIfqsHpkgeEt6nibpPoHgR/t0lgeV6jkn2pvEkPSSB8/1EohOt7LWUQO2riRVQREQZ3tmgHTAk9HwqLcBSZoCwAxsNQOR8KiXAMCC2f8BnWA16+pMdDvQMI7ayd9oOW5BjcbTxS1V4QQT30AaHuFQeBAQQVe2qyDUGGZM2rdTVC+rhJBIbt8eZsCgVFQCYkbozmocIWNIXiIqgmD1uPQUhTqBYQIWE60MOo' $Image &= 'B3RGIvxsFS1hviVEGoTsgT3B/rD/+P/CbMHp0qw3WzSEPSRQKvkxrayHvmq3IOSodJ0IXBUs1w3h3TBE+FUsBPSEFG87sGFAz8g6EYqWCclv1BKOC2wKmJH1Ui4IydPkdqvIs2lwbbaEMg8W0BQ2jRcP4fSeFG9aJE0BM7JoCIN7mu6Jtjd+0J0xQPjdVhhIXYMQW5aUpUsyFVaiM3YCoXUMLiE+2WNxY1S2AaGMciDCJo3wp1AIP1ZZXslqW5e2bBqf7X6E1hGtGB6vqaTLB7MpuEZgpFszsiEM7iZAQhj1MLBpzX+HoEwFNAWN8LdYCAmX0kqpZrfNvqmWColgv2JQsXcTW0BoK9LQdRrBtixxRDIjgs82lKul8YIh/OPuTpvaNsI4gFdkmnd9xwxJ7/uG0MFN3ze8cEp65BLuyrgxinNP6so9PFOPUz1SY4cUA3VDKA5HTnp/xu6za/FY8lq2ZMKY/HOAe2Z/s/vsIckuvtHb529qLZUxEkLGTpViZbcQMK8HhgO9VC6hsTJGGg42OHo5TvIyk9nc7iCoo7V/gwgj0RDSzOgLwQXIPR4ESrMn0Jaxa0Y+mY6CUC6Vi7Hys0j+iGuweKfZ4WndgFFh7Hx9PrBm3D89cz0CQrk/BMrjQ6i8QQOflkadp0xEGD7BEaxeo7NyH8NhVxCSr0f9ZPShF46fuX7N6jlVcMuUFGNR11VMz+94/Aj5JoKmeCZOU32kISKcjYCQBMiUmzmZqwJAuhwe4pIGYO8Sgo8gPEPHjs9GQzDKIgwFbphu2Z8ky5Sa0atOSeaU5MJvjVaElOu6eV8mM4aR2lGEwCShttn33IWICEWepA0AWRQIhIFdbsYFcEs8HldJIkAyz2PP5XUT8G/MtRDkHPwrfSBQTdC6zwr0euS5m79EQsgiggkAblkRAxw/guQSAh4CwkD1tAM3bLvasnBIoZadZTuD0PHzpmmmoAclj89HQ7ARAVs2WlQEG+lDQC4kIARc' $Image &= 'eJtg25A9yhvAHJhrGjgA5ul8jPQ4O4Scsk3XYiBkAMDJuekwhIyomsil+xCQpIrdQ24qTgOIlk9WAagT9IPwGrWZekT4R+HPLMRAKOti+ILJOiMYcENQSC4fQhKHvveX5sDM82TJoD+EwqvRPwL44GIEhKIDkBQKvDeYgiHdCcGWNTLlcXkIGYkwV2omhS74+5zoEC7P0aN9IHz8eugEqfyb5yIh2E0E2R0MHMY+BLaN4AKYZRmPS1REMCQC7clNHBk5OSswkKlmo60wP6PQFKkFDQJjhLZZF5ciIFgCgZLOAmRaEVyAk2UMzgo5WisJLqTxEKpUJxhWDRts/N4GLywuwsdYEzqHJkuC0S5HRrAo2GijFUEHYNsLCbtMEVwSgQsB2IRwGoCVHLDF96l0enJSd7NgxETIH3o1ZCSo/87IhUgIcwIhqVsyui0bTXGgyqsEc0SfLlNk8wlhrkS5AWbJxmJByYER86A2X6RHAns9Yzt2MwaCC1VbBJqzBSULULXFDJjB8ZBMeQMCuXiH2EYoU0wAfQ6rRgYn02TSZTkAI+aZHSJQ85RnasHxMLQ/DoJVhWaqc5Y/ow5gTLdYzHEFH1fZQyjP2W6ZwrAXzDkAgItIwPSBUH5NdSFSC6mWBz65svTrj70j1N1T+GXcldGtYMq6adtZV1RNG8xiC1eZEPxJiZVTmtlA6R+BHAKdoU1h3/HfOEKl53SfRFvDJ5JRV8YbFqdcxebbBNxwipEgwrJ9IHxGCFT+FccI9DdfmL4VDSFSer1WkZ5j/hOokh0fYfnV9jMkehXkkUeMt3cVgRIuk4FUXIQVjqApTxNUd3dqeNj89GAilNKluAgfv+K1ure7e7V9z52Yf5wIEbCCJ7NRESivhD8SqAXehWvoheH+EPoPIUSPGqb0CjWSmt5xN4kl4eAeRlDD5N9RNJhUAjyiJJydX3p/9xHUEP0HLYvv9LhloGvS555AhNBTpOCkceCF4zMCodBzfu8v' $Image &= 'u4TgU6BCqMzI/ukT5wlhF1Lh2SWEwGqp07VZbd/X02cuPnEI1jvRrj49N31m9olDKLyjKAS0Vgzg4A1LBy/1j5CxWpNZ1a1uOckMHnYqDCFpxEP4uPByhINWbWT/8ZmzlxGhET+FwkkwrZasgpMOFUgatL3O6UGE5EnXddPifO4UvjRZxHVCufySj4D2jKoM8ZIwc+5CTISMka7IMFj1nTgwIxQh4wDYcxlmGDZi5NItCEnvSMHBv+eKI/y5iD2hKBHCmq75nnaYPhEbYRVONhFykIuwksgBZPXtYZFzoKpTF3GAIhFy8RD8V6I19XsOyVUCfwAqLkIdnEozq2D0jvAhmL6SMW6DM06HtqKTuC4zPQQ7OkLpXfV1N/U5M6+LZ85fuBMLwYVspZlqACHJwhRkMaTgGZw0cIA6SdHFw9fYCOF3brWOhn38AaiD56/eWUrHQDC2W14HYEQgUNwuI4LVLUoGAGGS3MBhLVVSZ0VCiJQ2BE1x2YVKwszBixyhfm05YrAkGC4zsqtZRHBJQKBkKhSdtXWMVZ+SC+KlyQ18A6VcLHIaiIGwRm3tdk8nPvVy4uzs1drC9WvL6166AyRF46EZu6K3IdDwkLc11f0GqGZRsgC88YwMKHERhqilIQdLmobPPwmEm7WNxa/GPitsbvaEkFmF7di2wdIVtyMCQwHHdK0wBAZgygsZzOqIYEXK3QOdHn7S2kYD1sVzl67Ulmr3JiYSk5WeEHK4xLFzWLbqBUxDgZAVX5Er61bakmxBQCdHdgTb6oAQeUd+9/kezxI0LAl8crh8pXZ/8cHDQ6NTiaPFR5ubj1qiQkhVmc6bbgDUC4RQZ4aRIYRV/GoC6ijiegi6UQU0kBWB7TSCpnUkoJLAEQ6ev4AIG7XrhxKJqcRovrDeEnVJFPEjmPLyq+tDwI6Q7oygMzmwsqJicA19xxDWEKHrPTqafCQSJweOsLS4uLBxaiyxlZia2jpqrW9udkdghJCR5cHG' $Image &= 'Ud2K0LxPp65CYIYUcJrrgjqVz0Ds6AjWjy8+1UM0+YQwr4sXL9ziPWFxsXbv8EQisbW1NZUYLzW6I7gAdeoUTkp0CQcYsjgA2PLG9m1N7QhSwMT1QleE1cgIPzxPB+sUxeHKCD4rTgiLD/44lMBgd0gcLS9vbkZAYIUGRpcKdhMBe4MpGPAlRXYd46RF6YyQi4Gw8rxscrflwhB/5zXcOcx6CKIsbPEktrjD1ugRa12MikeBNGTSAHprefAGiZOWCNgzBIS8rcmHYABkBAvlTweAUFrDqiwyQuGt0JvWvE6CJQHr4rnZq7c5AmZhcetwAiMceHUYz1dotiCEZqpgNGRy4DSIhhFCE6KO9+kEEJoGhGACGFZ/IQSLEDpqaHKVgHURERY4AuaBKAsSgQer5AdHLO6w3poGNT3N95JJ/M6mrSUYOH0SQnP6MLohMPCtoOp6xjBXT+4cgnqCPPb18DR/G8JLV+c9BCwLowkKVkkxLpZpviCEtANVLPEo0VAh1PUmgr4KwEIRMGJlldHrdddluebUUX8cCNQf5FssnTh7/jIhyLJAPWELk0CHj45YDQ6x2YqwzABjSgEql8wrEr77dAqtUSHg+tIfk1mxwg1WOIKm2EXSFNGsi+LdVDjCTUJYXFg4PRZAwFcIkfgobzUe0ajgxUFnRkYPHjI4HKXupvDskQ4SjYIvjBBaFXIObUpymbQlo1fNyA4rb3R6PJxOnTVREhQISw+WJg4rEDwI3iVKnEKmsdyeotugpF0ZveBPo5JyK8q4zDCY66brFgW7TVSEwuvK7k9FUfNKgkDgC8YWBL6J+GtsVI0ghgaXQIoCNliF0PBnWZ2/Kw11VDB192TsnhB+8+IQRziOM2QQYbEm1kzqeFUiIToD/hZMOAJZRUCwKtGDCFqngog/WpZKfHKYDSJsLPwylujQEzyE0eUBR1h+Xd0PEIFGg3wTQpwhgwiLNVwzhSN8JEvjenvIog+E/hOsCeoPyxsR' $Image &= 'dfHE2XYEWjOFIVAGG0G9cyKE44hw/tKFW0EEccISinB0c9ARXlN3BIpGb8QoEO4EETZwQxmSqcnHhVDYqRCC4llZevc9gYALxlt3NgjBWzP9ciikJ+w5BHVGxOQww2dIJcLSwmJq7IlCoNv46PHoZl3EZYIK4T4Wx8OdEY4QgjrLlAHtCThBYl2UCDdvqxCwOI4nME8YAl2IRIRhvmgOQaBt9Z5EeKX7k5BYF0VPOD+rRqBttRJhsn+EnU83BC04HPDt/LEn8Bny5rwCgaYIJcKHg47QIARFaL04jDOkQKgpEfDM8fMxNcL4HuoJ6gUDTQ7hCLh+nji8xxCoJ6gFKPhu/hLhIm4d1AhSYWxCgbA1ikdtA43wTufW0wzZEwJNlAGERIMQ9mBN0DRRF3HnIBAuhyNs4ETZjjBl7ZGeoJooqSRIhHPhCDRRBhHKKysroQi7GkVhbEOgQ2eN6iLfPslVcwgCTZRBhOQeQiAHH8I+OUPyI5VZvnVQI5DCxpeH2hAmCaFjHu1QoiHQcAiP2DngRx+FIVBqiydxueBDGN9TCHS0Sq+bH/ozczAUgfJgKTHmRxBz5OAi8BcvdZoVCGH//ubkwLcOXRFo0UQIicLeQVBfnMcTlUgI3ukCIUwVaTiEZpAQCIJmSLFW6o5ACjzbCJ/tUQSaHHAPGQEBU/trbKIVYXzQEPxZJoS2CknLhKgIuICeIIStxPqA1YRwBC14tHQAEabFgjECwgYqEMKURT0hSnYL4V2FAL3EuniMv4l9BATaRkzQHSyf7UEEWjbKyQHPlaIhkIJAGF1f6ZJNVQjjsSI8ejf8ItyQPGCMjkAKYkw0BhOBeoJ6fdAnAikgwlR+oBHuhh+q4OeFihnyzNloCKQgED5ciRPC6DnxEIaeCgkuE8SCceZEdASaI8QkGSO7hnAgrCOIGTIGAimMyeqIK+f4GRSE6MOB+gIifDjQCM+HPxXLlwkxagKl2Re2Est7BUF9MfY5D+Gy' $Image &= 'QFiIhIAKuLOeyg8Ggtrl+U5TpKbR5+wjwnkPYTESAl6OOIzHS7uAEHdZSgjKY0Y8V8KeIBAuxULAp2RQoTHACKF3eEsEcZzgIdyJhEDnC1Of7S0EjW5WGRE9IS4C9YWJMdo/DDCC+hPA+CayPwQ6d5yyBhZhmRCo+RptHY61DYdaNARSGN2Mm91DIAXKUHA4XImOQA8LWXukJ1An0AhhehvhKiJsREMghbHBROChe/0V1XFITpH9IJDCX4d++GFl8LLJo0Sg4bBzCBt3Hl77Z8dyLSQ/tuUH36v2f4EQFO+fcKAN4fZ8NIQNzEJtoVarPZh/eP0ndf5ozcM/HirzF/7oOfe+uXfvr3viyzcy33777TM8//47PDz8opcXxI/n1dee6MA9JgJvOoa3HXMHM3/zKs8Fnv/+u8Qze3F2dvbiRf7r/P+MnQGH41AUhfe1ml8Q2oj+oVpIIKCMUc22rckPid2FqYVhYQGy7U/cc9896U3mbZ4cu8uu6ST3yznnvljM6YS//31rr1g/f37oJ/Gh99sVn4H4CXyN6VuvN68Wv9r22l6v/g/qdvV/xzc4v9aH7l7kydphzsXiS1SGwiEOgFDNh8D5x9N/h95vuJ0WIgfMJATquj4dj8fDIeu6x2O1uld30Wq1eqjKsssOh0MNTJ7ZEwWHh2R4GfU59C0QrgwO59OhXFV5niTL5WazMEX+30Xfn7ZJ8QnCz98RCDK/9/6Hl59ebkyfqHoATx/Ty+wYPutKTH+vqiLP82a73LjnkX29TXY5rg4k+3358vKSCY/DERJ4EKFc6AgiUQkN/vbswb02CHEGths0DiGEHwEEcwAN8Jwf94Ab8ADEzydxfl3r+J1/+Pd7laaFzO9vbZzGzVpuAMe1IhUWgAEaxGE8vE28zpfL5dubEcGFeXmh/6oQGjrBIMS1kWNz4d8iM4Vwm4DgAUBM//v7uz4Czk/zQxy/LDm/PP9km6zXIwDOQJBEs8vzIgULpVGK' $Image &= 'ACOg4fU6qA/fQUCA6x+z8l4R92YmAm4HQjjWAYSgAxQA9ARg6ZfnrwTo/woAmoYOCAAElpBkJklDFCBhLABDBBSqGsZA1b6eGRd/B0B07B731CBM9sFYC3PC4Vi/Xr4FEH73Fvh4ErgRAD3YN4DmXxywogMEgFjAhTkMhY7YoKJAAtqNUOwhgQEUbI1aUKgnUKfSqbW/he5RCYQlIMwygrNOKEYQ7LQEBGxBlgAAGAG1AK/uCXQagQoVsNupBdiDJqfV7CYcsZCAKgl0ZiEkDEUpYkIgNcVT8hRQCQUhBAziEHIPAWYDhFZ3pKWAPWhrwBOQEPozwIDAQ0MACwBAogQWbtKFvINQTrNBS3hPVCQhKAZlwYRQhxACGcRlEPYlIXBH/mYPWBESQB+C88gDrEHugaQhgegPq4wwcQQhNYFW2QEFPDFgsTcWQ2klNKyEOQycdsIQgn+XBgQlAOlB6NevX4JAexAItAgJv/NFOEzBdskYRH+sdzi/G1WGQzSQDbUEVgdET1hTCAYD8VLuvREaXD7CILjkYr3WdweDcIMVVHoWBIDBeYRnoVEK4IH+LJT0MVhMpoC3MJjWTaVjoRxkg25pCdREQMKEOMqBZBYEMud28E5YEcKbUPj4IALIe6B/JTj3u6AWBDwN+CLwCBorgphc7PwWBgcgxBGIBjsiL0aNSRiQGoFZnBeGMQQpRpxBcB6TWuhjcKUHBMFFEZBA1kFC4DOCjXP/fU2ZoOCmGblRRWgy2Jbal+aJXlXOSog9ifCQ8nQCKNSkgET0OWghEBAE3AZ8Her3IRAIgcAFsTokGRfNa7gzDIRZgnVJSSZ7BrMhWDGu9qBwJAUkArpCvQmAgDEQAhlzIFelCeIIeC6IzGk1NZ0d14NYSkeoIywbotQaYV4kiddDIAXZuidQaNsbxByAAIJw6qvAXGA5kAtbG0YuH4mEiy0Ri+/CGsI6QqIhJOR2Yk/D+HM3WCdsBackq3z2ApYERAQ8' $Image &= 'l3sXZBBMgJUo3NUG20SvO2PeSPjjlJwzDhD9QEM0IFEICGtFN+sRkL4/pcpbfQoIe+uFFjYwBPZugK1cmgtGG8HFjgIkD83rAMhFChQc2BA8YnNn5NuJUowyVgpgCQrjXmAXAIHlICuhPbqALrA6XNj2HY7m4j+/OIiCC9GM69T+UTAIh/WzKhtolg+oCAV5RZNegPwbqrkgEwKCgH242wGBJ28julj7UbG4Tn4qBMl+YDCUxDaZlYVpCoVSyDJQgBeCIBABGKRiAzkff10u1xuzgXkh2InBc4/cmQv8MG0nZ0cpwfA1eGudA8EZBdkRwNC3I0QErMP9EAEYbJUBCbBxg0jPTueclRZAGC0MgOD9RBRNhJRjnqbWjlwJx0yEOuwRFBCSIAjWYoOpFiSXWCjcFJA5GhaOrAvkAlJXurlrOqSQ7Aprx/pzF7APFYEmAdiNwVTNzVjYBiSqyLZwujejJ5X493KegqyaHBQEw4sUg0gQWBmkqTDwCKZs4ILxXSwi9lUxP5BVXE5A/PfDVHwrsRf8caEABukFmAHK/nV2BqlyA0EM5SWQM3gzF/pklf3c/xqZsqdHGCFET2URTH87bUVSqdqLr5YgJYwZ/B3myRBJLr+uwFByUmQQMHv0yjtRse0LKxsNAksJP5cSrqYQLK1KwGGSMBJExd1LdTm4LwwX/okFFw1WMniMBw8EbKaB/F6E53D/O13BJiCQufCKHfoY9Jxzq4XBxw9PN/gtQ/Si/6qlkpzt/lZ8xYXg4MexpqlRxPMpGrwx+HlDEDDYEztFwkXlBtbejZgr3s78JYmB4C6F1+mv0QA5/Fabd6By0U9LtYPy0y2haqY8UVBPGEdchwaZBumYxN9Sfl+3a+NYmKnQNbuKsAi6UJgIrXFR2cAwqOWNIO/AemlFyKjgaWW7OI4ZRS4yKCS/htTVGH8J9iZAbwMQjENI2VqKP7RwRY9NWsAUMUPloDAJceLRFg1IsIi+duKaXQKq' $Image &= '2MwRwjZKcr/V8TEGzYuPiYiiQYtDRHvKIoDmnejF+uO76RJkJjKc6XFqaHCblioH3Kl69XM1py727C5IOj+EwnFy4azHwqBP6r2r95X9/9q+iqFrkMYm8fgz9baDNS5BOwZpWQazxJB/qAbmusMfT2BrH0mOSxKvP3LEDwnpIABu/tj8nNt7n6vA/i1CA+2sEcJYbrposOwAkt50VUuouH2ypRlK7DJX2pn00MmjOmO4YT80CQQHRmTtZmdXxm7ja0XchTbGYF3BLNw0Xk4CSFMyNl0nELY/7RKBtDLxDQwnDUrOt6vyNmWkqbfFltmcSeN5/uSDd9FjHaJlQCm4kHbUal9ppUHmyJjv4URhIMC/LmHM7FxpsqGq1Fegok93hP0X2A8u+PR+vyYdBVAeXls0CYb7Mp43tLhzRty3ZK//LbDOSsL+KC5bGNfdcHd5/4f27+4Z6T8Zv3ETjnu8lgAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Image) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Using-Note.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Image 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
    1 point
  32. UEZ

    [SOLVED] GDI+ transparency

    Sorry, I understood it vice versa. 2nd try: #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> GUISetState() $g_hGUI = GUICreate("Test", 250, 250, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOOLWINDOW)) _GDIPlus_Startup() $g_hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Torus.png") $hImagetemp = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Legemeter.png") $hAttribute_Alpha = _GDIPlus_ImageAttributesCreate() $tColorMatrix = _GDIPlus_ColorMatrixCreateTranslate(0, 0, 0, -0.16) ;0 = opaque, -1 = transparent _GDIPlus_ImageAttributesSetColorMatrix($hAttribute_Alpha, 0, True, DllStructGetPtr($tColorMatrix)) $g_aDim = _GDIPlus_ImageGetDimension($hImagetemp) $g_hImage2 = _GDIPlus_BitmapCreateFromScan0($g_aDim[0], $g_aDim[1]) $g_hGfx = _GDIPlus_ImageGetGraphicsContext($g_hImage2) _GDIPlus_GraphicsDrawImageRectRect($g_hGfx, $hImagetemp, 0, 0, $g_aDim[0], $g_aDim[1], 0, 0, $g_aDim[0], $g_aDim[1], $hAttribute_Alpha) _GDIPlus_GraphicsDrawImageRect($g_hGfx, $g_hImage, 10, 10, 200, 200) SetBitmap($g_hGUI, $g_hImage2, 255) GUISetState() ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _GDIPlus_ImageAttributesDispose($hAttribute_Alpha) _GDIPlus_ImageDispose($g_hImage) _GDIPlus_ImageDispose($g_hImage2) _GDIPlus_ImageDispose($hImagetemp) _GDIPlus_GraphicsDispose($g_hGfx) _GDIPlus_Shutdown() Func SetBitmap($hGUI, $hImage, $iOpacity) Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend $hScrDC = _WinAPI_GetDC(0) $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap) $tSize = DllStructCreate($tagSIZE) $pSize = DllStructGetPtr($tSize) DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage)) DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage)) $tSource = DllStructCreate($tagPOINT) $pSource = DllStructGetPtr($tSource) $tBlend = DllStructCreate($tagBLENDFUNCTION) $pBlend = DllStructGetPtr($tBlend) DllStructSetData($tBlend, "Alpha", $iOpacity) DllStructSetData($tBlend, "Format", 1) _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteObject($hBitmap) _WinAPI_DeleteDC($hMemDC) EndFunc ;==>SetBitmap
    1 point
  33. Very nice, thanks for sharing
    1 point
  34. You can try something like this here: #include <ComboConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <GuiComboBox.au3> $hGUI = GUICreate("Test", 262, 145, -1, -1) $iPic_Bg = GUICtrlCreatePic("c:\Program Files (x86)\AutoIt3\Examples\GUI\Logo4.gif", 0, 0, 262, 145) GUICtrlSetState(-1, $GUI_DISABLE) $iLabel_Name = GUICtrlCreateLabel("Name:", 17, 19, 59, 16) GUICtrlSetFont(-1, 8.5, 400, 0, "Arial Black") GUICtrlSetColor(-1, 0xFF0000) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) $iLabel_Pwd = GUICtrlCreateLabel("Password:", 17, 62, 65, 16) GUICtrlSetFont(-1, 8.5, 400, 0, "Arial Black") GUICtrlSetColor(-1, 0xFF0000) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) $iCombo_Names = GUICtrlCreateCombo("My Name", 89, 15, 161, 22) GUICtrlSetStyle(-1, BitOR($CBS_DROPDOWNLIST, $CBS_SIMPLE)) GUICtrlSetFont(-1, 8.5, 400, 0, "Arial") $iInput_Pwd = GUICtrlCreateInput("Password", 89, 58, 161, 20, $ES_PASSWORD) $iCheckbox_Voice = GUICtrlCreateCheckbox("Voice", 17, 97, 65, 20) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($iCheckbox_Voice), "wstr", 0, "wstr", 0) GUICtrlSetColor(-1, 0xFFFFFF) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) $iCheckbox_Mode = GUICtrlCreateCheckbox("Mode", 17, 117, 65, 16) DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($iCheckbox_Mode), "wstr", 0, "wstr", 0) GUICtrlSetColor(-1, 0xFFFFFF) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) $iLabel_Login = GUICtrlCreateLabel("Log in", 153, 115, 42, 16) GUICtrlSetFont(-1, 8.5, 400, 0, "Arial") GUICtrlSetFont(-1, 8.5, 400, 0, "Arial Black") GUICtrlSetColor(-1, 0xFFFFFF) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Br, UEZ
    1 point
  35. cxzzD, As I wrote the tutorial I am disappointed that you found it hard to follow - perhaps I need to rewrite it. This is the example code reduced to just what is needed for your case. You are using lots of Sleep lines during which your script is completely inactive. So use the _Waiter function as in the following script instead - it looks for the interruption and you will be able to break out of your function just like the test one here: #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> ; Declare a flag $fInterrupt = 0 $hGUI = GUICreate("Test", 500, 500) $hButton_1 = GUICtrlCreateButton("Start", 10, 10, 80, 30) $hButton_2 = GUICtrlCreateButton("End", 10, 50, 80, 30) GUISetState() ; Intercept Windows command messages with out own handler GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $hButton_1 _Func_1() EndSwitch WEnd Func _Func_1() ; Make sure the flag is cleared $fInterrupt = 0 For $i = 1 To 20 ; Show we are running ConsoleWrite("-Running" & @CRLF) ; Use this instead of Sleep as it looks for the flag rather than being inactive _Waiter(100) Next ; Ended normally ConsoleWrite(">Ended" & @CRLF) EndFunc Func _Waiter($iDelay) $iBegin = TimerInit() ; Start a loop for the required time Do Sleep(10) ; And check if the flag is set If $fInterrupt Then ; If it is then exit ConsoleWrite("!Interrrupted" & @CRLF) Exit EndIf Until TimerDiff($iBegin) > $iDelay Return 0 EndFunc Func _WM_COMMAND($hWnd, $Msg, $wParam, $lParam) ; The Exit button was pressed so set the flag If BitAND($wParam, 0x0000FFFF) = $hButton_2 Then $fInterrupt = 1 Return $GUI_RUNDEFMSG EndFunc ;==>_WM_COMMANDIs that easier to understand? Please ask if you have any questions - the idea is that you get your script to run as you wish. M23
    1 point
  36. I found that tutorial quite hard to follow. Does anyone know an easier way of doing this or a more clear tutorial? My head began spining around when I saw all that code (They've used 3 different stop things in the same code), I couldn't figure out what part of the code did what..
    1 point
  37. im out of the thread. I used to use it in our installer distros. we can't use it because all our clients were complaining about virus stuff all the time, so it's use got voted out. We can still use it to test our GUIs and such and internal use. So, me I can't barely use it at all. Plus I really don't need to. I do all my builds in Git-Bash using bash scripts... lol i had big dreams to do all kinds of product testing with it but never got to do that work. So then I automated all the builds instead and made my life much easier to manage. Just need to do normal dev and stay all up to date. What with updates to redists and all kinds of stuff we ship, I want to keep them up to date and ready to roll in case we need to do a patch
    0 points
  38. jchd

    Too many IF Statements

    I don't get that issue: >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "C:\Users\jc\Documents\AutoMAT\tmp\t.au3" /UserParams +>19:38:14 Starting AutoIt3Wrapper (19.1127.1402.0} from:SciTE.exe (4.2.0.0) Keyboard:0000040C OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:040C) CodePage:65001 utf8.auto.check:4 +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\jc\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\jc\AppData\Local\AutoIt v3\SciTE >Running:(3.3.15.4):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\jc\Documents\AutoMAT\tmp\t.au3" +>Setting Hotkeys...--> Press Ctrl+Alt+Break to Restart or Ctrl+BREAK to Stop. The code for Iowa is: IA The code DC is for: District of Columbia +>19:38:15 AutoIt3.exe ended.rc:0 +>19:38:15 AutoIt3Wrapper Finished. >Exit code: 0 Time: 1.549 Using F5, it runs with /prod Using the beta is that: >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /beta /ErrorStdOut /in "C:\Users\jc\Documents\AutoMAT\tmp\t.au3" /UserParams +>19:40:48 Starting AutoIt3Wrapper (19.1127.1402.0} from:SciTE.exe (4.2.0.0) Keyboard:0000040C OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:040C) CodePage:65001 utf8.auto.check:4 +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\jc\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\jc\AppData\Local\AutoIt v3\SciTE >Running:(3.3.15.4):C:\Program Files (x86)\AutoIt3\Beta\autoit3.exe "C:\Users\jc\Documents\AutoMAT\tmp\t.au3" +>Setting Hotkeys...--> Press Ctrl+Alt+Break to Restart or Ctrl+BREAK to Stop. The code for Iowa is: IA The code DC is for: District of Columbia +>19:40:49 AutoIt3.exe ended.rc:0 +>19:40:49 AutoIt3Wrapper Finished. >Exit code: 0 Time: 1.535 and then it uses the switch /beta
    0 points
  39. Melba23

    Too many IF Statements

    Exit, You need the Beta to use Maps. M23
    0 points
×
×
  • Create New...