Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 09/24/2025 in Posts

  1. Released v1.1.0 yesterday! Added Support for running the Format Document command via the Command Palette or hotkey using Tidy.exe on scripts, including automatic formatting on save Jest testing framework with test suite for language features and services Changed Refactored monolithic command code Upgraded build toolchain Diagnostic system overhaul with encoding handling and problem script source tracking Fixed Restored Go to Definition functionality for symbols declared outside of current script Restored Open Include file (Alt+i) functionality Path handling improvements Completion provider accuracy with user-defined functions View and Rate on VSCode Marketplace View and Rate on OpenVSX Star, Submit Issues, and Contribute on GitHub
    5 points
  2. @water... I'll get me some cafe, take a walk, ..something. I edited my post above. I took everything out of context. My brain is hooked on a work project and I can not do more than one thing at the time Ok. That addition to the Date.au3 UDF, was right there for the taking. All I did was to add the strings for options 6 and 7 ... Case 6 If $asTimePart[0] > 1 Then $sTempTime = "hh:mm tt" EndIf Case 7 If $asTimePart[0] > 1 Then $sTempTime = "hh:mm:ss tt" EndIf ... Now including the AM/PM to it, ...I'll need to be in a happy place ( no pressure ) to get my brain in gear for that. Now any and every one, is welcomed to present a _DateTimeFormat() that includes that. I'll ( well, the MVPs ) will look at it and say "yey/ney". Remember ( not just you ), that all these UDFs were scripts users of the forum coded and expanded with the participation of everyone. Don't be shy. Your nationforum needs you !. ( nowalways recruiting coders )
    2 points
  3. Ok, am getting better at screwing up 😅 That function ( _DateTimeFormat() ) does not do that. I'd have to look into it. Like my AI tells me: "you think too much of me" I'd have to get my brain in gear for that and am already spread too thin as is right now. @SOLVE-SMART gave him a solution for that in the German forum that works well ? ( haven't tested it ), unless that is not what he needs or you'd like to include that functionality in this function too, to have an all encompassing function to handle everything. Nonetheless your post woke me up to the in the date UDF. Edit: ...I need some cafe...
    2 points
  4. On the german forum there is a guy who needs to translate date/time from AM / PM format to 24 hours format. His problem has already been solved, but I remember your thread in the engl. forum regarding AM / PM output formatting. I searched the forum for code to do the AM /PM > 24 hours translation - without success. So I decided to ask the master of date / time translation
    2 points
  5. I care to change it to AM/PM because everything is 24 hour based. Do you have a AM/PM scenario that needs to be switched to 24 hour format ? And what do you mean by "does not allow to translate date/time" ? _DateTimeFormat ( $sDate, $sType ) in the new release is expanded for AM/PM #include <Date.au3> ; Show current date/time in the pc's format ConsoleWrite('+ _NowCalc() >' & _NowCalc() & '<' & @CRLF) For $n = 0 To 7 ConsoleWrite('- _DateTimeFormat(_NowCalc(), ' & $n & ') >' & _DateTimeFormat(_NowCalc(), $n) & '<' & @CRLF) Next + _NowCalc() >2025/09/24 13:41:22< - _DateTimeFormat(_NowCalc(), 0) >9/24/2025 1:41:22 PM< - _DateTimeFormat(_NowCalc(), 1) >Wednesday, September 24, 2025< - _DateTimeFormat(_NowCalc(), 2) >9/24/2025< - _DateTimeFormat(_NowCalc(), 3) >1:41:22 PM< - _DateTimeFormat(_NowCalc(), 4) >13:41< - _DateTimeFormat(_NowCalc(), 5) >13:41:22< - _DateTimeFormat(_NowCalc(), 6) >< - _DateTimeFormat(_NowCalc(), 7) >< hmm !, I see what you mean !. Last I saw it worked but the release does not work. I'll look into it.
    2 points
  6. ... #include <WindowsConstants.au3> ; $WS_* ... $hGUI = GUICreate("Example", 400, 400, -1, -1, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP)) ... should try it in full screen 😍
    1 point
  7. Here is a fun example that does the smooth color animation for the border and for the blur behind blend color as well. Mesmerizing! 🤩
    1 point
  8. Is my understanding correct that the latest/greatest AutoIt version does not allow to translate date/time from am/pm format to 24 hours format? I searched the forum but couldn't find an answer.
    1 point
  9. I don't know if you are like me, but I am always searching for that specific code I wrote over the years, but cannot find it. It was way too exhausting to look at 1k+ scripts. And Windows Explorer is not the best tool to do such exploration. So I made this little script that save me tons of time. Hope you will find it useful too. You can adjust default search folders and type of files you want to search for, but you can also change it at runtime. To use multiple filters separate them with ";" Let me know if you have any suggestion to enhance the tool. Version 2025-09-19 * Allowed tree view selection on right-click * Code optimization Version 2025-03-31 * Added Win32 API to always display task bar icon correctly * Added registry read for AutoIt directory and macro to get initial search folders * Added boolean to display or not display the children flag on first drawn list (by default it is True) Version 2023-12-27 * Code revision : 3.3.16.1 now required Version 2023-05-10 * Sets children flag on first drawn list Version 2021-04-06 * Context menu modified to allow clipping file name and line content Version 2020-11-21 * Allows only 1 running instance of the script * Added right-click support on Tray to exit script Version 2020-06-29 * Added Copy File Name to context menu (helps to copy include files names) Version 2020-04-22 * Added icons to main buttons * Added informative box to describe progress and results of a search * Increased robustness of the GUI * Open Button enabled only under the right conditions * Added Tooltip on filter field to describe how to enter multiple criteria * Forced a minimum Window size Version 2020-04-18 * Added support of Context Menu in Tree View * Added support of Tray * Minimizes on Tray Version 2020-04-12 * Added DPI awareness * Added Enter Key functionality to start a search Version 2020-04-09 * Changed base size of the GUI to make it wider * Made the window resizable * Added Reset button * Shown busy cursor more appropriately * Corrected bug of first line displayed Thanks all for your input. SearchContent.zip
    1 point
  10. @Jon Knowing this, it would be a simple example for future versions.
    1 point
  11. Nope He posted in the wrong thread, that's all
    1 point
  12. Unfortunately, in Windows 11 the function to add a shortcut to the taskbar for quick access to desktop icons has been removed and since I relatively often need the desktop icons for daily work, I wrote a small tool to help me access the desktop icons faster which I want to share with you. The tool is written for Windows 11, so on older operating systems the result may differ. #pragma compile(FileVersion, 0.8.2.0) #pragma compile(ProductVersion, 3.3.18.0) #pragma compile(LegalCopyright, "UEZ 2022 - 2025") #pragma compile(CompanyName, "UEZ Software Development") #pragma compile(FileDescription, "Toolbar Desktop.exe - a simple toolbar menu app for Windows 11 to access desktop icons faster.") ;don't change because it is needed #pragma compile(Icon, Shell32_39.ico) ;~ #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_Change2CUI=n #AutoIt3Wrapper_Version=b #AutoIt3Wrapper_UseX64=n #AutoIt3Wrapper_Res_HiDpi=n #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe ;/rm ;~ #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #Include <Array.au3> #Include <ButtonConstants.au3> #Include <File.au3> #Include <FontConstants.au3> #Include <GDIPlus.au3> #Include <GUIConstantsEx.au3> #Include <GuiImageList.au3> #Include <GuiListView.au3> #Include <GuiMenu.au3> #Include <GuiStatusBar.au3> #Include <Misc.au3> #Include <StaticConstants.au3> #Include <TrayConstants.au3> #include <WinAPIConstants.au3> #Include <WinAPIShellEx.au3> #Include <WinAPISys.au3> #Include <WinAPIvkeysConstants.au3> #Include <WindowsConstants.au3> If @OSBuild < 7600 Then Exit MsgBox($MB_ICONERROR, "ERROR", "This app is using the Win7+ API which means that your operation system is not supported!", 10) If @OSBuild < 22000 Then MsgBox($MB_ICONWARNING, "WARNING", "This app is not designed for your operating system." & @CRLF & "The app may not work as intended!", 10) AutoItSetOption("TrayMenuMode", 3) AutoItSetOption("MustDeclareVars", 1) If (Not @Compiled) And (Not FileExists(@ScriptDir & "\_Shell32_39.ico")) Then _Shell32_39ico(True) Global Const $sScriptName = StringTrimRight(@ScriptName, 4) Global Const $sTitle = "Toolbar Desktop ", $sVer = "v0.82 build 2025-09-09 beta" Global $iPID = ProcessExists(@ScriptName) If Not _Singleton(@ScriptName, 1) Or ($iPID <> @AutoItPID And $iPID <> 0) Then Exit MsgBox(16, "ERROR", "An occurence of " & @ScriptName & " is already running!", 20) _GDIPlus_Startup() #OnAutoItStartRegister "OnAutoItStart" Global $__Restart = False ;Const $WH_KEYBOARD_LL = 13 Global $bDarkMode = True #Region DPI Global Enum $DPI_AWARENESS_INVALID = -1, $DPI_AWARENESS_UNAWARE = 0, $DPI_AWARENESS_SYSTEM_AWARE = 1, $DPI_AWARENESS_PER_MONITOR_AWARE = 2 Global Const $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = $DPI_AWARENESS_UNAWARE - 3 Global Const $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = $DPI_AWARENESS_UNAWARE - 4 Global Enum $MDT_EFFECTIVE_DPI = 0, $MDT_ANGULAR_DPI, $MDT_RAW_DPI Global Const $MDT_DEFAULT = $MDT_EFFECTIVE_DPI Global Const $WM_DPICHANGED = 0x02E0 Global $AWARENESS Switch @OSBuild Case 9200 To 13999 $AWARENESS = $DPI_AWARENESS_PER_MONITOR_AWARE Case @OSBuild > 13999 $AWARENESS = $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 EndSwitch Global $iDPI = _WinAPI_SetDPIAwareness($AWARENESS), $iDPI_def = 96, $g_iDPI_ratio1, $g_iDPI_ratio2, $g_iDPI_Prev = $iDPI, $bSorted = 0 $g_iDPI_ratio1 = $iDPI / $iDPI_def $g_iDPI_ratio2 = $g_iDPI_ratio1 ^ - 1 #EndRegion #Region IUIAutomation MS framework Global Const $TreeScope_Children = 2, $UIA_ControlTypePropertyId = 30003, $UIA_NamePropertyId = 30005, $UIA_ButtonControlTypeId = 50000 Global Const $sCLSID_CUIAutomation = "{FF48DBA4-60EF-4201-AA87-54103EEF594E}" Global Const $sIID_IUIAutomationElement = "{D22108AA-8AC5-49A5-837B-37BBB3D7591E}" Global $dtagIUIAutomationElement = "SetFocus hresult();" & "GetRuntimeId hresult(ptr*);" & "FindFirst hresult(long;ptr;ptr*);" & "FindAll hresult(long;ptr;ptr*);" & "FindFirstBuildCache hresult(long;ptr;ptr;ptr*);" & "FindAllBuildCache hresult(long;ptr;ptr;ptr*);" & "BuildUpdatedCache hresult(ptr;ptr*);" & "GetCurrentPropertyValue hresult(int;variant*);" & "GetCurrentPropertyValueEx hresult(int;long;variant*);" & "GetCachedPropertyValue hresult(int;variant*);" & "GetCachedPropertyValueEx hresult(int;long;variant*);" & "GetCurrentPatternAs hresult(int;none;none*);" & "GetCachedPatternAs hresult(int;none;none*);" & "GetCurrentPattern hresult(int;ptr*);" & "GetCachedPattern hresult(int;ptr*);" & "GetCachedParent hresult(ptr*);" & "GetCachedChildren hresult(ptr*);" & "CurrentProcessId hresult(int*);" & "CurrentControlType hresult(int*);" & "CurrentLocalizedControlType hresult(bstr*);" & "CurrentName hresult(bstr*);" & "CurrentAcceleratorKey hresult(bstr*);" & "CurrentAccessKey hresult(bstr*);" & "CurrentHasKeyboardFocus hresult(long*);" & "CurrentIsKeyboardFocusable hresult(long*);" & "CurrentIsEnabled hresult(long*);" & "CurrentAutomationId hresult(bstr*);" & "CurrentClassName hresult(bstr*);" & "CurrentHelpText hresult(bstr*);" & "CurrentCulture hresult(int*);" & "CurrentIsControlElement hresult(long*);" & "CurrentIsContentElement hresult(long*);" & "CurrentIsPassword hresult(long*);" & "CurrentNativeWindowHandle hresult(hwnd*);" & "CurrentItemType hresult(bstr*);" & "CurrentIsOffscreen hresult(long*);" & "CurrentOrientation hresult(long*);" & "CurrentFrameworkId hresult(bstr*);" & "CurrentIsRequiredForForm hresult(long*);" & "CurrentItemStatus hresult(bstr*);" & "CurrentBoundingRectangle hresult(struct*);" & "CurrentLabeledBy hresult(ptr*);" & "CurrentAriaRole hresult(bstr*);" & "CurrentAriaProperties hresult(bstr*);" & "CurrentIsDataValidForForm hresult(long*);" & "CurrentControllerFor hresult(ptr*);" & "CurrentDescribedBy hresult(ptr*);" & "CurrentFlowsTo hresult(ptr*);" & "CurrentProviderDescription hresult(bstr*);" & "CachedProcessId hresult(int*);" & "CachedControlType hresult(int*);" & "CachedLocalizedControlType hresult(bstr*);" & "CachedName hresult(bstr*);" & "CachedAcceleratorKey hresult(bstr*);" & "CachedAccessKey hresult(bstr*);" & "CachedHasKeyboardFocus hresult(long*);" & "CachedIsKeyboardFocusable hresult(long*);" & "CachedIsEnabled hresult(long*);" & "CachedAutomationId hresult(bstr*);" & "CachedClassName hresult(bstr*);" & "CachedHelpText hresult(bstr*);" & "CachedCulture hresult(int*);" & "CachedIsControlElement hresult(long*);" & "CachedIsContentElement hresult(long*);" & "CachedIsPassword hresult(long*);" & "CachedNativeWindowHandle hresult(hwnd*);" & "CachedItemType hresult(bstr*);" & "CachedIsOffscreen hresult(long*);" & "CachedOrientation hresult(long*);" & "CachedFrameworkId hresult(bstr*);" & "CachedIsRequiredForForm hresult(long*);" & "CachedItemStatus hresult(bstr*);" & "CachedBoundingRectangle hresult(struct*);" & "CachedLabeledBy hresult(ptr*);" & "CachedAriaRole hresult(bstr*);" & "CachedAriaProperties hresult(bstr*);" & "CachedIsDataValidForForm hresult(long*);" & "CachedControllerFor hresult(ptr*);" & "CachedDescribedBy hresult(ptr*);" & "CachedFlowsTo hresult(ptr*);" & "CachedProviderDescription hresult(bstr*);" & "GetClickablePoint hresult(struct*;long*);" Global Const $sIID_IUIAutomationElementArray = "{14314595-B4BC-4055-95F2-58F2E42C9855}" Global $dtagIUIAutomationElementArray = "Length hresult(int*);" & "GetElement hresult(int;ptr*);" Global Const $sIID_IUIAutomationPropertyCondition = "{99EBF2CB-5578-4267-9AD4-AFD6EA77E94B}" Global $dtagIUIAutomationPropertyCondition = "propertyId hresult(int*);" & "PropertyValue hresult(variant*);" & "PropertyConditionFlags hresult(long*);" Global Const $sIID_IUIAutomation = "{30CBE57D-D9D0-452A-AB13-7AC5AC4825EE}" Global $dtagIUIAutomation = "CompareElements hresult(ptr;ptr;long*);" & "CompareRuntimeIds hresult(ptr;ptr;long*);" & "GetRootElement hresult(ptr*);" & "ElementFromHandle hresult(hwnd;ptr*);" & "ElementFromPoint hresult(struct;ptr*);" & "GetFocusedElement hresult(ptr*);" & "GetRootElementBuildCache hresult(ptr;ptr*);" & "ElementFromHandleBuildCache hresult(hwnd;ptr;ptr*);" & "ElementFromPointBuildCache hresult(struct;ptr;ptr*);" & "GetFocusedElementBuildCache hresult(ptr;ptr*);" & "CreateTreeWalker hresult(ptr;ptr*);" & "ControlViewWalker hresult(ptr*);" & "ContentViewWalker hresult(ptr*);" & "RawViewWalker hresult(ptr*);" & "RawViewCondition hresult(ptr*);" & "ControlViewCondition hresult(ptr*);" & "ContentViewCondition hresult(ptr*);" & "CreateCacheRequest hresult(ptr*);" & "CreateTrueCondition hresult(ptr*);" & "CreateFalseCondition hresult(ptr*);" & "CreatePropertyCondition hresult(int;variant;ptr*);" & "CreatePropertyConditionEx hresult(int;variant;long;ptr*);" & "CreateAndCondition hresult(ptr;ptr;ptr*);" & "CreateAndConditionFromArray hresult(ptr;ptr*);" & "CreateAndConditionFromNativeArray hresult(ptr;int;ptr*);" & "CreateOrCondition hresult(ptr;ptr;ptr*);" & "CreateOrConditionFromArray hresult(ptr;ptr*);" & "CreateOrConditionFromNativeArray hresult(ptr;int;ptr*);" & "CreateNotCondition hresult(ptr;ptr*);" & "AddAutomationEventHandler hresult(int;ptr;long;ptr;ptr);" & "RemoveAutomationEventHandler hresult(int;ptr;ptr);" & "AddPropertyChangedEventHandlerNativeArray hresult(ptr;long;ptr;ptr;struct*;int);" & "AddPropertyChangedEventHandler hresult(ptr;long;ptr;ptr;ptr);" & "RemovePropertyChangedEventHandler hresult(ptr;ptr);" & "AddStructureChangedEventHandler hresult(ptr;long;ptr;ptr);" & "RemoveStructureChangedEventHandler hresult(ptr;ptr);" & "AddFocusChangedEventHandler hresult(ptr;ptr);" & "RemoveFocusChangedEventHandler hresult(ptr);" & "RemoveAllEventHandlers hresult();" & "IntNativeArrayToSafeArray hresult(int;int;ptr*);" & "IntSafeArrayToNativeArray hresult(ptr;int*;int*);" & "RectToVariant hresult(struct;variant*);" & "VariantToRect hresult(variant;struct*);" & "SafeArrayToRectNativeArray hresult(ptr;struct*;int*);" & "CreateProxyFactoryEntry hresult(ptr;ptr*);" & "ProxyFactoryMapping hresult(ptr*);" & "GetPropertyProgrammaticName hresult(int;bstr*);" & "GetPatternProgrammaticName hresult(int;bstr*);" & "PollForPotentialSupportedPatterns hresult(ptr;ptr*;ptr*);" & "PollForPotentialSupportedProperties hresult(ptr;ptr*;ptr*);" & "CheckNotSupported hresult(variant;long*);" & "ReservedNotSupportedValue hresult(ptr*);" & "ReservedMixedAttributeValue hresult(ptr*);" & "ElementFromIAccessible hresult(idispatch;int;ptr*);" & "ElementFromIAccessibleBuildCache hresult(iaccessible;int;ptr;ptr*);" #EndRegion IUIAutomation MS framework #Region TichySID Global Const $tagIMAGE_DOS_HEADER = 'WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhdr;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WORD e_sp;WORD e_csum;WORD e_ip;WORD e_cs;WORD e_lfarlc;WORD e_ovno;WORD e_res[4];WORD e_oemid;WORD e_oeminfo;WORD e_res2[10];LONG e_lfanew;' Global Const $tagIMAGE_FILE_HEADER = 'WORD Machine;WORD NumberOfSections;DWORD TimeDateStamp;DWORD PointerToSymbolTable;DWORD NumberOfSymbols;WORD SizeOfOptionalHeader;WORD Characteristics;' Global $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;DWORD BaseOfData;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' If @AutoItX64 Then $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;' Global Const $tagIMAGE_NT_HEADER = 'DWORD Signature;' & $tagIMAGE_FILE_HEADER & $tagIMAGE_OPTIONAL_HEADER Global Const $tagIMAGE_SECTION_HEADER = 'CHAR Name[8];DWORD VirtualSize;DWORD VirtualAddress;DWORD SizeOfRawData;DWORD PointerToRawData;DWORD PointerToRelocations;DWORD PointerToLinenumbers;WORD NumberOfRelocations;WORD NumberOfLinenumbers;DWORD Characteristics;' Global Const $tagIMAGE_DATA_DIRECTORY = 'DWORD VirtualAddress;DWORD Size;' Global Const $tagIMAGE_BASE_RELOCATION = 'DWORD VirtualAddress;DWORD SizeOfBlock;' Global Const $tagIMAGE_IMPORT_DESCRIPTOR = 'DWORD OriginalFirstThunk;DWORD TimeDateStamp;DWORD ForwarderChain;DWORD Name;DWORD FirstThunk;' Global Const $tagIMAGE_IMPORT_BY_NAME = 'WORD Hint;char Name[1];' Global Const $tagIMAGE_EXPORT_DIRECTORY = 'DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name;DWORD Base;DWORD NumberOfFunctions;DWORD NumberOfNames;DWORD AddressOfFunctions;DWORD AddressOfNames;DWORD AddressOfNameOrdinals;' Global $_KERNEL32DLL = DllOpen('kernel32.dll') Global $_MFHookPtr, $_MFHookBak, $_MFHookApi = 'LocalCompact' Global Const $tagModule = 'PTR ExportList;PTR CodeBase;PTR ImportList;PTR DllEntry;DWORD Initialized;' Global Const $SID_MEMORY = 1 Global Const $SID_NON_DEFAULT = 2 Global $hTitchysidDll, $iSubsongCount = 0 Global $binSID = _SID_Tune() #EndRegion Global $aTaskbar = WinGetPos("[CLASS:Shell_TrayWnd;INSTANCE:1]", "") Global $i, $aShortcutDetails, $hIcon, $aFileList = ReadDesktopIcons(), $aFileIcons[$aFileList[0] + 1] If @error Then Dim $aFileList[1] $aFileList[0] = 0 MsgBox($MB_ICONWARNING, "Warning", "No desktop icons!", 15) EndIf Global $iLen = 0, $l For $i = 1 To $aFileList[0] $l = StringLen(StringRegExpReplace($aFileList[$i], ".*\\(.*)\..+", "$1")) $iLen = $l > $iLen ? $l : $iLen Next Global $iW = 0, $iH = 0, $iW_def, $iH_def, $iLVBgColor = 0xFFFFFF, $iLVTxtColor = 0x000000, $iColumnWidth, $hHBITMAP, $fIconSize = 16 * $g_iDPI_ratio1, $fLVFontSize = 15.5 * $g_iDPI_ratio1 Global Const $hGUI = GUICreate("Toolbar Desktop by UEZ", $iW, $iH, $aTaskbar[1] ? -1 : -10000, $aTaskbar[1] ? -10000 : -1, BitOR($WS_MINIMIZEBOX, $WS_SIZEBOX), $WS_EX_TOPMOST) GUISetFont(8.5, $FW_NORMAL, $GUI_FONTNORMAL, "Arial", $hGUI, $CLEARTYPE_QUALITY) Global $hLV_Font = _WinAPI_CreateFont($fLVFontSize, 0, 0, 0, $FW_MEDIUM, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $CLEARTYPE_QUALITY, 0, "Segoe UI") Global $hLV = _GUICtrlListView_Create($hGUI, "", 0, 0, 0, 0, BitOR($LVS_SINGLESEL, $LVS_NOCOLUMNHEADER, $LVS_LIST)), $iLV = _WinAPI_GetDlgCtrlID($hLV) GUICtrlSendMsg($hLV, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_ONECLICKACTIVATE, $LVS_EX_TRACKSELECT) _GUICtrlListView_SetExtendedListViewStyle($hLV, $LVS_EX_DOUBLEBUFFER) _GUICtrlListView_InsertColumn($hLV, 0, "Desktop App") Global Const $ILC_ORIGINALSIZE = 0x00010000, $ILC_HIGHQUALITYSCALE = 0x00020000 Global $hImageList = DllCall("comctl32.dll", "handle", "ImageList_Create", "int", $fIconSize, "int", $fIconSize, "uint", BitOR($ILC_COLOR32, $ILC_ORIGINALSIZE, $ILC_HIGHQUALITYSCALE), "int", $aFileList[0], "int", $aFileList[0])[0] _GUICtrlListView_SetBkColor($hLV, $iLVBgColor) ConsoleWrite("Added " & $aFileList[0] & " items to the list" & @CRLF) For $i = 1 To $aFileList[0] $hIcon = _WinAPI_ShellExtractAssociatedIcon($aFileList[$i], True) If $hIcon Then $aFileIcons[$i] = $hIcon $hHBITMAP = _WinAPI_Create32BitHBITMAP($hIcon) _GUIImageList_Add($hImageList, $hHBITMAP) _WinAPI_DeleteObject($hHBITMAP) Else _GUIImageList_Add($hImageList, _GUICtrlListView_CreateSolidBitMap($hLV, 0xFFFFFF, $fIconSize, $fIconSize)) EndIf Next _GUICtrlListView_SetImageList($hLV, $hImageList, 1) Global $aIconAssignment[UBound($aFileList) - 1][3] For $i = 1 To $aFileList[0] If StringInStr(FileGetAttrib($aFileList[$i]), "D") Then If StringRegExp($aFileList[$i], ".+\.\{(.*)\}") Then _GUICtrlListView_AddItem($hLV, StringRegExpReplace($aFileList[$i], ".*\\(.*)\..+", "$1"), $i - 1, $i - 1) Else _GUICtrlListView_AddItem($hLV, StringRegExpReplace($aFileList[$i], ".+\\(.+)", "$1"), $i - 1, $i - 1) EndIf Else _GUICtrlListView_AddItem($hLV, StringRegExpReplace($aFileList[$i], ".*\\(.*)\..+", "$1"), $i - 1, $i - 1) EndIf $aIconAssignment[$i - 1][0] = $i - 1 $aIconAssignment[$i - 1][1] = $aFileList[$i] $aIconAssignment[$i - 1][2] = $aFileIcons[$i] Next Global $aPos = WinGetPos($hGUI), $aWinPos Global $aParts[1] = [1], $hStatusBar $hStatusBar = _GUICtrlStatusBar_Create($hGUI, $aParts) Global Const $iStatusBar = _WinAPI_GetDlgCtrlID($hStatusBar), $iH_SB = _GUICtrlStatusBar_GetHeight($hStatusBar) GUIRegisterMsg($WM_SIZE, "WM_SIZE") If $iW < @DesktopWidth / 2 And BitAND(_WinAPI_GetWindowLong($hLV, $GWL_STYLE), $WS_HSCROLL) = $WS_HSCROLL Then While BitAND(_WinAPI_GetWindowLong($hLV, $GWL_STYLE), $WS_HSCROLL) $iW += 2 $iH += 1 WinMove($hGUI, "", $aPos[0], $aPos[1], $iW * $g_iDPI_ratio1, ($iH + $iH_SB) * $g_iDPI_ratio1) If $iW > @DesktopWidth / 2 Then ExitLoop WEnd EndIf If $iW = 0 Or $iH = 0 Then $iW = 200 $iH = $iW * 8 / 16 WinMove($hGUI, "", $aPos[0], $aPos[1], $iW * $g_iDPI_ratio1, ($iH + $iH_SB + 1) * $g_iDPI_ratio1) _GUICtrlListView_SetColumnWidth($hLV, 0, $iW) EndIf Global $fAdjust = $g_iDPI_ratio1 > 1 ? 1 + $g_iDPI_ratio1 / 10 : 1 $iW_def = $iW * $fAdjust $iH_def = ($iH * $fAdjust + $iH_SB) ConsoleWrite("GUI size: " & ($iW) & " x " & ($iH) & @CRLF) Global $iLV_cw = _GUICtrlListView_GetColumnWidth($hLV, 0) _GUICtrlStatusBar_SetText($hStatusBar, $aFileList[0] & " icons added to the list") Global Const $hMenu_Tray = TrayItemGetHandle(0) Global Const $iTrayRestart = TrayCreateItem("Restart") Global Const $iTrayAutostart = TrayCreateItem("Autostart") Global Const $iTrayAbout = TrayCreateItem("About") TrayCreateItem("") Global Const $iTrayExit = TrayCreateItem("Exit") If RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "Toolbar Desktop") = '"' & @ScriptDir & '\Toolbar Desktop.exe"' Then TrayItemSetState($iTrayAutostart, $TRAY_CHECKED) Global $hTmp, $hBMP_Restart, $hBMP_About, $hBMP_Exit, $hBMP_Check, $hBMP_Rect If $bDarkMode Then $hTmp = _GDIPlus_BitmapCreateFromMemory(_Restart_Pic()) $hBMP_Restart = _GDIPlus_CreateNegativeImage($hTmp, True) _GDIPlus_ImageDispose($hTmp) $hTmp = _GDIPlus_BitmapCreateFromMemory(_Exit_Pic()) $hBMP_Exit = _GDIPlus_CreateNegativeImage($hTmp, True) _GDIPlus_ImageDispose($hTmp) $hTmp = _GDIPlus_BitmapCreateFromMemory(_Check_Pic()) $hBMP_Check = _GDIPlus_CreateNegativeImage($hTmp, True) _GDIPlus_ImageDispose($hTmp) $hTmp = _GDIPlus_BitmapCreateFromMemory(_Rect_Pic()) $hBMP_Rect = _GDIPlus_CreateNegativeImage($hTmp, True) _GDIPlus_ImageDispose($hTmp) Else $hBMP_Restart = _GDIPlus_BitmapCreateFromMemory(_Restart_Pic(), True) $hBMP_About = _GDIPlus_BitmapCreateFromMemory(_About_Pic(), True) $hBMP_Exit = _GDIPlus_BitmapCreateFromMemory(_Exit_Pic(), True) $hBMP_Check = _GDIPlus_BitmapCreateFromMemory(_Check_Pic(), True) $hBMP_Rect = _GDIPlus_BitmapCreateFromMemory(_Rect_Pic(), True) EndIf _GUICtrlMenu_SetItemBitmaps($hMenu_Tray, 0, $hBMP_Restart, $hBMP_Restart) _GUICtrlMenu_SetItemBitmaps($hMenu_Tray, 1, $hBMP_Check, $hBMP_Rect) _GUICtrlMenu_SetItemBitmaps($hMenu_Tray, 2, $hBMP_About, $hBMP_About) _GUICtrlMenu_SetItemBitmaps($hMenu_Tray, 4, $hBMP_Exit, $hBMP_Exit) Global $sRunAsAdmin Global Enum $idRunAsAdmin = 2000, $idAbout, $idSort, $idOpenFL Global Const $hQMenu_LV = _GUICtrlMenu_CreatePopup() _GUICtrlMenu_InsertMenuItem($hQMenu_LV, 0, "Run app as Administrator", $idRunAsAdmin) _GUICtrlMenu_InsertMenuItem($hQMenu_LV, 1, "") _GUICtrlMenu_InsertMenuItem($hQMenu_LV, 2, "Sort List", $idSort) _GUICtrlMenu_InsertMenuItem($hQMenu_LV, 3, "") _GUICtrlMenu_InsertMenuItem($hQMenu_LV, 4, "Open File Location", $idOpenFL) _GUICtrlMenu_SetMenu($hGUI, $hQMenu_LV) Global $hBMP_Shield = _GUICtrlMenu_CreateBitmap(@SystemDir & "\imageres.dll", 73) _GUICtrlMenu_SetItemBmp($hQMenu_LV, 0, $hBMP_Shield) $hTmp = _GDIPlus_BitmapCreateFromMemory(_Sort()) Global Const $hBMP_Sort = _GDIPlus_Convert2HBitmap($hTmp, $COLOR_MENU) _GDIPlus_BitmapDispose($hTmp) _GUICtrlMenu_SetItemBmp($hQMenu_LV, 2, $hBMP_Sort) $hTmp = _GDIPlus_BitmapCreateFromMemory(_OpenFolder()) Global Const $hBMP_OpenFolder = _GDIPlus_Convert2HBitmap($hTmp, $COLOR_MENU) _GDIPlus_BitmapDispose($hTmp) _GUICtrlMenu_SetItemBmp($hQMenu_LV, 4, $hBMP_OpenFolder) Global Const $hMenu_Sys = _GUICtrlMenu_GetSystemMenu($hGUI) _GUICtrlMenu_AppendMenu($hMenu_Sys, $MF_SEPARATOR, 0, 0) _GUICtrlMenu_AppendMenu($hMenu_Sys, $MF_STRING, $idAbout, "About") _GUICtrlMenu_SetItemBmp($hMenu_Sys, 8, $hBMP_About) _WinAPI_DwmSetWindowAttribute($hGUI, $DWMWA_TRANSITIONS_FORCEDISABLED, True) ;disable window animation GUISetState(@SW_SHOWMINIMIZED, $hGUI) If $bDarkMode Then DarkMode($hGUI) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUIRegisterMsg($WM_EXITSIZEMOVE, "WM_EXITSIZEMOVE") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND") If @OSBuild > 9599 Then GUIRegisterMsg($WM_DPICHANGED, "WM_DPICHANGED") ;requires Win 8.1+ / Server 2012 R2+ Global $bCheck, $px, $py, $tx, $hTaskbar, $iMonitorX, $iMonitorY, $iMonitorW, $iMonitorH, $iTbW, $iTbH, $bManualResized = False Global Const $iWinTitleSize = _WinAPI_GetSystemMetrics($SM_CYSIZE), $iDummy_About = GUICtrlCreateDummy(), $iDummy_Error = GUICtrlCreateDummy() Global Const $iListViewCallback = DllCallbackRegister("LVKeyCallback", "long", "int;wparam;lparam"), _ $hHook_Key = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($iListViewCallback), _WinAPI_GetModuleHandle(0)) Global $oMyError = ObjEvent("AutoIt.Error", "ErrFunc") Global $iFPS = 0, $iShowFPS = 0, $bExit = False, $oShell = ObjCreate("WScript.Shell") Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _Exit() Case $iDummy_About About() Case $iDummy_Error MsgBox(BitOR($MB_TOPMOST, $MB_ICONWARNING), "Warning", "No desktop icons were added to the list!" & @CRLF & "Add at least one icon to the desktop which can be shell executed!", 15, $hGUI) EndSwitch Switch TrayGetMsg() Case $iTrayRestart _ScriptRestart() ;restart script to re-read desktop icons Case $iTrayAutostart $bCheck = BitAND($TRAY_CHECKED, TrayItemGetState($iTrayAutostart)) If $bCheck Then TrayItemSetState($iTrayAutostart, $TRAY_UNCHECKED) AutoStartReg(False) Else TrayItemSetState($iTrayAutostart, $TRAY_CHECKED) AutoStartReg(True) EndIf Case $iTrayAbout About() Case $iTrayExit _Exit() EndSwitch Until False Func PosGUI() ;~ $aWinPos = _WinAPI_FindMyIconPosInTaskbar("Toolbar Desktop.exe - a simple toolbar menu app for Windows 11 to access desktop icons faster") $aWinPos = _WinAPI_FindMyIconPosInTaskbar("Toolbar Desktop.exe") Local $tmpW = $iW_def, $tmpH = $iH_def If $bManualResized Then Local $aWin = WinGetPos($hGUI) $iW_def = $aWin[2] * $g_iDPI_ratio2 $iH_def = $aWin[3] * $g_iDPI_ratio2 EndIf If @error Or Not UBound($aWinPos) Then ConsoleWrite("Error getting icon pos in taskbar - " & @error & @CRLF) $px = MouseGetPos(0) - $iW_def * $g_iDPI_ratio1 / 2 $py = MouseGetPos(1) - $iH_def * $g_iDPI_ratio1 / 2 $px = $px < $iMonitorX ? $iMonitorX : $px $px = $px + $iW_def * $g_iDPI_ratio1 > $iMonitorX + $iMonitorW ? $iMonitorX + $iMonitorW - $iW_def * $g_iDPI_ratio1 : $px $py = $py < $iMonitorY ? $iMonitorY : $py $py = $py + $iH_def * $g_iDPI_ratio1 > $iMonitorY + $iMonitorH ? $iMonitorX + $iMonitorH - $iH_def * $g_iDPI_ratio1 : $py WinMove($hGUI, "", $px, $py, $iW_def * $g_iDPI_ratio1, $iH_def * $g_iDPI_ratio1) Else If $aWinPos[0] >= $iMonitorX + $iMonitorW And $aWinPos[1] < $iMonitorY + $iMonitorH Then ;Taskbar on the right side ConsoleWrite("Taskbar right" & @CRLF) $px = $aWinPos[0] - $iW_def * $g_iDPI_ratio1 - 1 $py = $aWinPos[1] + $aWinPos[3] - $iH_def * $g_iDPI_ratio1 / 2 $py = $py < $iMonitorY ? $iMonitorY : $py $py = $py + $iH_def * $g_iDPI_ratio1 > $iMonitorY + $iMonitorH ? $py + $iH_def * $g_iDPI_ratio1 - ($py + $iH_def * $g_iDPI_ratio1 - $iMonitorY + $iMonitorH) : $py ElseIf $aWinPos[0] < $iMonitorX And $aWinPos[1] < $iMonitorY + $iMonitorH Then ;Taskbar on the left side ConsoleWrite("Taskbar left" & @CRLF) $px = $aWinPos[0] + $aWinPos[2] + 1 $py = $aWinPos[1] + $aWinPos[3] - $iH_def * $g_iDPI_ratio1 / 2 $py = $py < $iMonitorY ? $iMonitorY : $py $py = $py + $iH_def * $g_iDPI_ratio1 > $iMonitorY + $iMonitorH ? $py + $iH_def * $g_iDPI_ratio1 - ($py + $iH_def * $g_iDPI_ratio1 - $iMonitorY + $iMonitorH) : $py ElseIf $aWinPos[1] < $iMonitorY And $aWinPos[0] > $iMonitorX Then ;Taskbar at top ConsoleWrite("Taskbar top" & @CRLF) $px = $aWinPos[0] - ($iW_def * $g_iDPI_ratio1 - $aWinPos[2]) / 2 $px = $px < $iMonitorX ? $iMonitorX : $px $tx = $iMonitorX + $iMonitorW - $px - $iW_def * $g_iDPI_ratio1 $py = $aWinPos[1] + $aWinPos[3] + 1 Else ;Taskbar at bottom ConsoleWrite("Taskbar bottom" & @CRLF) $px = $aWinPos[0] - ($iW_def * $g_iDPI_ratio1 - $aWinPos[2]) / 2 $px = $px < $iMonitorX ? $iMonitorX : $px $tx = $iMonitorX + $iMonitorW - $px - $iW_def * $g_iDPI_ratio1 If $tx < 0 Then $px += $tx $py = $aWinPos[1] - $iH_def * $g_iDPI_ratio1 - 1 EndIf WinMove($hGUI, "", $px, $py, $iW_def * $g_iDPI_ratio1, $iH_def * $g_iDPI_ratio1) EndIf If $bManualResized Then $iW_def = $tmpW $iH_def = $tmpH EndIf EndFunc ;==>PosGUI Func AdjustLVIcons() _GUICtrlListView_BeginUpdate($hLV) Local $i If $hLV_Font Then _WinAPI_DeleteObject($hLV_Font) $hLV_Font = _GUICtrlListView_SetItemHeightByFont($hLV, $fIconSize, $fLVFontSize) _GUIImageList_SetIconSize($hImageList, $fIconSize, $fIconSize) If $bSorted Then _ArraySort($aIconAssignment, 0, 0, 0, 0) For $i = 0 To UBound($aIconAssignment) - 1 _GUIImageList_ReplaceIcon($hImageList, -1, $aIconAssignment[$i][2]) Next _GUICtrlListView_SetImageList($hLV, $hImageList, 1) ;~ _GUICtrlListView_SetColumnWidth($hLV, 0, $LVSCW_AUTOSIZE) _GUICtrlListView_SetColumnWidth($hLV, 0, $iW_def * $g_iDPI_ratio1 / 3.5) _GUICtrlListView_EndUpdate($hLV) EndFunc ;==>AdjustLVIcons Func Max($a, $b) Return $a > $b ? $a : $b EndFunc ;==>Max Func Min($a, $b) Return $a < $b ? $a : $b EndFunc ;==>Min Func AutoStartReg($bSet) Switch $bSet Case True If RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "Toolbar Desktop", "REG_SZ", '"' & @ScriptDir & '\Toolbar Desktop.exe"') Then MsgBox($MB_ICONINFORMATION, "Information", "Autostart entry properly set to the registry", 10, $hGUI) Else MsgBox($MB_ICONERROR, "ERROR", "Unable to set autostart entry to the registry!", 30, $hGUI) EndIf Case Else If RegDelete("HKCU\Software\Microsoft\Windows\CurrentVersion\Run", "Toolbar Desktop") Then MsgBox($MB_ICONINFORMATION, "Information", "Autostart entry properly removed from the registry", 10, $hGUI) Else MsgBox($MB_ICONERROR, "ERROR", "Unable to remove autostart entry from the registry!", 30, $hGUI) EndIf EndSwitch EndFunc ;==>AutoStartReg Func About() AutoItSetOption("GUIOnEventMode", 1) If @AutoItX64 = 0 Then _SIDStartup() _SIDOpen($binSID) EndIf $bExit = False TraySetState($TRAY_ICONSTATE_HIDE) GUISetState(@SW_MINIMIZE, $hGUI) GUISetState(@SW_HIDE, $hGUI) GDIPlus_About() If @AutoItX64 = 0 Then _SIDStop() _SIDClose() _SIDShutdown() EndIf TraySetState( $TRAY_ICONSTATE_SHOW) GUISetState(@SW_SHOWMINIMIZED, $hGUI) AutoItSetOption("GUIOnEventMode", 0) EndFunc ;==>About Func GDIPlus_About() Local Const $iW = 800, $iH = Int($iW * 9 / 16), $iWh = $iW / 2, $iHh = $iH / 2 Local Const $_t = 1 / 60 Local Const $hGUI_About = GUICreate($sTitle, $iW, $iH, -1, -1, -1, BitOR($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW)) GUISetState(@SW_SHOW, $hGUI_About) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI_About) 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) ;~ _GDIPlus_GraphicsSetTextRenderingHint(_GDIPlus_GraphicsSetTextRenderingHint, $GDIP_TEXTRENDERINGHINTANTIALIASGRIDFIT) Local Const $fTxtHeight = 3.0 * $iH Local $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xF0303030), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16), _ $hBrush_anim = _GDIPlus_BrushCreateSolid(0xF0C0C0C0), _ $hPen_anim = _GDIPlus_PenCreate(0xF0101010, 1), _ $tRectF_col = _GDIPlus_RectFCreate(0, 0, $iW, $iHh), _ $hBrush_txt = _GDIPlus_LineBrushCreateFromRectWithAngle($tRectF_col, 0xC07D1B7E, 0xCFFCDFFF, 45, True, 1), _ $tRectF_txt = _GDIPlus_RectFCreate(0, 0, $iW, $fTxtHeight), _ $hPen_txt = _GDIPlus_PenCreate(0x80000000, 2), _ $hFormat_txt = _GDIPlus_StringFormatCreate(), _ $hFamily_txt = _GDIPlus_FontFamilyCreate("Impact"), _ $hPath_txt = _GDIPlus_PathCreate(), _ $sTxt = $sTitle & @CRLF & _ $sVer & @CRLF & @CRLF & _ "Coded by" & @CRLF & @CRLF & _ "UEZ" & @CRLF & @CRLF & @CRLF & _ "Thanks to:" & @CRLF & _ "argumentum" & @CRLF & _ "BugFix" & @CRLF & _ "InnI" & @CRLF & _ "junkew" & @CRLF & _ "KaFu" & @CRLF & _ "Kanashius" & @CRLF & _ "Soren" & @CRLF & _ "Mombas" & @CRLF & _ "Yashied" & @CRLF & _ "wakillon" & @CRLF & _ "Ward" & @CRLF & @CRLF & @CRLF & _ "Greetings to all Autoit'ers" & @CRLF & _ "around the world." _GDIPlus_StringFormatSetAlign($hFormat_txt, 1) _GDIPlus_StringFormatSetLineAlign($hFormat_txt, 1) Local $p, $q, $z, $x, $s, $i, $t = 0, $f1, $px, $py $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About", $hGUI_About) AdlibRegister("CalcFPS", 1000) $tRectF_txt.y = $iH + $iH / 10 Local $tFFTData = DllStructCreate("float data[1024]"), $pFFTData = DllStructGetPtr($tFFTData), $sum Do DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", $iW, "float", $iH) ;erase canvas background DllCall($__g_hGDIPDll, "int", "GdipAddPathString", "handle", $hPath_txt, "wstr", $sTxt, "int", -1, "handle", $hFamily_txt, "int", 0, "float", $iH / 10, "struct*", $tRectF_txt, "handle", $hFormat_txt) ;~ _SIDGetFFTData($tFFTData) ;~ $sum = 0 ;~ For $i = 1 To 64 ;~ $sum += $tFFTData.data(($i)) * $tFFTData.data(($i)) ;~ Next ;~ $sum = 0x30 + Log(Sqrt($sum)) / Log(10) * 10 ;~ _GDIPlus_GraphicsClear($hCanvas, BitOR(0xFF000000, BitShift($sum, -16), BitShift($sum, -8), BitShift($sum, 0))) For $i = 0 To 1919 Step 15 $p = $i * Cos($t / 2) / 40 $q = $i / 628 $f1 = Sin($q) $z = 2.4 + Cos($p) * $f1 $x = Sin($p) * $f1 $s = 49 / $z / $z $f1 = 1 / $z $px = $iWh + $f1 * $x * $iWh $py = $iHh + Cos($q) * $iWh * $f1 DllCall($__g_hGDIPDll, "int", "GdipFillEllipse", "handle", $hCanvas, "handle", $hBrush_anim, "float", $px, "float", $py, "float", $s, "float", $s) ;~ DllCall($__g_hGDIPDll, "int", "GdipDrawEllipse", "handle", $hCanvas, "handle", $hPen_anim, "float", $px, "float", $py, "float", $s, "float", $s) Next DllCall($__g_hGDIPDll, "int", "GdipFillPath", "handle", $hCanvas, "handle", $hBrush_txt, "handle", $hPath_txt) DllCall($__g_hGDIPDll, "int", "GdipDrawPath", "handle", $hCanvas, "handle", $hPen_txt, "handle", $hPath_txt) DllCall($__g_hGDIPDll, "int", "GdipResetPath", "handle", $hPath_txt) $tRectF_txt.y -= 1 $tRectF_txt.y = ($tRectF_txt.y < -$iH / 10 - $fTxtHeight) ? ($iH + $iH / 10) : ($tRectF_txt.y) $t += $_t _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) $iFPS += 1 If $bExit Then ExitLoop Until Not Sleep(10) AdlibUnRegister("CalcFPS") ;release resources _GDIPlus_PathDispose($hPath_txt) _GDIPlus_PenDispose($hPen_txt) _GDIPlus_PenDispose($hPen_anim) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_FontFamilyDispose($hFamily_txt) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_StringFormatDispose($hFormat_txt) _GDIPlus_BrushDispose($hBrush_anim) _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_About, $hDC) GUIDelete($hGUI_About) EndFunc ;==>GDIPlus_About Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func ReadDesktopIcons() Local $aFileList1 = _FileListToArray(@DesktopDir, "*", $FLTA_FILESFOLDERS, True) Local $aFileList2 = _FileListToArray(@DesktopCommonDir, "*", $FLTA_FILESFOLDERS, True) If BitOR(IsArray($aFileList1), IsArray($aFileList2)) = 0 Then Return SetError(1, 0, 0) Local $i, $j, $aFileList[$aFileList1[0] + $aFileList2[0] + 1], $c = 1 For $i = 1 To $aFileList1[0] If StringRight($aFileList1[$i], 4) <> ".ini" Then $aFileList[$c] = $aFileList1[$i] $c += 1 EndIf Next For $j = 1 To $aFileList2[0] If StringRight($aFileList2[$j], 4) <> ".ini" Then $aFileList[$c] = $aFileList2[$j] $c += 1 EndIf Next $aFileList[0] = $c - 1 ReDim $aFileList[$c] Return $aFileList EndFunc ;==>ReadDesktopIcons Func _ScriptRestart($fExit = 1) ;thanks to Yashied Local $pid If Not $__Restart Then If @Compiled Then $pid = Run(@ScriptFullPath & " " & $CmdLineRaw, @ScriptDir, Default, 1) Else $pid = Run(@AutoItExe & ' "' & @ScriptFullPath & '" ' & $CmdLineRaw, @ScriptDir, Default, 1) EndIf If @error Then Return SetError(@error, 0, 0) EndIf StdinWrite($pid, @AutoItPID) EndIf $__Restart = 1 If $fExit Then Sleep(50) Exit EndIf Return 1 EndFunc ;==>_ScriptRestart Func _GUICtrlMenu_CreateBitmap($file, $iIndex = 0, $iX = 16, $iY = 16) ;thanks to Yashied If FileExists($file) Then Local $aRet, $hIcon, $hBitmap Local $hDC, $hBackDC, $hBackSv $aRet = DllCall("shell32", "long", "ExtractAssociatedIcon", "int", 0, "str", $file, "word*", $iIndex) If @error Then Return SetError(@error, @extended, 0) $hIcon = $aRet[0] $hDC = _WinAPI_GetDC(0) ;thanks to Yashied $hBackDC = _WinAPI_CreateCompatibleDC($hDC) $hBitmap = _WinAPI_CreateSolidBitmap(0, _WinAPI_GetSysColor($COLOR_MENU), $iX, $iY) $hBackSv = _WinAPI_SelectObject($hBackDC, $hBitmap) _WinAPI_DrawIconEx($hBackDC, 0, 0, $hIcon, $iX, $iY, 0, 0, 3) _WinAPI_DestroyIcon($hIcon) _WinAPI_SelectObject($hBackDC, $hBackSv) _WinAPI_ReleaseDC(0, $hDC) _WinAPI_DeleteDC($hBackDC) Return $hBitmap Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_GUICtrlMenu_CreateBitmap Func _GDIPlus_Convert2HBitmap($hBitmap, $iColor) ; removes alpha backround using system color and converts to gdi bitmap Local $iBgColor = _WinAPI_GetSysColor($iColor) $iBgColor = 0x10000 * BitAND($iBgColor, 0xFF) + BitAND($iBgColor, 0x00FF00) + BitShift($iBgColor, 16) Local $iWidth = _GDIPlus_ImageGetWidth($hBitmap), $iHeight = _GDIPlus_ImageGetHeight($hBitmap) Local $hBitmap_new = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight) ;$aResult[6] Local $hCtx_new = _GDIPlus_ImageGetGraphicsContext($hBitmap_new) _GDIPlus_GraphicsSetPixelOffsetMode($hCtx_new, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000 + $iBgColor) _GDIPlus_GraphicsFillRect($hCtx_new, 0, 0, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawImageRect($hCtx_new, $hBitmap, 0, 0, $iWidth, $iHeight) Local $hHBITMAP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_new) _GDIPlus_BrushDispose($hBrush) _GDIPlus_BitmapDispose($hBitmap_new) _GDIPlus_GraphicsDispose($hCtx_new) Return $hHBITMAP EndFunc ;==>_GDIPlus_Convert2HBitmap Func _GDIPlus_CreateNegativeImage($hImage, $bGDI = True) Local Const $aDim = _GDIPlus_ImageGetDimension($hImage) If @error Then Return 0 Local Const $hBmp = _GDIPlus_ImageClone($hImage) Local $tBitmapData = _GDIPlus_BitmapLockBits($hBmp, 0, 0, $aDim[0], $aDim[1], BitOR($GDIP_ILMWRITE, $GDIP_ILMREAD), $GDIP_PXF32ARGB) Local $iPixel, $iRowOffset, $iY, $iX Local $iScan0 = DllStructGetData($tBitmapData, "Scan0") Local $tPixel = DllStructCreate("int[" & $aDim[0] * $aDim[1] & "];", $iScan0) For $iY = 0 To $aDim[1] - 1 $iRowOffset = $iY * $aDim[0] + 1 For $iX = 0 To $aDim[0] - 1 $iPixel = DllStructGetData($tPixel, 1, $iRowOffset + $iX) DllStructSetData($tPixel, 1, BitXOR($iPixel, 0x00FFFFFF), $iRowOffset + $iX) Next Next _GDIPlus_BitmapUnlockBits($hBmp, $tBitmapData) If $bGDI Then Local Const $hBmpGDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp) _GDIPlus_ImageDispose($hBmp) Return $hBmpGDI EndIf Return $hBmp EndFunc Func _Exit() $binSID = 0 For $i = 1 To $aFileList[0] _WinAPI_DestroyIcon($aFileIcons[$i]) Next _WinAPI_UnhookWindowsHookEx($hHook_Key) DllCallbackFree($iListViewCallback) GUIRegisterMsg($WM_SIZE, "") GUIRegisterMsg($WM_EXITSIZEMOVE, "") GUIRegisterMsg($WM_NOTIFY, "") GUIRegisterMsg($WM_COMMAND, "") GUIRegisterMsg($WM_SYSCOMMAND, "") GUIRegisterMsg($WM_DPICHANGED, "") _WinAPI_DeleteObject($hLV_Font) _WinAPI_DeleteObject($hBMP_Shield) _WinAPI_DeleteObject($hBMP_Sort) _WinAPI_DeleteObject($hBMP_OpenFolder) _WinAPI_DeleteObject($hBMP_Restart) _WinAPI_DeleteObject($hBMP_Rect) _WinAPI_DeleteObject($hBMP_Check) _WinAPI_DeleteObject($hBMP_About) _WinAPI_DeleteObject($hBMP_Exit) _GUIImageList_Destroy($hImageList) GUIDelete($hGUI) _GDIPlus_Shutdown() DllClose($_KERNEL32DLL) Exit EndFunc ;==>_Exit Func _GUICtrlListView_SetItemHeightByFont(ByRef $hListView, $iHeight, $fFontSize) ; Get font of ListView control ; Copied from _GUICtrlGetFont example by KaFu ; See https://www.autoitscript.com/forum/index.php?showtopic=124526 Local $hDC = _WinAPI_GetDC($hListView), $hFont = _SendMessage($hListView, $WM_GETFONT) Local $tagLOGFONT2 = "long lfHeight;long lfWidth;long lfEscapement;long lfOrientation;long lfWeight;byte lfItalic;byte lfUnderline;byte lfStrikeOut;byte lfCharSet;byte lfOutPrecision;byte lfClipPrecision;byte lfQuality;byte lfPitchAndFamily;wchar lfFaceName[32]" Local $hObject = _WinAPI_SelectObject($hDC, $hFont), $lvLOGFONT = DllStructCreate($tagLOGFONT2) _WinAPI_GetObject($hFont, DllStructGetSize($lvLOGFONT), DllStructGetPtr($lvLOGFONT)) $lvLOGFONT.lfQuality = $CLEARTYPE_QUALITY $lvLOGFONT.lfOutPrecision = $OUT_DEFAULT_PRECIS $lvLOGFONT.lfWeight = $FW_MEDIUM $lvLOGFONT.lfHeight = $fFontSize Local $hLVfont = _WinAPI_CreateFontIndirect($lvLOGFONT) ; Original ListView font _WinAPI_SelectObject($hDC, $hObject) _WinAPI_ReleaseDC($hListView, $hDC) _WinAPI_DeleteObject($hFont) ; Set height of ListView items by applying text font with suitable height $hFont = _WinAPI_CreateFont($iHeight, 0, 0, 0, $FW_MEDIUM, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $CLEARTYPE_QUALITY, 0, "Segoe UI") _WinAPI_SetFont($hListView, $hFont) _WinAPI_DeleteObject($hFont) ; Restore font of Header control Local $hHeader = _GUICtrlListView_GetHeader($hListView) If $hHeader Then _WinAPI_SetFont($hHeader, $hLVfont) ; Return original ListView font Return $hLVfont EndFunc ;==>_GUICtrlListView_SetItemHeightByFont Func WM_DPICHANGED($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam Local $iDPI = _WinAPI_LoWord($wParam) ConsoleWrite("DPI change triggered! DPI: " & $iDPI & @CRLF) $g_iDPI_ratio1 = $iDPI / $iDPI_def $g_iDPI_ratio2 = $g_iDPI_ratio1 ^ - 1 $fIconSize = 16 * $g_iDPI_ratio1 $fLVFontSize = 15.5 * $g_iDPI_ratio1 AdjustLVIcons() PosGUI() Return 1 EndFunc ;==>WM_DPICHANGED Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam), $tInfo Local Static $iHot = -1, $iHotPrev = -1 Switch HWnd($tNMHDR.hWndFrom) Case $hLV Switch $tNMHDR.Code Case $NM_CLICK ToolTip("") $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) If $tInfo.Index > -1 And $tInfo.Index < UBound($aIconAssignment) Then ConsoleWrite("Shell executing " & $aIconAssignment[$tInfo.Index][1] & @CRLF) _GUICtrlListView_SetItemSelected($hLV, $tInfo.Index, False, False) ;_GUICtrlListView_SetItemFocused($hLV, $tInfo.Index, False) GUISetState(@SW_MINIMIZE, $hGUI) ConsoleWrite("PID: " & ShellExecute(@WindowsDir & "\Explorer.exe", $aIconAssignment[$tInfo.Index][1]) & @CRLF) ;~ ConsoleWrite("PID: " & ShellExecute($aIconAssignment[$tInfo.Index][1]) & @CRLF) EndIf Case $NM_RCLICK ToolTip("") $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam) If $tInfo.Index > -1 And $tInfo.Index < UBound($aIconAssignment) Then _GUICtrlListView_SetItemSelected($hLV, $tInfo.Index, False, False) $sRunAsAdmin = $aIconAssignment[$tInfo.Index][1] EndIf _GUICtrlMenu_TrackPopupMenu($hQMenu_LV, $hGUI) Case $NM_KILLFOCUS ToolTip("") GUISetState(@SW_MINIMIZE, $hGUI) Case $NM_CUSTOMDRAW Local $tNMLVCUSTOMDRAW = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam) Local $dwDrawStage = $tNMLVCUSTOMDRAW.dwDrawStage Local $dwItemSpec = $tNMLVCUSTOMDRAW.dwItemSpec Switch $dwDrawStage Case $CDDS_PREPAINT Return $CDRF_NOTIFYITEMDRAW Case $CDDS_ITEMPREPAINT If $dwItemSpec = $iHot Then $tNMLVCUSTOMDRAW.ClrText = $iLVTxtColor $tNMLVCUSTOMDRAW.ClrTextBk = 0x98FF98 Else ; Other rows $tNMLVCUSTOMDRAW.ClrText = $iLVTxtColor $tNMLVCUSTOMDRAW.ClrTextBk = $iLVBgColor EndIf _WinAPI_SelectObject($tNMLVCUSTOMDRAW.hdc, $hLV_Font) Return $CDRF_NEWFONT EndSwitch Case $LVN_HOTTRACK If WinActive($hGUI) Then $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam) $iHot = $tInfo.Item If $iHot <> $iHotPrev Then If $iHot <> -1 Then _GUICtrlListView_RedrawItems($hLV, $iHot, $iHot) If $iHotPrev <> -1 Then _GUICtrlListView_RedrawItems($hLV, $iHotPrev, $iHotPrev) If $iHot <> $iHotPrev And $iHot <> -1 Then $iHotPrev = $iHot EndIf ;check if listview text is shortened with "..." and display listview text in tooltip Local $sTxt = _GUICtrlListView_GetItemTextString($hLV, _GUICtrlListView_GetHotItem($hLV)) Local $hDC = _WinAPI_GetDC($hLV) Local $hFont = _SendMessage($hLV, $WM_GETFONT, 0, 0) Local $hFont_old = _WinAPI_SelectObject($hDC, $hFont) Local $tSize = _WinAPI_GetTextExtentPoint32($hDC, $sTxt) If Not @error Then Local $iTextWidth = $tSize.x * $g_iDPI_ratio1 Local $iColumnWidth = _GUICtrlListView_GetColumnWidth($hLV, $iHot) If $iTextWidth > $iColumnWidth Then $iColumnWidth -= 3 * _WinAPI_GetTextExtentPoint32($hDC, ".") If $iTextWidth >= $iColumnWidth Then ToolTip($sTxt, MouseGetPos(0) + 10, MouseGetPos(1) - 20, "", 0, 6) Else ToolTip("") EndIf Else ToolTip("") EndIf EndIf _WinAPI_SelectObject($hDC, $hFont_old) _WinAPI_ReleaseDC($hLV, $hDC) Return 0 EndIf EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func WM_SIZE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $iW = _WinAPI_LoWord($lParam), $iH = _WinAPI_HiWord($lParam), $iH_SB = _GUICtrlStatusBar_GetHeight($hStatusBar) ControlMove($hGUI, "", $iStatusBar, 0, $iH - $iH_SB, $iW, $iH_SB) ControlMove($hGUI, "", $iLV, 0, 0, $iW, $iH - $iH_SB - 1) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE Func WM_EXITSIZEMOVE($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam, $lParam $bManualResized = True Return $GUI_RUNDEFMSG EndFunc ;==>WM_EXITSIZEMOVE Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam Switch $wParam Case $idRunAsAdmin ConsoleWrite("Shell executing as Administrator" & $sRunAsAdmin & @CRLF) ConsoleWrite("PID: " & ShellExecute($sRunAsAdmin, "", @DesktopDir, "runas") & @CRLF) Case $idSort Static $a[1] = [0], $iDir = 1 $a[0] = ($iDir = 1 ? 0 : 1) _ArraySort($aIconAssignment, $a[0], 0, 0, 1) Local $i _GUICtrlListView_BeginUpdate($hLV) For $i = 0 To UBound($aIconAssignment) - 1 _GUICtrlListView_SetItemImage($hLV, $i, $aIconAssignment[$i][0]) _GUICtrlListView_SetItemText($hLV, $i, StringRegExpReplace($aIconAssignment[$i][1], ".+\\(.+)\..+", "$1")) Next _GUICtrlListView_EndUpdate($hLV) $iDir *= -1 $bSorted = 1 Case $idOpenFL Local $sFullPath = $oShell.CreateShortcut($sRunAsAdmin).TargetPath If $sFullPath = "" Then Return 0 Local $sFolder = StringRegExpReplace($sFullPath, "(.+\\).*", "$1") If $sFolder Then ShellExecute("Explorer.exe", "/e, /n, " & $sFolder, $sFolder) Return 1 EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam Switch BitAND($wParam, 0x0000FFFF) Case $idAbout GUICtrlSendToDummy($iDummy_About) Return 0 Case $SC_RESTORE If @OSBuild > 9599 Then Local $tPos = _WinAPI_GetMousePos() Local $hMontitor = _WinAPI_MonitorFromPoint($tPos) Local $iDPI = _WinAPI_GetDpiForPrimaryMonitor($hMontitor) $g_iDPI_ratio1 = $iDPI / $iDPI_def $g_iDPI_ratio2 = $g_iDPI_ratio1 ^ - 1 $fIconSize = 16 * $g_iDPI_ratio1 $fLVFontSize = 15.5 * $g_iDPI_ratio1 EndIf WinSetTrans($hGUI, "", 0) GUISetState(@SW_RESTORE, $hGUI) If $aFileList[0] Then AdjustLVIcons() PosGUI() WinSetTrans($hGUI, "", 255) Else GUICtrlSendToDummy($iDummy_Error) EndIf Return 0 Case $SC_MINIMIZE ToolTip("") EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_SYSCOMMAND Func LVKeyCallback($nCode, $wParam, $lParam) If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook_Key, $nCode, $wParam, $lParam) Switch $wParam Case $WM_KEYDOWN, $WM_SYSKEYDOWN ;prevent keyboard access in listview Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam) Switch $tKEYHOOKS.vkCode Case $VK_LEFT, $VK_Right, $VK_UP, $VK_DOWN If WinActive($hGUI) Then Return 1 EndSwitch EndSwitch Return _WinAPI_CallNextHookEx($hHook_Key, $nCode, $wParam, $lParam) EndFunc ;==>LVKeyCallback Func ErrFunc() Local Static $iEventError = 0 $iEventError += 1 ; Use to check when a COM Error occurs Local Const $sText_Error = _ (@ScriptName & " : ==> COM Error intercepted !" & @CRLF & _ "Error count is: " & @TAB & $iEventError & @CRLF & _ "Number is: " & @TAB & @TAB & "0x" & Hex($oMyError.number) & @CRLF & _ "WinDescription:" & @TAB & @TAB & $oMyError.windescription & _ "Description is: " & @TAB & $oMyError.description & @CRLF & _ "Source is: " & @TAB & @TAB & $oMyError.source & @CRLF & _ "ScriptLine is: " & @TAB & @TAB & $oMyError.scriptline & @CRLF & _ "RetCode is: " & @TAB & @TAB & "0x" & Hex($oMyError.retcode) & @CRLF & @CRLF) ConsoleWrite($sText_Error) EndFunc ;==>ErrFunc Func _GDIPlus_MeasureString($sString, $sFont = "Arial", $fSize = 12, $iStyle = 0, $bRound = True) Local $aSize[2] Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFont) If Not $hFamily Then Return SetError(1, 0, $aSize) Local Const $hFormat = _GDIPlus_StringFormatCreate() Local Const $hFont = _GDIPlus_FontCreate($hFamily, $fSize, $iStyle) Local Const $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0) Local Const $hGraphic = _GDIPlus_GraphicsCreateFromHWND(0) Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sString, $hFont, $tLayout, $hFormat) $aSize[0] = $bRound ? Round($aInfo[0].Width, 0) : $aInfo[0].Width $aSize[1] = $bRound ? Round($aInfo[0].Height, 0) : $aInfo[0].Height _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_GraphicsDispose($hGraphic) Return $aSize EndFunc ;==>_GDIPlus_MeasureString ;by InnI - https://www.autoitscript.com/forum/topic/200541-solved-taskbar-icons-coordinates/?do=findComment&comment=1521328 Func _WinAPI_FindMyIconPosInTaskbar($sFileDescription) ; Search taskbars Local $ahWnd = WinList("[REGEXPCLASS:Shell_(Secondary)?TrayWnd]") ; Search controls Local $ahCtrl[$ahWnd[0][0]][2] For $i = 1 To $ahWnd[0][0] $ahCtrl[$i - 1][0] = ControlGetHandle($ahWnd[$i][1], "", "MSTaskListWClass1") $ahCtrl[$i - 1][1] = WinGetPos($ahWnd[$i][1]) Next ; Get UIAutomation object Local $oUIAutomation = ObjCreateInterface($sCLSID_CUIAutomation, $sIID_IUIAutomation, $dtagIUIAutomation), $oElement, $oCondition, $oElementArray, $oButton If Not IsObj($oUIAutomation) Then Return SetError(1, 0, 0) ;Exit ConsoleWrite("Error create UIA object" & @CRLF) ; Create 2D array of buttons [name,left,top,right,bottom] Local $aBtnInfo[4], $pElement, $pCondition, $pElementArray, $iButtons, $vValue, $tPos, $hMOnitor, $aMonitorPos $tPos = _WinAPI_GetMousePos() $hMOnitor = _WinAPI_MonitorFromPoint($tPos) If @error Or Not $hMOnitor Then Return SetError(2, 0, 0) $aMonitorPos = _WinAPI_GetMonitorInfo($hMOnitor) If @error Or Not $hMOnitor Then Return SetError(3, 0, 0) $iMonitorX = $aMonitorPos[1].left $iMonitorY = $aMonitorPos[1].top $iMonitorW = Abs($aMonitorPos[1].right - $aMonitorPos[1].left) $iMonitorH = Abs($aMonitorPos[1].bottom - $aMonitorPos[1].top) Local $tRECT = DllStructCreate("long Left;long Top;long Right;long Bottom"), $tPOINT = DllStructCreate($tagPOINT) For $n = 0 To UBound($ahCtrl) - 1 ; Get taskbar element $oUIAutomation.ElementFromHandle($ahCtrl[$n][0], $pElement) $oElement = ObjCreateInterface($pElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement) ; Get condition (ControlType = Button) $oUIAutomation.CreatePropertyCondition($UIA_ControlTypePropertyId, $UIA_ButtonControlTypeId, $pCondition) $oCondition = ObjCreateInterface($pCondition, $sIID_IUIAutomationPropertyCondition, $dtagIUIAutomationPropertyCondition) ; Find all buttons $oElement.FindAll($TreeScope_Children, $oCondition, $pElementArray) $oElementArray = ObjCreateInterface($pElementArray, $sIID_IUIAutomationElementArray, $dtagIUIAutomationElementArray) $oElementArray.Length($iButtons) ; Get name and position for each button For $i = 0 To $iButtons - 1 $oElementArray.GetElement($i, $pElement) $oButton = ObjCreateInterface($pElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement) $oButton.GetCurrentPropertyValue($UIA_NamePropertyId, $vValue) $oButton.CurrentBoundingRectangle($tRECT) If StringInStr($vValue, $sFileDescription) Then $aBtnInfo[0] = $tRECT.Left $aBtnInfo[1] = $tRECT.Top $aBtnInfo[2] = Abs($tRECT.Right - $tRECT.Left) $aBtnInfo[3] = Abs($tRECT.Bottom - $tRECT.Top) $tPOINT.x = $tRECT.Left $tPOINT.y = $tRECT.Top If _WinAPI_PtInRect($aMonitorPos[0], $tPOINT) Then Return $aBtnInfo EndIf Next Next Return SetError(4, 0, 0) EndFunc ;==>_WinAPI_FindMyIconPosInTaskbar 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 Func _WinAPI_GetDPI($hWnd = 0) $hWnd = Not $hWnd ? _WinAPI_GetDesktopWindow() : $hWnd Local Const $hDC = _WinAPI_GetDC($hWnd) If @error Then Return SetError(1, 0, 0) Local Const $iDPI = _WinAPI_GetDeviceCaps($hDC, 88) If @error Or Not $iDPI Then _WinAPI_ReleaseDC($hWnd, $hDC) Return SetError(2, 0, 0) EndIf _WinAPI_ReleaseDC($hWnd, $hDC) Return $iDPI EndFunc ;==>_WinAPI_GetDPI ;https://learn.microsoft.com/en-us/windows/win32/api/shellscalingapi/nf-shellscalingapi-getdpiformonitor Func _WinAPI_GetDpiForPrimaryMonitor($hMOnitor = 0, $dpiType = $MDT_DEFAULT) If $hMOnitor = 0 Then Local $aMonitors = _WinAPI_EnumDisplayMonitors() If @error Or Not IsArray($aMonitors) Then Return SetError(1, 0, 0) Local $i For $i = 1 To $aMonitors[0][0] If _WinAPI_GetMonitorInfo($aMonitors[$i][0])[2] = 1 Then $hMOnitor = $aMonitors[$i][0] ExitLoop EndIf Next EndIf Local $tx = DllStructCreate("int dpiX"), $tY = DllStructCreate("int dpiY") Local $aResult = DllCall("Shcore.dll", "long", "GetDpiForMonitor", "handle", $hMOnitor, "long", $dpiType, "struct*", $tx, "struct*", $tY) If @error Or Not IsArray($aResult) Then Return SetError(2, 0, 0) Return $tx.dpiX EndFunc ;==>_WinAPI_GetDpiForPrimaryMonitor Func _WinAPI_SetProcessDpiAwarenessContext($DPI_AWARENESS_CONTEXT_value) Local $aResult = DllCall("user32.dll", "bool", "SetProcessDpiAwarenessContext", @AutoItX64 ? "int64" : "int", $DPI_AWARENESS_CONTEXT_value) If Not IsArray($aResult) Or @error Then Return SetError(1, @extended, 0) If Not $aResult[0] Then Return SetError(2, @extended, 0) Return $aResult[0] EndFunc ;==>_WinAPI_SetProcessDpiAwarenessContext Func _WinAPI_SetThreadDpiAwarenessContext($DPI_AWARENESS_CONTEXT_value) Local $aResult = DllCall("user32.dll", "uint", "SetThreadDpiAwarenessContext", @AutoItX64 ? "int64" : "int", $DPI_AWARENESS_CONTEXT_value) If Not IsArray($aResult) Or @error Then Return SetError(1, @extended, 0) If Not $aResult[0] Then Return SetError(2, @extended, 0) Return $aResult[0] EndFunc ;==>_WinAPI_SetThreadDpiAwarenessContext Func _WinAPI_SetProcessDpiAwareness($PROCESS_DPI_AWARENESS = $DPI_AWARENESS_PER_MONITOR_AWARE) Local $aResult = DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", $PROCESS_DPI_AWARENESS) If Not IsArray($aResult) Or @error Then Return SetError(1, @extended, 0) If $aResult[0] Then Return SetError(2, $aResult[0], 0) Return $aResult[0] EndFunc ;==>_WinAPI_SetProcessDpiAwareness Func _WinAPI_SetDPIAwareness($DPIAwareContext = $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE, $iMode = 1) Switch @OSBuild Case 6000 To 9199 Local $aResult = DllCall("user32.dll", "bool", "SetProcessDPIAware") If Not $aResult[0] Then Return SetError(1, 0, 0) Case 9200 To 13999 $DPIAwareContext = ($DPIAwareContext < 0) ? 0 : ($DPIAwareContext > 2) ? 2 : $DPIAwareContext _WinAPI_SetProcessDpiAwareness($DPIAwareContext) If @error Then Return SetError(2, @error, 0) Case @OSBuild > 13999 $DPIAwareContext = ($DPIAwareContext < -5) ? -5 : ($DPIAwareContext > -1) ? -1 : $DPIAwareContext $iMode = ($iMode < 1) ? 1 : ($iMode > 2) ? 2 : $iMode Local $iResult Switch $iMode Case 1 $iResult = _WinAPI_SetProcessDpiAwarenessContext($DPIAwareContext) If Not $iResult Or @error Then Return SetError(3, 0, 0) Case 2 $iResult = _WinAPI_SetThreadDpiAwarenessContext($DPIAwareContext) If Not $iResult Or @error Then Return SetError(4, 0, 0) EndSwitch EndSwitch Local $iDPI If @OSBuild < 9200 Then $iDPI = _WinAPI_GetDPI() If @error Or Not $iDPI Then Return SetError(5, 0, 0) Else $iDPI = _WinAPI_GetDpiForPrimaryMonitor() If @error Or Not $iDPI Then Return SetError(6, 0, 0) EndIf Return $iDPI EndFunc ;==>_WinAPI_SetDPIAwareness #Region Embedded Gfx Func _Info_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Info_Pic $Info_Pic &= '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' $Info_Pic &= '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' $Info_Pic &= '/Su4887FozbQDYuQLcNxNN78n3eQzWVCksTwSyW0NE/CV7/6GCZPbsK3n3sFzBbMaoSlnZjRF7Gx2jjREw4sDIp4SAWUxohFbS6F2bPnQGs9JhlzHI1PPrmIM2fPo76uFtY3sNZiSmMSjz/+KBYsWIDXt76Fw0dPIJfJVDS2Gf6kB8Ph8jbFOJaZ+A2LpRLmzpmBpqamMblHBFTHnk6kkgmwtSgZDw21Dp566nG0t7fjw10H8MJLP0FDfS1MhblJeSMvRxJio45ettCECfaeRu3ZJTQ3345sNjsOVQ/GlUIBA/kCUm4Rt82ox+YnHsOqVauwd38XvvHN76KuNodSyQ9yCFIZ2RiKZcq8TERIgnJAWJuZ4B1ZBG5CY9rUpjEb48olZ/26lfjtudPIpGuwZs3daGtrxYHOQ3jm2e+AlILv+yPqBpVzu1yeUy0XFxaBEp4wHWQRJN0EGhsbglzodWxi2rSp+Ju/fhpEhFwuh+0fdOA/vvEc0umaqqYlLEdsNZAUh60FW4awhYgODBZN9CaMhJNEOp3+fUJi1NXVwRiDH2x5Fa+89nM0NtTDj9SkGrmQiLpbBket3aQofC7FBSkDaCfwMjIhOQzE8LrdXtDDfvz4KTz//VfQdfgYanNZeF6pKmoyjLpzAISxBgSBk3B0n+/7db7xQeHjIYom1rFDAHr78ujpuQxj7dDzeyPSdswCx9Gw1uK/v70F23fuweBgATU1qYp7k9FVO2r692F8H1pRj8Nst1nrP2F8X7TSpEgBauJPaLMF3vjJO1i0cCEaGxuvMqTMDN/38cabb+OV138G41sorW5KU0x8KMww1sD3ffh+CYawl+67/7EW35iTrutKMpUmN5GEk0iEz8lMoGBFhJLnY/KUBjz68P2Y3Xw7lFIwxuDCxU+x/8Ah7PxwH5gZuWw2TtTcjCESSIdYA8/z4HkF+H4JkyfVf5fWrt+UYObXtXYeTiZrkEyl4CaSUNFDiBOgaYoIxlrkB69Aq+D0Pc+HiCCVSqKmJhlKi9w0MIbCBQPjl+AViyiVir7nebxx4/p1BAArV9//sFJ6ayLhOslkDdxkCo6TgFI6fJh54iWI8g1XqvZzw7yDLYzxUSp5KHlFGRzMF1pm3zbw8kvfn6YAYPfOd37K1v7IL5XgeUUueQX4pRKs9WGtjZncjXYdCMuY76v9iuwFWwtjDPxSCSXPQ8krwvM8Sjjaf2jjfX8XJ+RWrn5A7965zS6/+75dWjkrXTdpE66rE9qFdhworcOMlap0Fq+60hD9DOM1ywxrDIwpoVQqie97ZI35Vceud+8NpScoIRvj87q1G2mwWPgD0fKmCK+31hrjGMdxHCjlxIVr0M3+jpAbVw0Knx8M6lAWli2s8eEb31jfd6w1+9jyJgB4YcsWIiKh5avuw55d72Hpinuxr+N9LF2+vg5E/6uUWqGUNlprRykHWhFAekT7E93S8hEV2aNEUEjCrLVGM/MRMbhr//73S8tX3AfXcbFj59tw9ux6L97a0uXrsW/Pr/o2bNj4SF++8Kds+d+tNSAqgZRG9P0pXySlKW87DUqiokXkh3X1qb/s6/Oc6GB37Hx79CNevfZ++vRSnzpxdI9dsXLNKmb8GwtNFmARkT5BQOEm60zwxR/APAAegHPXdSIihOD7LFpEJKOCEu07KVdt27Hj1//ypWUbdOfeX9r25feCCNjX8T4A4P8AfQxoGhUQAVAAAAAASUVORK5CYII=' Local $bString = Binary(_WinAPI_Base64Decode($Info_Pic)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\Info_68x68.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Info_Pic Func _Error_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Error_Pic $Error_Pic &= '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' $Error_Pic &= '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' $Error_Pic &= 'f++B0ewSyzpzDUY1qEGU9AiCAFmWMTExgTfffDPQgG7bts3LQdBg+IkwiVOSySR27twZaFOGh4dx9OhRyLIcWVEURE9gCjGI8KgvrcjnIrZt4+zZsw3qUyqV8Mwzz3gpxmY4yXGcV0uSSqXwyiuvNEgKsRmqqtZ9mrKUufv917Dsskg2UwJFQFEUBZOTk14+tVqt4vnnn/ecN1mWIx0jmjCSoGpvb8err76Ks2fPNoBBg9uMqvvRFxj+s84Ke89e0790QPXrr7/i5ZdfRrFYBMdxvqVUUbWnpC+S5Wpra8Mbb7yB22+/HSdPngwEw08a/D5KCk0Q0Y3YiZJUHXF4yLWvU7MIiiRJWFhYgG3bkCQpsoQq6iBLqSiKOHXqVAMYYb4FnScJ2t6k24tR4sVWHoZds6vPUn2C0KBrsR+S4/WTtiDG+l0HSagYZkNY1SED0lJCv0vSdOxkL1UEHPQFJz03el60RPh54pFFd1Ev+3Ei6D5q9VqO8xRmF6LmGhWmiEGc8FOHZlaboEQNayxbASHMaLIAsBLDPg+ag+g3EJuhDgOFXmHCVqJLITFR9oEu0g0Dwy8p7SshxHJHGVEaCNZ2hAEQleBtVuXCCKXD/ygpYr899gDhOM6md+mC1IPlPgGCgEmn+8kvu63BGugwtQrSfXpsdg8pTKX8at6pCgLbM6rxePxnVVV5EkfQhf9hnfpxif1Gn/1sna3ZCOJe1PvsGGFz8lOxxc/eSUDJx+Pxnz1AMpnMD7Isg+d5ZDIZKIrSoI/NJlpYYoKsvN97UStV2BhLSQQ5jgNFUZDJZMDzPMnY/eCpTE9PzzeO47wsy3JXuVzme3t7MT8/j1qtFlhsx9qKqOR00KclQSrjp2LNGldarfyeqaqKdDqNcrkMTdMcQRCy11133TcAwI2MjGBubk4pFotPXbhwYT8Ap1qt8oQDpMRqKQ7TUp+36oss9TnP83V70KqqOhzH8StXrnw+k8kcLJVKOgcAX331FTc/P5+YnJzccv78+dcLhcJVhmGgWq06dB3WcrxKMudWndSlEh90SJIEVVV5RVGQTCane3p6dvf19f371ltvLa5fv94VAeDixYvuCy+8UHz33XcP9vX1HZ2YmNg0Nzf3D57nb5YkSVgGAJGENSscy5UeSkpsURR/TqVSP1xzzTXfJBKJyUQiYRw/fvw/HezYsaMu6XI5Dtd1ucUTLZ6c67qXZUuQrq/dsWMH/h9l1MgBujE/MAAAAABJRU5ErkJggg==' Local $bString = Binary(_WinAPI_Base64Decode($Error_Pic)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\Status-dialog-error-icon_68x68.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Error_Pic Func _OK_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $OK_Pic $OK_Pic &= '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' $OK_Pic &= '+u7QSHJu7LpGHc2TsvRRJkgZosN0Xxgv8RsaDDNSWiH3sn4JapmAI8axg2udHGGClAZPcaF2VfkXvyJjiFEvNCUoRtwiv9fE8LoBsWwBlJzjNMl4mr9EYORc5JekZBwq+iOhKwg6DX5nwalrNKj7pZzzEeYR/sQSH/cW/wV+wRAph4vY0tqKsb75WZacUhQ8sTZE7+wwyjovskjbGnqDH9LEMOaVIRqpk9Tbp7CLf4us/qqggbcPMQxM8/Pij7dY4dsAjHt80NoSxWcj9qJnrwbiZLD2M0EY4QAwV6zNebG4jTnZqNtpD9WJABTxxAiLXuHALRIWucrXeT//xJAX2Sg1ztCahqnfWbE4ohFmhHUuDDHKAg3+AShHavgQUlUiDRDKRCCzORLbZSFCwX0c4SabNGlEm8Iarab9zoqGmwJaRk0swEKQgtKk6fQh43GhkWZYrFttbQqEfb6YHkjf/Zu4M9S70siGY1TQbNRSe01k+FC6BkGo3vJ2sGKSpNF+Rp1OxvlQt/ejvsTbLXC1mpp1H2PHIGJqWktWF4KdX+qe9KHfW37HzooaqXXO7vSBCFXjW7YFEENeNKTim1+71Ydw9tJngz8jJ1UrakJSDtaHeOhTs4mrsU1MSXgNvY6JZK1Yy527RLnXEtQvbsWi3oaLf9zEKEvp6YPm7GI6FglNdcQfCK59gP7ntJYR1XGDtyDhUdNO6ZKbdJxWZCs5tq8Xd1H9Bm2/SnGVVcw6C51bTTvhMG/QQCR5O/+PStVS79e+SHJNeZNJNpKOcL3T5EnWE97OH2Od1f6orvKNzjg30P8Ct9xvUPNcU8UAAAAASUVORK5CYII=' Local $bString = Binary(_WinAPI_Base64Decode($OK_Pic)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\OK-button-icon_68x68.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_OK_Pic Func _Sort($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Sort $Sort &= 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEVHcEwAAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgQAAQIAAAAERo4AAAAAAAAERo4AAAAAAQMAAAAABg0AAAABBQkAAAAAAAAAAAAUV6QUV6QQU6AkabwJTJYBM2sXWqkjaLsjaLv////39/fx8fH29vb09PT19fX7+/vy8vLz8/Pw8PD6+vr4+Pj5+fn8/Pzv7+/h4+b9/f3i5Oeurq7FzdXX2+C9xdDj5uiQlJnIztbFzNXc3+S9xc/Z3OHBydLX3OHCytO7w868w8+Ul5uPk5jV2t7W2t+RlZnd4eTO09rDy9Tm5+qvr6+/yNHg4ube4eWSlprk5+nAyNLEzNTc3+PJz9ff4eTN0tqSlZmtra2wsLDL0djK0Nfg4+e/yNLb3uLa3eLa3uHHzdbK0NjU2N7T2N3P1NvQ1dvZ3eEOUZ2/x9DL0dkMUJvJz9aVvO/b3+Sav/Hn6evR1twGSZIER4+dwvMLTpjd4OMkar0JTJcVWqgbYLAXXKvS19wCRIwTWKUQVKDBytO4wcyjxfUgZbesrKwSVqK8xM8eZLXIz9e8xdAiZ7odYrOgxPSnyvcjabwZXq6Tu+6VmJyXu+LM0tnAydIIS5RnnNvIzteszPl4qOLK3velyPZxpOBgmNhMi9BsoN2OkpeJsd2vz/qGsul8qdujxfBTj9KXvfB4p9uvy+eXvvCiwuWmxOWRtt+Ltesxa6mbveKBr+aQuOx9q+R0pNlcldbb3uMobLyKqs5XktRBda4tarCqyOaNtN6Fr9wra7SArNtwodiev+Oz0fx2nMcva60pa7lFd62UueF9ocoyc8CCrd21zugWVZoPUpw1bavp6uzL0Ni6ws200O671vo7eMBqlcZgjsMVU5eDpcuHqM1WiMLb6f3s7fAxZ6JDfcDL2u3H3f1KgcC81fMZ' $Sort &= 'WZ+70Oiryu/E2vbK0dmbv+qz0PWPrc9QhL7C1evU5fyLtOfQ4vk6bqXh7f+kvNiqqqrW4e4kYaNllc5YowvFAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfnBwcWAAT3pH7oAAAAwUlEQVQY02NgMDE2MdIDAiMggwEEdNLTov2BIDotvRIiEJOY6AxEt5ITd1wAC6RFO4FUOHWunDLlM0jAQNcYaIiR8ZmLx46d+cLAoGuQF+Rzw8cnSNvg/n2QFt1op7AUS8uUMKfoV8/BAskQQ52Tkl+9AgsAbQ0LDQ0D2vv4MVjAQNtYz8JCzxhuBszQe2cuX753Hmjtvmj/0JSUUH/Pz1OmHEBxaefvrRCXgp3qFJ2W5gL2i7autrEJEBgDGQxYAADHkkynWLow7gAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Sort) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Sort_16x16.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Sort ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _OpenFolder($bSaveBinary = False, $sSavePath = @ScriptDir) Local $OpenFolder $OpenFolder &= 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB0VBMVEV4xhJ9zAZ/1gCA1gCK1wCM2gCNylqUz1yW2jea3TOn4lSw5G+854O+y9vFz9zJz8DOzsXR2eTR2uTTz8XUqIXUxZjUz8bU0MfU8LPVmmDW0cjXxZPX0snY3N/Y7MjZ1MvZ8b3akz/asova1c3b8r7dngDdoAbdpADdpAbd2dLd9MLepAbepQze2tLe9MTfpQ/fzaDg4uPh4+Th8dri7fjjkiLj9czkuHTk06jk5Obk9s/nqADn99TorxbotDbprxTprxbprxzpsBzpsB7psSPpsiXpsy3pszLp9d7qsR7qsy3qy47q38/q7PrrsBjrtC3rtC/rukbry43stzns18Ts6+rttS3ttzntuT7t27nt7Onutzbuu0Xuu0buvEjux2ju5N7wu0Hwu0XwxmXxuzfxvDrxvUrxvlHxy3vx++Xy8/PzvDbzvTrzyXLz59Dz6Nzz8/P0wk70x1/0yGT01JP1yGb2z3L20H325tf29/X347v35ND39/f43cD47eP5+fn68en6+vj6/Pf78uD7/vf88t388t/8/Pz8/vr98+H9+vj9/vv+9+z++fD+/Pr+/fr+/fv+/vz+/v3+/v7+//7+/////Pj//v3//v7///7///8fdIuRAAAACXBIWXMAABcSAAAXEgFnn9JSAAAA6UlEQVQYV2OYBQSTQITWrJkgigGIZ87qttIz48qcNQUiMGWWDScTMysLd8fkmRCBFhUFCR4ORgaPGRNnAAWmzwCpnMXOZjwVZkZ9QWVjk9ysaW2drT2zGPpq87OijGQNffPKikuLytsYqk1DTIT4BHkFktPS05NyexkqFBP4RQ0spOMTY2PiwkpmMdRJ+hRmp6bkRAeHh0f4Vc1kaBDxtnd383IL8Pf3D/BsnsXQpWTn5OoCBq62gf1Aa82tHR0gwNk6Y9YEhslBqvra6iCgoaMW2T6BoT1U' $OpenFolder &= 'V1lGXFhYWExKXtOyBuxSFAAAdgZiD4/tcMUAAAAASUVORK5CYII=' Local $bString = _WinAPI_Base64Decode($OpenFolder) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Open-file_16x16.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_OpenFolder Func _Restart_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Restart_Pic $Restart_Pic &= 'k7kAiVBORw0KGgoAAAAADUlIRFIlAHAUARgIBgAojYkAHQ0AAALzelQAWHRSYXcgcHIAb2ZpbGUgdHkAcGUgZXhpZgAAAHja7ZdNkuQAKAyF95xijmAA/SFxHAwmom8AMMefB3Z6qrIAshc5s+qIhDAAYJAfQh+QVekA+PvXSH8hUYkAnNQ8csl5Q9IAooUrGrGdqa4AkjZd5fmi1xgAfe9P9wCjS1AAy/ka+bJ/9NMALXBWFS37IhQA7RrYvw+UawIAjiehayKZHjEAGv0SKpeQ8DkA8PCwnsvacgkA/7qE/Tjr6/sAMwx40izEl/YALfL8ro7odUMApzAfQrKhFOEA0wGZjySpaDgASoIRHIZBFRMARanyWCoC8ioATncq8GhMV/UApdE3KneLXvcAp2daypeJPAUAOd/1y/5E9poAygr9l5k1rhYAf+93OaXS9hQA/fmM0WOsNWMAFVUzQp2vRT0AlrJasNsxxZwAOhL08uZ4DBIAvnJBDuzqBmoAfWvbjtyoEAMA1yClTpUGHasAbtTgovKR2NEAYG4sqzPEuXAAk8lPZ6bBLkUAugQgt4VdhW8AX2hNW7aW1mwAgZk7wZQJYtgACO/n9O4HY8wAo0C0xR0r+MUAPIMNNya5WcIADERoXEG1FeAAR35Ok6uAoM0AKM8jUhDY/ZQA2I3+vQlkgRYAGBrq87iQ90sAACHC1AZnSEAAANRIjDJtzuwARAhkAFCF6ywAyjsIkBl3OMkAKpLBJnhOjU8AnJYpG6M7oR8Al9k8V5Jx5gIAhCpgqRr2j2sAYA9VE1Mzy+YAFlasZsmaLecA7HleitXFNbkAeXb38OI1JDQALHJ4RJSohYsA4NK0kouXKKUA1Io5K5Qrvq4AMKh151123S0A7Xn3Pfay14YA7dO0WcvNW7QA0mrnLh33R88A3Xv00utBB7YA0qGHHfnwI44ActSBrTYkDR0ANvLwEaOMelMAu7D+yG9Qo4sAGi9S09Bv' $Restart_Pic &= 'augAdX9I0LxObDIAAzBOSiDuE8EAvNkmsy1IlScAuclsK7j+xBgATtpk1mkSA0EAPYht0INd4pMA6CT3v7gl128A3Pi/kksT3ZsA5H5ye0Wtz58AobaInadwBnUAE5w+jB9ROeoA/LH7UaffDbwAW3+EPkIfoY8A0EfoI/QR+oMAhAb+eJj/Bf4AAzkcp6C1zX4AjAAAAYRpQ0MwUElDQ4W/AL2cfQCRPUjDQBzFXwBTJaIVBzuIOABkaJ0siIo4SgAVi2ChtBVadQAwufQLmhiSFAAXR8G14ODHYgDVwcVZVwdXQQAQ/ABxdXFSdACREv+XFFrEeABw3I939x537wAAoVFlmtU1DgBoum2mE3EplwBfkcRXiAihDwBRiDKzjGRmIQAL3/F1jwBf7wBiPMv/3J+jXwAtWAwISMSzzAAwbeJ14ulN2wDgvE8cZmVZJQA+Jx4z6YLEjwBcVzx+41xyWQDgmWEzm54jDgATS6UOVjqYlQBNjXiKOKJqOgDlCzmPVc5bnAC1ao217slfGAAq6MsZrtMcQQACi0giBQkKagCooAobMVp1UgAspGk/7uMfdgD9KXIp5KqAkQBjHhvQILt+8AA/+N2tVZyc8ACSQnGg+8VxPgCigLgLNOuO8wB97DjNEyD4DABc6W3/RgOY+QAkvd7WIkfAwAA2cHHd1pQ94AByBxh6MmRTdgClIE2hWATezwDom/LA4C3QuwDq9dbax+kDkAClrpZugINDYAC0RNlrPu/u6QDs7d8zrf5+AABK3XKXD9Fk/gnAlHZpwJFYTUw6AGNvbS5hZG9iIGUueG1wwJUAAAA8P3hwYWNrZQB0IGJlZ2luPQAi77u/IiBpZAA9Ilc1TTBNcABDZWhpSHpyZQBTek5UY3prYwA5ZCI/Pgo8eAI6AAhtZXRhIHgAbWxuczp4PSKN4go6YAHBAi8iIEIEAHRrPSJYTVAgAENvcmUgNC40AC4wLUV4aXYyACI+CiA8cmRm' $Restart_Pic &= 'MDpSREZECKABPSIAaHR0cDovL3cAd3cudzMub3IAZy8xOTk5LzAgMi8yMi0gBC1zAHludGF4LW5zBiNBCGMIRGVzY3KAaXB0aW9uIOEBAGFib3V0PSIiheADIOUTbXBNTcYLDG5zpCDgIS94YXAALzEuMC9tbS9hKQZzdEV2gAg5BnMCVKC6L1Jlc291AHJjZUV2ZW50EiNJCGRj5gdwdXICbMIZZGMvZWxlKm1ABXNgCDFKDkdJhE1QSiBnaW1wogbjwBcqBXRpZoclahMhAx+CE6wfOxmCBWIkOkRvhGN1wRNJRD0i4Q+AOmRvY2lkOkIBADI4YTJkNzdkAC00ZjVjLTRlADM0LTk3OGQtAGUzZTM4YmYyEDFlYjJICUluc2B0YW5jZUEJIAIuAmngCGMwYTdlZgA1Yi1kNDFhLQA0YzgzLThlZgA4LTY2MjhiMUBlMzAwOTNICE9kcmmgUmFsqRJBCWQBQAkwMDM5ZmU1AGYtOTg2NC00ADczYy1hOGI3AC05NTJhOWYwIDY4MDg1QglkY0A6Rm9ybWHAOWkAbWFnZS9wbmcDAgMBLjpBUEk9IggyLjAnAlBsYXQGZgAGYGBpbmRvdwJzRwNUaW1lU3SCYfEUMTY4OTFQCyQ5MSAqNTT4A1ZlDHJzsChRBTEwLjPvIxGBGeEMQAxhkSoABHUOADpDcmVhdG9yQFRvb2w9IiEEIAuRA+YBTQA1ZGF0YRBEYXRlQAUwMjMAOjA3OjEyVDEAMzo1NDo0NSsMMDLQEPcCb2RpZk553wLbAuEzIDxjFkg0aXPwB3kiATM1U2WmcdMA4wBsacMAIGIxCDphYyMMc2F2ZQZkkyalAWNoYW5nLmXwQxQodQFpzyA6YgBkYzdkZWFkLQA5NDgwLTQyNgnAGzkxsCFhNDcxwDlmYzcwYRMcVgQAc29mdHdhcmU8QWdwFLASUCmyEiAoxaQaKfsCd2hlcRhAEBAtMDctRhA1MSLqL8QOL9kO' $Restart_Pic &= 'PJE2+xADAt8oRpFLMgGgS5BQL6ZQ9BL/DwAPAA8ADwAPAAIATwYPAP8PAA8ADwBPBg8ADwAPAA8A/w8ATwYPAA8ADwAPAE8GDwD/DwAPAA8ADwBPBg8ADwAPAP8PAA8ATwYPAA8ADwAPAE8G/w8ADwAPAA8ADwBPBg8ADwD/DwAPAE8GDwAPAA8ADwAPAP9PBg8ADwAPAA8ADwBPBg8A/w8ADwAPAE8GDwAPAA8ADwD/DwBPBg8ADwAPAA8ATwYvAR8PAA8ADwAPAAIAKrI6IAEACgJQXACtyQo8AD94cGFja2V0ACBlbmQ9InciAD8+Bg1a+gAAAAAGYktHRAD/IUEAoL2nk0AECXCASFlzAAALE8EAIAEAmpwYAAUHdABJTUUH5wcMCwA2MwX6/bAAAAABgUlEQVQ4ywCt1bFL1VEUBwDwz/u9Z2i9NgC3CBIkkIKGpgBIUIkaFUyHQgAIGtrEpc3VoQCtoH/AKSTy2QDiEkRLeziEQwBQlG5uoibUqwCW8+Byu+/5BAC/8IP7+55zzwDvd+79nnNqygAYxBzuooGD4AAvoI13WMexPgAwjw1Mo16w1wDDth4f7YnnWADUPxZjT9dgEwBOj4k0aD1J8wAXXnfZdB4D4QCT4zuu4jK2OwAX0EocBnAzngDh4B7hYayHMQBUCNzCYBUHuwCaGIZwCx8wGwBcDVWsL4V/HgB0FferkMZmYgDYx0WsdEl/CwAvsZzxm7jXCACdtTPjDTwO3QCV8BFPMq6NegCViLaDkTjoIwDs9bjdbVzLuADDRp/SeI+//QA4Vmhm3DdcyQC4Hexm3Bg+ZwBcs8LvQol9wgCdHj9yGz8KJQDZhoWozRTn8AAWU4Vg41gryABmBgu1EParRABzadCnuI4v+ACDUXzFM/zM/AA38KDzMndCUwAYjfLqhqUo3wAzaQ6TeHFW7QBrqVewNP3WCQANdibO7L80awCnHAHNZAS8KQCNgH8IK0cZ5giggq3A' $Restart_Pic &= 'ZwBJRU4ARK5CYII=' $Restart_Pic = _WinAPI_Base64Decode($Restart_Pic) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Restart_Pic) & ']') DllStructSetData($tSource, 1, $Restart_Pic) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 5125) 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 & "\Restart_20x20.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Restart_Pic Func _Rect_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Rect_Pic $Rect_Pic &= 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpSItDnYQcchQXbQgKuIorVgEC6Wt0KqDyaVf0KQhSXFxFFwLDn4sVh1cnHV1cBUEwQ8QVxcnRRcp8X9JoUWMB8f9eHfvcfcOEJpVppo9k4CqWUY6ERNz+VUx8IoAQghiHD6JmXoys5iF5/i6h4+vd1Ge5X3uzxFSCiYDfCLxPNMNi3iDeHbT0jnvE4dZWVKIz4knDLog8SPXZZffOJccFnhm2Mim48RhYrHUxXIXs7KhEs8QRxRVo3wh57LCeYuzWq2z9j35C4MFbSXDdZojSGAJSaQgQkYdFVRhIUqrRoqJNO3HPPzDjj9FLplcFTByLKAGFZLjB/+D392axekpNykYA3pfbPtjFAjsAq2GbX8f23brBPA/A1dax19rAnOfpDc6WuQIGNgGLq47mrwHXO4AQ0+6ZEiO5KcpFIvA+xl9Ux4YvAX619ze2vs4fQCy1NXyDXBwCIyVKHvd49193b39e6bd3w9P7XKZpWdougAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cHDQ0AILRpNswAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAfElEQVQ4y+3UMQoCQQyF4U+ZO9iKeBIbD6WV19iTeBWLcdu9xGqTBVELnZlyHoRAAj8hIY/GWkXe4IJ9IeeOE6alMOBRGQOkAO4iHzH+Od0W14WR3pojbjU7XLc+Sgd2YAf+ovTl0RWYwwcw4xCuUar8CjxjrjDYHIz2egIcTx4/Oi5K+wAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Rect_Pic) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Rect_20x20.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Rect_Pic Func _Check_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Check_Pic $Check_Pic &= 'lbkAiVBORw0KGgoAAAAADUlIRFIlAHAUARgIBgAojYkAHQ0AAALyelQAWHRSYXcgcHIAb2ZpbGUgdHkAcGUgZXhpZgAAAHja7ZdBkuQAKAxF95xijmAASQiJ42AwEX0Agzn+fGGnpyoAK3uRM6uOSAgAAxb4I/SArEoAx9+/ZvoLiaoAl5TVvNRSNqQAXHPlhoZvZ2oAq6Qtr/J8yVcAH323p7uDYRIA1HK+ernGP+wAdAucVUNLvwgAeb869u8d9ZoAgP1J6JpIwiMARmNcQvUSEj4AOx4etnNZW6kAbl+XsB9nfX0Af4YBT4pCbGkA3yLP79kQvaEAMArzISQbShEAPh2QeCRJQ8MAUFL0oNRl2VAAqtDlCQLyKk4Ad6rwaIar+eUAoG9U7ha9tqcAZ1qZryHyFOQActcv7Yn0NZUAFfovM2e/WvwA3W5ySqXtKfoA8cw5fK41YxUALReEulyLeiwAZbUwbscUMbUAJ+iVzfAoJGwA5Yrs2NUd1MYA1rcduVMlBq4ASZkGNZp0rLoAU4eLmY/EhgYAc2dZRhfjyl0Agl+OTJNNqgwAcUDuC3sWvn0AoTVt3XpaszkAZh6EoUwQI3wA8nZO734wZxwABaLN71jBL+YACDbcCHJRYhgAiNC8gqorwI8A/JyCq4CgRpQA44hUBHY/JXYApX9vAlmgBQMAFfV5XMjGJYAAEGFqhTMkIAAAajgVVGgzZiMAQiAdgBpcZ8kAvIMAqfKAk5wARQrYOMfU+MQAaA1lZZgT7LgAzEBCpeDMOQgANcDKWbF/LDsA9lBT0ayqRU0AXau2IiUXLaUAWIlLsZlYTqYAVszMrVpz8ewA6sXN3au3ylUAcGlqLdWq11oAW8OcDcoNXzcADGht5132vGsA2stuu+91bx0A26fnrr10694Aa2+DhwzcH6MADBs+6mgHHdgASkc+9CiHHX4A1KNNbLUpaeYAqbNMmz7rbDcAtQvrj/wGNboAqPEiFQPt' $Check_Pic &= 'pgYAq9lDguI60WAABmCcMoG4BQIAbGgOZptTzhwA5ILZVnH9iTIAnNRgNiiIgWAAPoh10oNd4pMAaJD7X9yS5W8A3Pi/kkuB7k0Acj+5vaI24mcAqC9i5ymMoG4AgtOH/sMbe4sAH7sfdfpdx7sA9UfoI/QR+ggAfYQ+Qh+hP0gAaOKPh/gv8B8AuTenl+FbECoAAAABhGlDQ1AYSUNDRb/AvJx9kQA9SMNAHMVfUwClIi0OdhBxyABQXbQgKuIorQBYBAulrdCqgwDJpV/QpCFJcQBxFFwLDn4sVgAdXJx1dXAVBADBDxBXFydFFwAp8X9JoUWMBwDH/Xh373H3DgAQmlWmmj2TgACqWUY6ERNz+QBVMfCKAEIIYgAcPomZejKzmACF5/i6h4+vdwBRnuV97s8RUgAKJgN8IvE80wANi3iDeHbT0gA57xOHWVlSiADPiScMuiDxIwDXZZffOJccFgB4ZtjIpuPEYQBisdTFchezsgChEs8QRxRVowB8IeeywnmLswBarbP2PfkLgwAFbSXDdZojSABgCUmkIEJGHQAVVGEhSqtGigCJNO3HPPzDjgA/RS6ZXBUwcgAsoAYVkuMH/wCD392axekpNwApGAN6X2z7YwAUCOwCrYZtfwAf23brBPA/AwBXWsdfawJznwCkNzpa5AgY2AAGLq47mrwHXADuAENPumRIjgDkpykUi8D7GQB9Ux4YvAX61wDc3tr7OH0AsgDU1fINcHAIjACVKHvd49193QC9/Xum3d8PT4DtcpkbkIL3oJQEdmmgkVhNTDpjAG9tLmFkb2JlEC54bXCglQAAPAA/eHBhY2tldAAgYmVnaW49IgDvu78iIGlkPQAiVzVNME1wQwBlaGlIenJlUwB6TlRjemtjOQBkIj8+Cjx4OgEACG1ldGEgeG2AbG5zOng9IuIKRjpgAcECLyIgQgR0AGs9IlhNUCBDAG9yZSA0LjQuADAtRXhpdjIiAD4KIDxyZGY6' $Check_Pic &= 'GFJERkQIoAE9ImgAdHRwOi8vd3cAdy53My5vcmcALzE5OTkvMDIQLzIyLSAELXN5AG50YXgtbnMjA0EIYwhEZXNjcmlAcHRpb24g4QFhgGJvdXQ9IiLgA0Ig5RNtcE1NxgtuBnOkIOAhL3hhcC+AMS4wL21tLykGMHN0RXaACDkGc1QBgLovUmVzb3VyAGNlRXZlbnQjCUkIZGPmB3B1cmwBwhlkYy9lbGVtFUAFc2AIMUoOR0lNwlBKIGdpbXCiBsAX8SoFdGlmhyVqEyEDghMPrB87GYIFYiQ6RG9jQnXBE0lEPSLhDzpAZG9jaWQ6QgE0AGNjYWYxMzUtAGVkZDAtNDJlADctYmMyYS1kADEyMzc2NmU4CGZiNUgJSW5zdDBhbmNlQQkgAi5pAeAINWNlN2YxNwBhLTFiNWMtNABmODQtODg0MQAtMjUwZDVhNiBlMjkyY0gIT3KyaaBSYWypEkEJZEAJADZiMGQyNjFjAC1hMTJlLTQ4AGM3LThmYzEtEDU0ZmMAAGRiMwQ2MUIJZGM6Rm8Icm1hwDlpbWFnYGUvcG5nAgMBLjoAQVBJPSIyLjDBJwJQbGF0ZgAGYGBAaW5kb3dzRwNUQGltZVN0YfEUMUA2ODkyNTMgADMgNDIxODhHAlZlDHJzsChRBTEwLjPeMpIBgRnhDEAMYZEqAAQBdQ46Q3JlYXRvgHJUb29sPSIhBBYgkQPmAU0ANWRhdCBhRGF0ZUAFMDIAMzowNzoxM1QAMTU6MDA6NTEYKzAygAD3Am9kaZxmed8C2wLhMyA8YxZoSGlz8Ad5IgEzNVNMZXHTAOMAbGnDACARYjE6YWMjDHNhdgxlZJMmpQFjaGFuXGdl8EMUKHUBac8gOgA4NDU2MjU5ZgAtZDZiNS00YgA2Zi04YTlkLQA1ZDRmZWMxNhBlNmJmWwRzb2aAdHdhcmVBZ3AUp7ASUCmyEiAopBop+wIYd2hlcRhAEC0wN6ItRxAzIi/EDi/Z' $Check_Pic &= 'Dv48kTb7EAMCKEaRSzIBoEv9kFAvplD0Eg8ADwAPAA8A/w8AAgBPBg8ADwAPAA8ATwb/DwAPAA8ADwAPAE8GDwAPAP8PAA8ATwYPAA8ADwAPAA8A/08GDwAPAA8ADwAPAE8GDwD/DwAPAA8ATwYPAA8ADwAPAP8PAE8GDwAPAA8ADwBPBg8A/w8ADwAPAA8ATwYPAA8ADwD/DwAPAE8GDwAPAA8ADwBPBv8PAA8ADwAPAA8ATwYPAA8A/w8ADwBPBi8BDwAPAA8ADwABAwCssTogAAAKAUBdAK3JCjwAP3hwYWNrZXQAIGVuZD0idyIAPz4l53wHAAAAAAZiS0dEAP8hQQCgvaeTQAQJcIBIWXMAAAsTwQAgAQCanBgABQd0AElNRQfnBw0NAAA12bTSJwAAAAERSURBVDjLALXUvUrDUBQAAODPmqV2cRDcAESk1MHBRxBcAHwDcVYRurnbAMlJVHyBgiKuAPoADn0AH8BFAKEWN59A/GtdAG4g1tSkST0QAC7cJF/OPffkADLhmArjPA5RAC/oPOEAL/FEABuDklcbogAuAIVxA70xs1vEAG1sREM3e3goAFPDSsH3qlieABQ4g3PcYa0sAFjFBbZQw0JeAHAupb41XGITAB/Yx9WoL3fCANY3sIpnnGE6ALHM6/DMG5qJAB5uhPnOKLCJAC/0cYpZ3CSwAO2hZDLBCo4CANjHYwLbS1ldACYY9+dxAAd4AMfuiHLlAoX6AJ3gFTt/7HxuADDOdCWjlX6AAFl9+In7cRo1AEr50RU4HH6BAF2sh1OjaHSTAGAr7Gi9BNbyAB/xDZYOU00wCIg/xMBLAElFTgBErkJggg==' $Check_Pic = _WinAPI_Base64Decode($Check_Pic) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Check_Pic) & ']') DllStructSetData($tSource, 1, $Check_Pic) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 5012) 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 & "\RectCheck_20x20.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Check_Pic Func _About_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $About $About &= 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAYAAACEYr13AAAACXBIWXMAAAsSAAALEgHS3X78AAADgklEQVQ4jYWS3UssZRzHv888zzwzOy+7O7O66q4WTQnKZoGg3ih4PLYdKAyKIiE4F0I30UVXEf0JdRWEXUZ0o3ddlBJeBNFNUhmiJ1nFl12do+uk7O7Mvs3M09WJ2g6n3+WP7/fD9/dC8ZgyDGN8aWlpdXl5+fNCofD+ycnJsO/7vwIIerWst6Gq6tMrKyvrjuM877oubm9voev6BwCeAnC/F/IfwOjo6LupVKqwu7uLcrmMcrmMi4sLQgh5TZKkO1EUfftPPe3xU1mWP4zj+NlSqYTDw0NUKhV0Oh0QQijnvBSG4Q9PSiDOz88b1WoVQgiEYQghBACAEAJKaeNxO+ut+wC6AAQhRBBCBABhmuafiqK82CvuHQEASpIk9eu6/oJlWdQwDCSTyRqAj+v1+ncAxP8BIlVV6/l8/m5/f3/atm1IkvTAdd1P4ziuPjEBYyxrWdZHCwsLn8zPzw+l02nk83lMT08P9vX13XNd12u1WgcAol4AsW17bmZm5usgCN50HEcbHByEaZowDAOSJCGTydj1ev1VRVEytVrtpziO248AZGRk5PXZ2dmvtre3n7u5uSGFQgHdbhe+78P3fTQaDQRBAFmW2fHx8dTY2Ngzrut+L4ToME3TxhYXFz/b3Nzsr1aryOVyqNVqaDT+fbF2u40wDMEYk8IwfMu27W+q1eoacxznHc/zcg8fPgSlFIlEApeXl38bhRBot9uYmprC3NwcVFXF/v4+XV9ff+/6+vpHNjQ09NLR0RGEEJBlGWdnZ7i8vARjDIQQEEJQLBZRLBbhOA6EEGCMgVI6u7q6+gWzLGv09PQUyWQSURSh1Wqh2+2CEAIAGB4ehm3bKJVKAADOOXZ2dhDHMZmYmHhFcl33QTabPcvlckG73YYkSVAUBZqmwTRNpFIpKIoCz/MwMDCAyclJ1Ot1NJtNWJYlsb29vbdN05wOguCuLMtvKIrSp6oq4ZyDUopOpwPDMKDrOjRNAyEEmUwGjDEcHByAAogZYxLn3E8kEn8kEol6KpWi6XSaWpYloiiKdV2n4+PjJJvNotvtwvM8+L6PjY2N31iz2fQJISVN025kWT4C8EutVjODIEgyxrQ4junW1tbLnPNFQggXQuDq6kqsra39XqlUVsijT6SUUs45Z4wplFJOCJEJITSOYxpFkRqG4Z1kMnmPc657nvdzs9n8Ughx+heduWqeDdOyegAAAABJRU5ErkJggg==' Local $bString = Binary(_WinAPI_Base64Decode($About)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\About1_16x20.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_About_Pic Func _Exit_Pic($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Exit $Exit &= 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAABdElEQVQ4ja2UO0vDUBiGn/ecnLbaWmgtRbxPLi6Cm4MuOghO4uDgILg7CG4Orm7+Av+Lo5sI7oqTiChRkdqa4+Clsa3RBF/4IJzke/LmuwTiklkEmkCULfQY0CmZMCjXDzA2BIT3gBfeC+/xn9fxeyDfbExHjaf1Ttgi6Ao01PWiX6UVUGjSJybrG1DGtuQKIVIUP84OzPWfuMrwsqy7jZ3OAKtAd72zSUvAPbAPlBKeWwGFAXCQDPSTQBnYA6aBHeAqMSNFRMApMEdXbd8dpgV+xjVoE2Q7gZnGRjYo5urj4wpyPfNTuTOF4oWrTayZfLGj6x9NcdXR3SQ30cvz1Ovj7RYIW6oe24HKdvPm8ty3mr63fWMTA9kljH1wtbFDWxqsop/mvN2UuArACPBVbAX5WVeb2DB9ZZf0Jb2BMgugM1C9DcwZ2eAP69ce7LgcUCG2kr71EpFC//636bXweWAeuEvJmgH0HShFMqYPOMpgTqDGG6xug+Rulk+sAAAAAElFTkSuQmCC' Local $bString = Binary(_WinAPI_Base64Decode($Exit)) If $bSaveBinary Then Local $hFile = FileOpen($sSavePath & "\Exit3_20x20.png", 18) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Exit_Pic Func _Shell32_39ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Shell32_39ico $Shell32_39ico &= 'iLRIAAABABBAQAFwIAAAKEIAABYAAMwAKAAYAJAAgAAYAVwPAgAAbP8DGwBaWFJgAFtXUd9bVlL/AFpVUf5ZVVD+C+AAYQH/YAH/WVRQYP5YVE/+4ABhAf8RYAH/WFNjAFdSTgz+VmAA4AD/VlJNoWEB/1ZRTWIBVeEAAWAAVVFM/1VQTIz/VGAA5QBUT0tiAIJTZABSTkr/U2AADeAA/mEBYQBRTUn+A2AA4QD/UUxI/1CBZgBH/k9LR/9gAJD+T0pG4QD/TuEAB2AA4QBoAO9OS0ZfAf0fXFdT71tXUuD+XFdS/+AAYwBhIfhWUf5gAGIi5ABiAGIhA+Mi5iFXU0/+V1P/4CBkImABYSBrImIhZQDiIPD+VFBLYQBmIuIhYyDW/uQhYABJ4AFJ4QBjIdxNSOEhYCPiIf5sI+IhE2Qi4CNH3/0fXVlUqP9dWGEAU2EA/uEA6eMhU/9gIv5lIuEh5CL/ZgBhReFD4yFlRGJDYUbgIp9lIeNE4SFjRWkiTP7gQt/iReIgYgDuQ2MiT2QiYEN/4iLlQ2oAYyHiQ2AA/R9eAFpV/15ZVf9f/eIAVGYAYSJhIOQiYgHhIv9gIGUA5UTmAOVE4SFlReJlB2UA4kTjIq6mnv+5ALCn/7eupf+qdKKaYSH+YgDgRmEirpKn4AOxqOMDoZliIhdgIWAg4QBK9gO4r6Z/8gEzEjgRMBBxAB8PCwBf+FpW/jAA8g9xAPIQNACNsCH+9hAyEVP+XLEQ/zQAcSF2M/EQcyJ2EHZENSIDMhEyI//EvLP/wgC6sv/AuK//v7y3rjERMwCzRPQBsfYBl7YzdET1AcHxAbauMRE/MwCxRDIjsxAfDwsAYVwkV/8AUP9gcgBW/kkwAP9fMQBaVXER/v+xADYRcCI0EXAydjMyM/QiP3Iz8iEzEXIAOTM1Ec3FAL3/zMS8/8rC4Ln/yMC3siGxM3QQAP7Nxr3/y8S7PfQBuDIRtTPxMvcDuv/4yMG48SGw' $Shell32_39ico &= 'RL9VHw8LAABiXVn/Yl1Y/8JhMABiXVf/8RAzEfxW/rYR8hC6EfUyMBJzAP+0EXUiNDNzRHMichEwAHNEAMa/t//VzcX/gNPLw//Cu7P3ZhE0AMa/uPMBzMP/3sHwATRWNiLxA9T0AfEDP3UzskSyVTIA/w8MAGNezFn+MAAxEP5idQCyEP8zAHERMhG0EfYQMxFxIfQz/3MRdSI1M3AytiJyM3VEdzP/d1WxZnMQPni+d7RV9BBzZh/yZnJn9UT/DwwAZV9aoN9kX1r+MAD/cQDvshA2EbIAtRD+sBAxAPIA73MQdjM2AHAR/jURcQC3M/+4VXYRtTN3EfVEeFWxEDZ4vzJnMBE3iTBW/GY4AO8fDwELAGZhW19lYFxw72VgW/IPuRBxAGP+XjERcQBzEfMQNhEwITgi/3UzcBFxEHUzuBD0MrAAtxD/cxB4Mzx4MBD6ZvMQOxE3VgNxIvEQVU/fWVNR//+PDwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8AAw8ADgDhsUIAegCysrJgAAPf0LOzs/9sA+8Be3v9BAAAgUPx8fH/+gz6+uoBgTm0tLTf/f9/s/8z9ADBHn8w/z//Mj//Px8AHwAfAP8fYQCnpwCn/29vb/9mZsZmcgBhA7CwsH8c/x8//x8fAB8A/x9mAOEaTEwATP8pKSn/Ly9AL/+srKz/DQD1wPX1/5+fn+Ik/xx//x8fAB8AHwD/H2EAYTslQCUl/yEhIWIAPYw9Pe4fAQDs7OxiBX//HP8fHwAfAB8A/x/lHyr8KirmH2FAEQBhQP8f/x//PxQPAA8ADwAPAA8A/w+zP8fxLzEgsR+rq6u/H7Af+KCgoD9APwA/AP8PDwD/DwAPAA8ADwAPAP8P/09yDeP/T/tPpqamPw0/AD8A//8PDwAPAA8ADwAPAA8A/w///w8/AD8APwA/AD8A/w//D/8PAA8ADwAPAA8ADwD/' $Shell32_39ico &= 'Dz8A/z8APwA/AD8APwD/Dw8ADwA/DwAPAA8ADwD/DzIAy8vgy//ExMQ/AD8APwD/PwA6ALEF/w8PAA8ADwAPAP8PAA8ADwD/D/8PPwA/AD8A/z8A/w//Dw8ADwAPAA8ADwD/DwD/Dz8APwA/AD8APwA/AP//Dw8ADwAPAA8ADwAPAP8Pfz8APwA/AD8APwA/APkPgrICAHoAs7Oz//r6HvpyAwF7e/2Tf+i5cwD/24wZ/9mDCAD/2IIH/9iBBwD/14AG/9d/BQD/134E/9iFFHD/6Lx//38/AM4/7ADEhv/djg//3UCND//ciw7AAA0A/9uKDP/biQwA/+i0Zv/78OAA//347//nsWXw/+i3c/8/PwD/P8gkAOKdJP/hlxb/AOCVFf/flBT/BN+TwACSEv/ekRISwD3w/wUA+/Hh8P/ekx3/Pz8AHwD/HwFmAOalK//knxwA/+OeG//jnRsQ/+KbGmAAGf/iwJoY//vz4+YfYSH44Zoi/xz/Hx8AHwAfAAP/H2IA78uA/+enYCL/56YhYCFgAKQAIP/mox//5aIAHv/vxXP//voI8f/84CDuwnH/+O/Mi/8c/x8fAB8AHwAD/x9mAPLUkP/qsgA0/+mtJ//qrQAm/+mrJf/oqgFhACT/56gj/+jArDD/78qAfxz/H///Hx8AHwD/H38AfwB/AP8f/w8ADwAPAA8ADwAPAP8PPwD/PwA/AD8APwA/AP8PDwAPAD8PAA8ADwAPAP8PNADLy+DL/8TExD8APwA/AP8/ADoAsQX/Dw8ADwAPAA8A/w8ADwAPAP8P/w8/AD8APwD/PwD/D/8PDwAPAA8ADwAPAP8PAP8PPwA/AD8APwA/AD8A//8PDwAPAA8ADwAPAA8A/w//PwA/AD8APwA/AD8A/w8PAP8PAA8ADwAPAA8A/w+/CT8A/z8APwA/AD8A/w8PAA8ADwAfDwAPAA8A/w//D+i5dNXwzxj6z9j6zxP/zz8A/z8A/w//Dw8A' $Shell32_39ico &= 'DwAPAA8ADwBHDwD/D/TPEP/c9M/b0/LPMACIC/fP9//PPwAHPwD/D/EPKLICAHoAs7Oz//r6AvoGA+OdJf/hlwAW/+CVFf/flAIUAwOTE//ekRIg//348P8FAPvw4OH/3pMdCjstAwF7A3v9j3/mpSv/5J8gHP/jnhuAhRr/BOKbgQEZ/+KaGBD/+/Pjhn/9+fBw/+GaI/9//z/KJO8Ay4D/56ci/+cMpiHAQsAApCD/5QCjH//loh7/7wDFc//++vH//AHAQe7Ccf/uy4oP/z8/AP8/zCXy1JD/AOuzNP/prSb/BOmsxACrJf/oqQAk/+ioI//orOAw/+7KgPo+/z8fAP8fAPMffwB/AH8A/x8fAB8A//8f/x9/AH8A/x8fAB8AHwAB/R/Ly8v/xMTE/38AfwBuAGEL/x8fAB8AHwD//x9/AH8A/x8/FA8ADwAPAP8PAA8A/w8/AD8APwA/AD8A/z8A/w8PAA8ADwAPAA8ADwD//w8/AD8APwA/AD8APwD/D38PAA8ADwAPAA8ADwAJALLAsrLf8fHx/wk/AH8/AD8APwA/ADIAMQfwD+9/HwkPAA8ADwAPAA8ADwAA4AC0tLRfcQixGD8Avz8APwA/AD8APwBwB9+xB/8fCQ8ADwAPAA8ADwAPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8AAQ8AF7CqADoA/xwA8ANMD0UOHw9hBYX/B9MDGwA=' $Shell32_39ico = _WinAPI_Base64Decode($Shell32_39ico) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Shell32_39ico) & ']') DllStructSetData($tSource, 1, $Shell32_39ico) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 16958) 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 & "\Shell32_39.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Shell32_39ico #EndRegion Embedded Gfx #Region Embedded Binary Data #Region TichySID Func _SIDClose() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDClose') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDClose Func _SIDOpen($Sid, $iSubsong = 1) Local $bSid If Not IsBinary($Sid) Then If Not FileExists($Sid) Then Return SetError(2, 0, 0) Local $hFileOpen = FileOpen($Sid, 0) If $hFileOpen = -1 Then Return SetError(-1, 0, 0) $bSid = FileRead($hFileOpen) FileClose($hFileOpen) Else $bSid = $Sid EndIf Local $tSid = DllStructCreate('byte[' & BinaryLen($bSid) & ']') DllStructSetData($tSid, 1, $bSid) Local $sType = BinaryToString(BinaryMid($bSid, 1, 4), 1) ConsoleWrite('-->-- Sid File Type : ' & $sType & @CRLF) Local $iVersion = Execute(BinaryMid($bSid, 5, 2)) ConsoleWrite('-->-- Sid File Version : ' & $iVersion & @CRLF) $iSubsongCount = Int(StringTrimLeft(BinaryMid($bSid, 15, 2), 2)) ConsoleWrite('-->-- SubsongCount : ' & $iSubsongCount & @CRLF) $iSubsong = $iSubsong - 1 If $iSubsong < 0 Then $iSubsong = 0 If $iSubsong > $iSubsongCount Then $iSubsong = 0 ConsoleWrite('-->-- Subsong : ' & $iSubsong & @CRLF) Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDOpen', 'ptr', DllStructGetPtr($tSid), 'int', DllStructGetSize($tSid), 'int', $SID_MEMORY, 'int', $SID_NON_DEFAULT, 'int', $iSubsong) If @error Then Return SetError(@error, 0, 0) $tSid = 0 $bSid = 0 Return $aRet[0] EndFunc ;==>_SIDOpen Func _SIDShutdown() MemoryDllClose($hTitchysidDll) $hTitchysidDll = 0 EndFunc ;==>_SIDShutdown Func _SIDStartup() $hTitchysidDll = MemoryDllOpen(TitchySIDdll()) If $hTitchysidDll = -1 Then Return SetError(1, 0, 0) Return SetError(0, 0, $hTitchysidDll) EndFunc ;==>_SIDStartup Func _SIDStop() Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDStop') If @error Then Return SetError(@error, 0, 0) Return $aRet[0] EndFunc ;==>_SIDStop Func _SIDGetFFTData($tFFTData) Local $aRet = MemoryDllCall ( $hTitchysidDll, 'int', 'SIDGetFFTData', "struct*", $tFFTData) If @error Then Return SetError ( @error, 0, 0 ) Return $aRet[0] EndFunc ;==> _SIDGetFFTData() Func TitchySIDdll($bSaveBinary = False, $sSavePath = @ScriptDir) Local $TitchySIDdll $TitchySIDdll &= 'UbwATVqQAAMAAACCBAAw//8AALgAOB0BAEAEOBkAAawOH7oADgC0Cc0huAEATM0hVGhpcyAAcHJvZ3JhbSAAY2Fubm90IGIAZSBydW4gaW4AIERPUyBtb2RAZS4NDQokBIYDgFUFlEc0a8cJA4JEAAPJK3jHVgAHMFJpY2gBEw17UEUAAABMAQQAoAEExF8FE+AADiELIAEFDAAWAAyqBrUDFBAEAzAEDQELAgPv4wEABQcAAAcGBgAPAxoHgRWGAwMDoDEAAPMLgY+AJzwZjvAGAEgXoKEOAIArNBgPLnRl5Hh0gANaFARIgXUHYgECACAAAGAucmTAYXRhAACTAWaBfU2BERqLE4DxQC6DCQBceKLASwF9wQsezgnAAC5yZWxvYwAAvDgBwzbCCQAazAlCsTw/PwA/AD8APwA/AC8AVYsE7LhBOl3CDABWCFfo6kABi/6Bx0JIQEuNTgi4QTz3ACED+DPA/wGDADkQdQKJAYlGAECDfjwAdUZmAGoAZv92mOjoAA4AADPJD7cFAHdOBRBmuSBOAPfhM9JmuQBMAPfxZoP4AHQGAIB+nAB1BbgggE4AAGa5RKzBAwC5QEIPAPfxiSBGPLgACEAOTkAAi9HR4gPWg8IASANOPDvIdhUxQAIrwVCiAyAOK8EAKUY86wyLRjwAUAFGQGoAj0ZQPFLolgCXuQEEOQBOQA+FZ////wAPv0ZIZokHZgCJRwKDxgKDxwAE4u1fXsP/dgAE6FYTAADDaiAgjUYMUMAB/1QAJBDCBAC+XEFYABDDQCAgH/DABzMAwIlGCFBQUGgBQFkQav+NRgRQJOgLAAfHRsAhAgBAg04g/42GQSOJAEYMagyPRhxoQDwkABDopUAH6AC//v//g34IAFB19WhUgQKQgAL+QEY662jo0eArjYBGLGoEjwBqog/I6LESQB5GMMAg4isA8YPgDzlGCHRgL4vIjb7BC8Mu4YAD+I2WSBAEYxwQ3wfZGgAag8IE' $TitchySIDdll &= 'EOL06FKADesJaiAF/zboX2AJ6IIBQAyAfjgAdJLoUg/gDmhOIRAOIAFfHF5d4BwjHOEBi/6AgH85AHQF6BwgBgCLdQhXgH0QACB1TWSLPWGEi38ACFcDfzyBx4gBgQEUJAMXi/ozAMlRVmoKsQNYAFEPt08Og8cQAGaD+QF2BzkHAHQFg8cI4vEPALd/BAP6WeLfAF4DN4tHBIlFEAz86LVgqYs8JABWD7ZWBw+3BAIy4DGUi0YKhsQIwcAQggCJR5aKAGYVweAIimYRAIpGD4lHmoDCAAID8otNDCvKEGaJT56ACpS4cwByBBBQA/jzpACLNCSL/mb30QBBA/nB6QLzpQBei3wkBGaDfwCYAHUT/3eW6ABnDAAAD7eGFAPAQSANmF6D72BqABhZg8YW86VfAIpFGPZFFAF0AAWKR5v+yIhHUDtmUGZhBjNgBjMCwGE9AxEAEFBQCOgREcA6B/5HOYFBJhQAVujf/QE4ADiLBlBq/1DoMvjAMujngABhRDheCsNiL+PiAUCHRkSAhcB17cMzwCABsMNW6KUgB4NAi2IIlDpegAKQQAHoxiFF4m0gAfzokWCooT3EOwDzq4lOCIhOOoUgajtgAJbokgsADmRq/IVK6J9AB+EISFugB2FIeWAP4QE45AF7k+IBIT3oJUACgH7APAAhikUIOkaacwAZiEY7ikY6iBBFCOhzoAWAfQhNQUBTIQrFQ+jwoAboIiYgAf91CEEuBABwUOgjDTAIMQFXJL6C8KAxi30IuWwgIhTzpPMlzAcAvrBxogQiNYPsFDAn7VE10MmJTfxBRYQgAzAhIEcXULED0CRHAgBmJf8PweAQiQBGBNFsJAQPkgBGCQ+2TwWLwWDB6AS6EHAGsCNCAMHgAolGCoPCECCA4Q/wAEqJRhIOQAIGUeYAFlgkAPCJRhKKRwSIAEYID7cHZrlnAAH34YkGg8cHgIPGLFnilVggBwABweAED7YPgADhBwPBweAFuQAA' $TitchySIDdll &= 'gAAAO8F2AQiRiUdwAVcDM8kAsQWLwtPoD5IAwIhEOQNBgPkACXXvgHcLAYAA4g+JVwy4PQoBICa2TwLA6QT3AOG5MzMBACvIQMHpCIlPENEN9EiJTfDwLumYQDVRAIsHAUcagWcaAeFIM8D2RwgIdAANiUcaiUcjxwRHJ0ABAP7JeQIQsQK4LNAQ9+GLIHQkBAPwUAICdAASi0Yaiw47wUBzCfcnM9LAUUcAGotHGjPJO0cABHcC/smITfkAwegTiEX70egAiEX6wegDOUdII3RVYAXRZ+ACiwBHJ8HoEg+SwgjB6AVADDLQCVcEJzMwA+8z0rADALEHshnrHyrQAP7IPAF1ArAEBFBR4AKKytPogwDgAVnT4AhF7wBY/smA+f913ACKRe+IRyux/wGAB8HoG3UDME2C+7AJBHQMgX7BgwQIcxEBikcIqBCAdAOKTfuoIGEAiPqoQGEA+aiAYAAgTyuITfgQFyKKAOixBPbhBAqLAAQ4jVcegP0AIHUSAQK4ARA5AgB8BYkC/kci6wA2gP0BdRMpAoiLRxJwIDkCf3QBEeACAnUMIgF0A/5ATyLrDSkC0KYEQaADfQKJAlkQQYGExp0ACYD5AnLwZQAHAHQbD7ZF+ACNQID3Zx7B+BAWgH8JIC4BRfAA6wMBRfRBg8eALIP5Aw+CX3BTAItN8MHhEItGABTB+Aj3ZgwrQMgrThiJTnIc8BDrE4sGYAGLfI4AEMH/CPfnAUQQjhRBgzAG6Iv+AcBX6xKAPwB0CqSLROAB+BDQBUdjEwDpi0X0A0Xw9whmCIuQLlUIwegAAmaJBEr/RfwAi0UMOUX8D4UC1iA5Xl9ei+VdFMIIsEpE8Es9Dd3AdQXGRDAKgCVQAACDfCQGAHQEZqD/RgjCBqF4sgA5AlahAhCKTCQSiAiMMMPwDg+2yIAA5PyA/NQPhZMB4Q/hHzP/gPkHAHILgPkNdwZHAIDpB+sQgPkOCfEAFHcgMAKA6Q4UgcaB' $TitchySIDdll &= 'N7gwWQD35wAD8A+2VCQSgAD5A3YFiBQx6wAoD7dGAoD5AQB3Aw+3BvbBAQB0BzLkweII64ACMsADwjPSkAEIdgFCwAxWgPkEFHUjQyvnoWHQ9kQAJBIBdQbGQiIAA+sKgHoiA3UaBLAAAFAOEEFXM8AhQFoIg/8DYGL/BgJ14Q0OAHUDwgoEALnQTgADTCQOASIBdBI7+XMOaiIBME8I6OPgGWaLkMgPt1aRA3dQQwMQEI1S/qCGUujEQeMBQv90JA7gALUD4AAgZGYLyDPAg4D/AXQND7ZGwAYkAnUQPUYEgAB0B4EjBgNmA8jpn1AHSZAIdzBDBQ1KIgVxQSMFg/8EdBXjAwUD4wMgA2aB4f8A6wJqMwRKg/8Id0VGdLBHsgEPt8HASwARMARQ6C0xBFBmQWPyAhABUegbEQGhCVkIZgvBgAN1Bw+2IE4FZgPBoAbrGSCD/wp1FFEFAnUCBuAEA+sHikQkUAyIRgMhBi2DAQsFcgTTUCPrG4P/ByRyCFMLAcOwIiQMUdAGUejZwAFf8BSLB8Ak0AEhXQhGBusFIPbQIEYGUSa2TggHIsngM04H/sUqZjATBEADpEADwgJgAP5GB3WBAeAHB1T+xFIMZ5ABw2AnOxL6YCczwABbuXNyAAUQK8/zqoHG2MMAAWChIXgrI3gAOAj+jsAgFesLx0YDUk2wVkCD+ANy8FMAIPNfBFdkHQygBb8CUPBcisjQ6HMEANDYJIfQ6IoEADhzA8DoBCQPAFCKwYDhj7IDIID5inQQAAIM0ADo0OgMIP7KdUj4/sJQAOxaICs6AEQPtnw4UolVAPyD/yR2I4P/IDdzHmoCIKj/dQj86I4ABoP/NXMgDIP/K3IwHC52SAKIBmATd08QiAYEsEDQIXcEsAHrghBRJQSwAusHcB4AdwKwgCLQD5QAwNHvcgKK0FIh0gRqCehBwARmmABmA0YIZolGAZhaI9JAOWCh6fzghYCD/w53MDPAMFVVMAUJ' $TitchySIDdll &= 'NQULgAAIMQUNATAFBNHvcwFCUkhQ6GRAIOnHQgMRAHcci9eD6g+AoMIDigQyUBFQUQsS2AA+6aYCAhN3FEiKRgbQU0YDoBhCBZEDjYIBFHULZscSRhAz6X3yABZ3fRB1G2aLsAlAZoug0GbB6AjwAhLhJphS6AtgABQXmvsQARvQC+QAi+AA4SgJRgEQZotWAWAEdAaDBH380Dtmy7kAiVYI6yWDffwADXUfagBmUugAYPv//2ZCZokURggCcFEAcMHgCABmCUYI6fsCAAAAg/8XdQ3ovQD9//+IRgbp6cECRBl3JeirACIAaBgB6KIBEANiAWaLJQAGQAGW6b8CUhp1AAuKRgSIRgfpgq8CHi8Ph5ABAQgAG3UI/k4E6eYKAAEMHAAMRgTp2aUCDB0BMgOIAA/JAg+qHgEPBwEPuQIPHwE5KAXprAIMIAE5BemKnwIMIQQ5BemPAg8AJHcai9eD6iMAgMIEigQyg/9AInUF6PT8AcgDAOtwg/8ldQUgAYAEZoP/JnUFMAGABFyD/yd1BQgBgARSg/8pdxZ1QAOABgL+DgCL/0A2/3X86BkAjeuAN4P/KnUFIgASQC2D/y13DYEwKwCAwgOIBDLrGwCD/y51BNHg61gC0eiBjYAcUAEc4KD6//8z0gAOc4BCCCh0IYAudByyAwGAbXYFg/8sdQQwsgTrDIBfgQYtdSACsgWKFAAUKnUAAiLQ6wRmi1YAATPAI9J1AUBgUGoC6P8AQoENAwAPthZmgeKAAEhSaICAdujngwt0AQAhLnIqM9IPtigGsgGBRwoCyiUACAHrDYEbBiRAsgBA6wIkAVBS6BKzwAzpFsJjMndHADPSM8mLz4PpADCAwQOKFDFSAGYr0GaJVgEPaJTBUcAdh4GJyBt3gcADM8BaOhZywSUoAehnwRLKwl00d4BRD7ZWBoDiwB8CMwAcgNAm6wckQAHQLsHiB4EKPAmACggWhlXC+f//AUArM9IiwHUBQqgk' $TitchySIDdll &= 'gFADGBZACVIAHgIOQV10g/82d29AdQQ0/4gGwBYDAAPC9kYGAXQBF8GaAjfBFeSAWQ+3Ri4BwHcEE8EPzkAFg/8ANXUID7ZGAyQAgOsJM8CAfgMsf3aALQMarYENtkYABovIJAGA4YCAM8FQakDomAAFAF+L5V3DVugbIPX//4HGAZ+KRAQkCgEXwIlGBP4ATgdmi0wkCGZAiU4IUOiBgAvoQnwAAesF6PGAAWYAg34IAXf0XsIABAC+gHIGEMNAVYvsgeyQwBBWAFfo6v///1aDQH4EAHUcM8BQiwjXuQoABtHq0dAA4vqJBL5HZoEA/wAEdebHRfwBwMwAm9vj20X8ANnr3sndXeCLAE0IiwQkiwSIAIt9FIt1DIsUAI6JFIeLfRiLBHUQwwLi4FgzwFBAiUXowAD4AgkYAN1F4NtF+N75aN1dyIAU/gAf4AndAEXI3snZ+91dkLDdXcCAAdnggQGAqN1duPdd/OIDGqgBDqAgBmAQAN1FBeAEiIAC3V2Q3UUQwN2dcMAI3UW4CN2deAABi0X8iRBF9DPJgnLdRaAI3UWQgAdFiN7pWN1dmIABQgeYQgegbN2FIQbAA4VBCCEEgAtDAmUKgGUK9IvQAyBF6IlF8GAH2QQChyEKgNkEht7JPYEG2IICgAGCAoAD3sEA3V3Q2QSX3UUA2N7p2RyH2QTQlt1F0EEBhkACAAOw3sHZHKADYASWQQEAlv9F9EE7TegYD4JLoQ3gKkX4AQBF/DlN/A+CDg3iD/igKOAC0WX4OSBN+A+GtSAnX14RQELCFACgOYPsWKBWV8dFqCAeP4EkAAgAALgABAAAQcAuweAC6AagBYEAxvgfAACNVawAM8mJNIoD8EEggPkFdfXgOdnrAQIy2V3si3UIiwB9rItV/EqLTRD8iwSOQA7ZRegQx0X0AEBT20X03N75YAGhQGEByaMGgAdRYAGJTfTjAFXiAPlY2f/ZQTaBAOnAABzAj+Kwi3WsIQkA' $TitchySIDdll &= 'AACLVfSLytHiiwAElot9vIkEj4pCIgG4IAGLTfgAIQA5TfR12/91sAD/dbT/dbj/dcC8/3X46EkAu8AJiNlF7OAJ/tldwRKdo0f0YBRBDYEAXeQABIHAA1Xg2V3Y2aAXMuSgK13cYAXgigCLJH0MYQ91tAEOTfiQK8qLDGQciU2hAFNgBaIWXdSqAunhDuCh4QLIi3WwfQfMbgcBoQLQ2UXU2UXc6NlFzIFD2WBAQV7AA/hdxNmgQCED4QEjA2MEgF3A2UXA2cBBG/7EwQBCRskIYAvECIAFwgiu4BQJAhavCY/BBVWiJO/AAuAFgByhCtyCJiICIgMvIAQhA2EKIQPYwAnR6TEDNQ+FqqAwQSp9sACLRQzZBtlV1FzZB6AEIg1BAemkDRhoi1X4wD7qIF6CAwQCl8UQkEnZBIjZQPrZHIh19TMtCAAA/yUIMAAQ/1QlAFIABFIAEFIAFFVSABhSABxSACBSACT1UgAoUgAsUACRJg8ADwD/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8APw8ADwAPAA8ADwABAL4waAAAzjAAsDAAAQDyQXAACDEAABYwACZVMAA+MABOMABgMAB62zAADQB8dAMBAOSxADAA+ow4AYowA3AjDwC/B78HAb8HACMAQ2xvcwBlSGFuZGxlAABWAENyZWF0ZRRUaGAAZNB7AldhAGl0Rm9yU2luAGdsZU9iamVjAHQAa2VybmVsADMyLmRsbAAAAL8Ad2F2ZU91AHRHZXRQb3NpgHRpb24AAMJVAUBPcGVuAMPVAFCAYXVzZQAAxPYAgHJlcGFyZUjQBiBlcgAAxXUBUmVAc2V0AADG+AB0FGFyEAHKFQFVbnCFuwPLlQFXcml0MAZgd2lubW0jCgwAoAgBxF9xACIyAADVYVQJNADIMBHs8RVwASDPEwAAGDAABBQIAAArMADlEQAAqq/wAFIwAL8wAGcwAKo3cAJFMABOMABcMACq' $TitchySIDdll &= 'aDAAcDAAeTAAgTAARoswABEGAgADsGsFEAAGAAeAbHRpdABjaHlzaWRfZSB4dHJhcyIKU0kARENoYW5nZVN4b25n0gBRGYEAUBVGQEZURGF0YdQAUPByb3BzsQCSFXAAMxUxgQBsYXlxAMASdW3hEgFTdG9wfyIPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPABcPAAMA0R5EgJoQsQIBMB8QAOmkYS6PABefD/YJvwaPAAW+BMkDhQHCAAB5AGEAIAATAAAMAKSmbTyxAB5bFPoMygg+AAcuBu8E+wH9AACeAH8AKgAZAfADBCBUMA2ABOCQAyJUM3EA8AB1AAI7cQAAIkQzDcjIRAARcwCpAXEAcAEBdQAmMYeaDgkEAAEMCgcIBQIDAA0GCxQTBAgWABcFCRgSBgwZACIHDTgfACQtACEBDjIgAgoxABwDCzgqFRURAC0yMSMaHR4bADg3OC4zLzQQACwoKSclJjUP+CswNj8PDwAPAA8ADwD/DwAPAA8ADwAPAA8ADwAPAAcPAA8ADQBOsAAAEAAAKAAAAABMMP4wFjE/MQBUMdYxmzICMwBZMzE0UTSZNEAcOmk6cT8AgCABAggAGjQgNCY0ACw0MjQ4ND40AEQ0SjRQNFY0AwAwtAE=' $TitchySIDdll = _WinAPI_Base64Decode($TitchySIDdll) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($TitchySIDdll) & ']') DllStructSetData($tSource, 1, $TitchySIDdll) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 8704) 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 & "\TitchySID.dll", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_TitchySIDdll Func API_FreeLibrary($Module) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'FreeLibrary', 'handle', $Module) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_FreeLibrary Func API_GetProcAddress($Module, $Procname) If IsNumber($Procname) Then Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'int', $Procname) Else Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'str', $Procname) EndIf If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_GetProcAddress Func API_IsBadReadPtr($Ptr, $Len) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'IsBadReadPtr', 'ptr', $Ptr, 'UINT_PTR', $Len) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_IsBadReadPtr Func API_LoadLibrary($Filename) Local $Ret = DllCall($_KERNEL32DLL, 'handle', 'LoadLibraryW', 'wstr', $Filename) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_LoadLibrary Func API_lstrlenA($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenA', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenA Func API_lstrlenW($Address) Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenW', 'ptr', $Address) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_lstrlenW Func API_VirtualProtect($Address, $Size, $Protection) Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'VirtualProtect', 'ptr', $Address, 'dword_ptr', $Size, 'dword', $Protection, 'dword*', 0) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_VirtualProtect Func API_ZeroMemory($Address, $Size) Local $Ret = DllCall($_KERNEL32DLL, 'none', 'RtlZeroMemory', 'ptr', $Address, 'dword_ptr', $Size) If @error Then Return SetError(@error, @extended, 0) Return $Ret[0] EndFunc ;==>API_ZeroMemory Func MemLib_BuildImportTable($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_IMPORT = 1 Local Const $SizeOfPtr = DllStructGetSize(DllStructCreate('ptr', 1)) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ImportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_IMPORT * $SizeOfDataDirectory Local $ImportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ImportDirectoryPtr) Local $ImportSize = DllStructGetData($ImportDirectory, 'Size') Local $ImportVirtualAddress = DllStructGetData($ImportDirectory, 'VirtualAddress') Local $SizeOfImportDir = DllStructGetSize(DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR)) Local $ImportList = '' If $ImportSize > 0 Then Local $ImportDescPtr = $CodeBase + $ImportVirtualAddress While 1 If API_IsBadReadPtr($ImportDescPtr, $SizeOfImportDir) Then ExitLoop Local $ImportDesc = DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR, $ImportDescPtr) Local $NameOffset = DllStructGetData($ImportDesc, 'Name') If $NameOffset = 0 Then ExitLoop Local $Name = Peek('str', $CodeBase + $NameOffset) Local $OriginalFirstThunk = DllStructGetData($ImportDesc, 'OriginalFirstThunk') Local $FirstThunk = DllStructGetData($ImportDesc, 'FirstThunk') Local $Handle = API_LoadLibrary($Name) If $Handle Then $ImportList &= $Handle & ',' Local $FuncRef = $CodeBase + $FirstThunk Local $ThunkRef = $CodeBase + $OriginalFirstThunk If $OriginalFirstThunk = 0 Then $ThunkRef = $FuncRef While 1 Local $Ref = Peek('ptr', $ThunkRef) If $Ref = 0 Then ExitLoop If BitAND(Peek('byte', $ThunkRef + $SizeOfPtr - 1), 0x80) Then Local $Ptr = API_GetProcAddress($Handle, BitAND($Ref, 0xffff)) Else Local $IMAGE_IMPORT_BY_NAME = DllStructCreate($tagIMAGE_IMPORT_BY_NAME, $CodeBase + $Ref) Local $NamePtr = DllStructGetPtr($IMAGE_IMPORT_BY_NAME, 2) Local $FuncName = Peek('str', $NamePtr) Local $Ptr = API_GetProcAddress($Handle, $FuncName) EndIf If $Ptr = 0 Then Return SetError(1, 0, False) Poke('ptr', $FuncRef, $Ptr) $ThunkRef += $SizeOfPtr $FuncRef += $SizeOfPtr WEnd Else Return SetError(1, 0, False) EndIf $ImportDescPtr += $SizeOfImportDir WEnd EndIf Return $ImportList EndFunc ;==>MemLib_BuildImportTable Func MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $VirtualAddress = DllStructGetData($Section, 'VirtualAddress') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $PointerToRawData = DllStructGetData($Section, 'PointerToRawData') If $SizeOfRawData = 0 Then Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SectionAlignment, $MEM_COMMIT, $PAGE_READWRITE) API_ZeroMemory($Dest, $SectionAlignment) Else Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SizeOfRawData, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr + $PointerToRawData, $Dest, $SizeOfRawData) EndIf DllStructSetData($Section, 'VirtualSize', $Dest - $CodeBase) $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_CopySections Func MemLib_FinalizeSections($CodeBase, $PEHeader) Local Const $IMAGE_SCN_MEM_EXECUTE = 0x20000000 Local Const $IMAGE_SCN_MEM_READ = 0x40000000 Local Const $IMAGE_SCN_MEM_WRITE = 0x80000000 Local Const $IMAGE_SCN_MEM_NOT_CACHED = 0x4000000 Local Const $IMAGE_SCN_CNT_INITIALIZED_DATA = 64 Local Const $IMAGE_SCN_CNT_UNINITIALIZED_DATA = 128 Local Const $PAGE_WRITECOPY = 0x0008 Local Const $PAGE_EXECUTE_WRITECOPY = 0x0080 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader') Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections') Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment') Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader For $i = 1 To $NumberOfSections Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr) Local $Characteristics = DllStructGetData($Section, 'Characteristics') Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData') Local $Executable = (BitAND($Characteristics, $IMAGE_SCN_MEM_EXECUTE) <> 0) Local $Readable = (BitAND($Characteristics, $IMAGE_SCN_MEM_READ) <> 0) Local $Writeable = (BitAND($Characteristics, $IMAGE_SCN_MEM_WRITE) <> 0) Local $ProtectList[8] = [$PAGE_NOACCESS, $PAGE_EXECUTE, $PAGE_READONLY, $PAGE_EXECUTE_READ, $PAGE_WRITECOPY, $PAGE_EXECUTE_WRITECOPY, $PAGE_READWRITE, $PAGE_EXECUTE_READWRITE] Local $Protect = $ProtectList[$Executable + $Readable * 2 + $Writeable * 4] If BitAND($Characteristics, $IMAGE_SCN_MEM_NOT_CACHED) Then $Protect = BitOR($Protect, $PAGE_NOCACHE) Local $Size = $SizeOfRawData If $Size = 0 Then If BitAND($Characteristics, $IMAGE_SCN_CNT_INITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfInitializedData') ElseIf BitAND($Characteristics, $IMAGE_SCN_CNT_UNINITIALIZED_DATA) Then $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfUninitializedData') EndIf EndIf If $Size > 0 Then Local $PhysicalAddress = $CodeBase + DllStructGetData($Section, 'VirtualSize') API_VirtualProtect($PhysicalAddress, $Size, $Protect) EndIf $SectionPtr += DllStructGetSize($Section) Next EndFunc ;==>MemLib_FinalizeSections Func MemLib_FreeLibrary($ModulePtr) If Not MemLib_Vaild($ModulePtr) Then Return 0 Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') Local $DllEntry = DllStructGetData($Module, 'DllEntry') Local $Initialized = DllStructGetData($Module, 'Initialized') Local $ImportListPtr = DllStructGetData($Module, 'ImportList') Local $ExportListPtr = DllStructGetData($Module, 'ExportList') If $Initialized And $DllEntry Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 0, 'ptr', 0) DllStructSetData($Module, 'Initialized', 0) EndIf If $ExportListPtr Then _MemGlobalFree($ExportListPtr) If $ImportListPtr Then Local $ImportList = StringSplit(Peek('str', $ImportListPtr), ',') For $i = 1 To $ImportList[0] If $ImportList[$i] Then API_FreeLibrary($ImportList[$i]) Next _MemGlobalFree($ImportListPtr) EndIf If $CodeBase Then _MemVirtualFree($CodeBase, 0, $MEM_RELEASE) DllStructSetData($Module, 'CodeBase', 0) DllStructSetData($Module, 'ExportList', 0) _MemGlobalFree($ModulePtr) Return 1 EndFunc ;==>MemLib_FreeLibrary Func MemLib_GetExportList($CodeBase, $PEHeader) Local Const $IMAGE_DIRECTORY_ENTRY_EXPORT = 0 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $ExportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_EXPORT * $SizeOfDataDirectory Local $ExportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ExportDirectoryPtr) Local $ExportSize = DllStructGetData($ExportDirectory, 'Size') Local $ExportVirtualAddress = DllStructGetData($ExportDirectory, 'VirtualAddress') Local $ExportList = '' If $ExportSize > 0 Then Local $IMAGE_EXPORT_DIRECTORY = DllStructCreate($tagIMAGE_EXPORT_DIRECTORY, $CodeBase + $ExportVirtualAddress) Local $NumberOfNames = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfNames') Local $NumberOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfFunctions') Local $AddressOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfFunctions') If $NumberOfNames = 0 Or $NumberOfFunctions = 0 Then Return '' Local $NameRef = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNames') Local $Ordinal = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNameOrdinals') For $i = 1 To $NumberOfNames Local $Ref = Peek('dword', $NameRef) Local $Idx = Peek('word', $Ordinal) Local $FuncName = Peek('str', $CodeBase + $Ref) If $Idx <= $NumberOfFunctions Then Local $Addr = $CodeBase + Peek('dword', $CodeBase + $AddressOfFunctions + $Idx * 4) $ExportList &= $FuncName & Chr(1) & $Addr & Chr(1) EndIf $NameRef += 4 $Ordinal += 2 Next EndIf Return $ExportList EndFunc ;==>MemLib_GetExportList Func MemLib_GetProcAddress($ModulePtr, $FuncName) Local $ExportPtr = Peek('ptr', $ModulePtr) If Not $ExportPtr Then Return 0 Local $ExportList = Peek('str', $ExportPtr) Local $Match = StringRegExp($ExportList, '(?i)' & $FuncName & '\001([^\001]*)\001', 3) If Not @error Then Return Ptr($Match[0]) Return 0 EndFunc ;==>MemLib_GetProcAddress Func MemLib_LoadLibrary($DllBinary) $DllBinary = Binary($DllBinary) Local $DllData = DllStructCreate('byte[' & BinaryLen($DllBinary) & ']') Local $DllDataPtr = DllStructGetPtr($DllData) DllStructSetData($DllData, 1, $DllBinary) Local $IMAGE_DOS_HEADER = DllStructCreate($tagIMAGE_DOS_HEADER, $DllDataPtr) If DllStructGetData($IMAGE_DOS_HEADER, 'e_magic') <> 0x5A4D Then Return SetError(1, 0, 0) EndIf Local $PEHeader = $DllDataPtr + DllStructGetData($IMAGE_DOS_HEADER, 'e_lfanew') Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) If DllStructGetData($IMAGE_NT_HEADER, 'Signature') <> 0x4550 Then Return SetError(1, 0, 0) EndIf Switch DllStructGetData($IMAGE_NT_HEADER, 'Magic') Case 0x10B If @AutoItX64 Then Return SetError(2, 0, 0) Case 0x20B If Not @AutoItX64 Then Return SetError(2, 0, 0) EndSwitch Local $ImageBase = DllStructGetData($IMAGE_NT_HEADER, 'ImageBase') Local $SizeOfImage = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfImage') Local $SizeOfHeaders = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfHeaders') Local $AddressOfEntryPoint = DllStructGetData($IMAGE_NT_HEADER, 'AddressOfEntryPoint') Local $ModulePtr = _MemGlobalAlloc(DllStructGetSize(DllStructCreate($tagModule)), $GPTR) If $ModulePtr = 0 Then Return SetError(3, 0, 0) Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = _MemVirtualAlloc($ImageBase, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then $CodeBase = _MemVirtualAlloc(0, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE) If $CodeBase = 0 Then Return SetError(3, 0, 0) DllStructSetData($Module, 'CodeBase', $CodeBase) _MemVirtualAlloc($CodeBase, $SizeOfImage, $MEM_COMMIT, $PAGE_READWRITE) Local $Base = _MemVirtualAlloc($CodeBase, $SizeOfHeaders, $MEM_COMMIT, $PAGE_READWRITE) _MemMoveMemory($DllDataPtr, $Base, $SizeOfHeaders) MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr) Local $LocationDelta = $CodeBase - $ImageBase If $LocationDelta <> 0 Then MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local $ImportList = MemLib_BuildImportTable($CodeBase, $PEHeader) If @error Then MemLib_FreeLibrary($ModulePtr) Return SetError(2, 0, 0) EndIf Local $ExportList = MemLib_GetExportList($CodeBase, $PEHeader) Local $ImportListPtr = _MemGlobalAlloc(StringLen($ImportList) + 2, $GPTR) Local $ExportListPtr = _MemGlobalAlloc(StringLen($ExportList) + 2, $GPTR) DllStructSetData($Module, 'ImportList', $ImportListPtr) DllStructSetData($Module, 'ExportList', $ExportListPtr) If $ImportListPtr = 0 Or $ExportListPtr = 0 Then MemLib_FreeLibrary($ModulePtr) Return SetError(3, 0, 0) EndIf Poke('str', $ImportListPtr, $ImportList) Poke('str', $ExportListPtr, $ExportList) MemLib_FinalizeSections($CodeBase, $PEHeader) Local $DllEntry = $CodeBase + $AddressOfEntryPoint DllStructSetData($Module, 'DllEntry', $DllEntry) DllStructSetData($Module, 'Initialized', 0) If $AddressOfEntryPoint Then Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 1, 'ptr', 0) If Not $Success[0] Then MemLib_FreeLibrary($ModulePtr) Return SetError(4, 0, 0) EndIf DllStructSetData($Module, 'Initialized', 1) EndIf Return $ModulePtr EndFunc ;==>MemLib_LoadLibrary Func MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta) Local Const $IMAGE_DIRECTORY_ENTRY_BASERELOC = 5 Local Const $IMAGE_REL_BASED_HIGHLOW = 3 Local Const $IMAGE_REL_BASED_DIR64 = 10 Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader) Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY)) Local $RelocDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_BASERELOC * $SizeOfDataDirectory Local $RelocDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $RelocDirectoryPtr) Local $RelocSize = DllStructGetData($RelocDirectory, 'Size') Local $RelocVirtualAddress = DllStructGetData($RelocDirectory, 'VirtualAddress') If $RelocSize > 0 Then Local $Relocation = $CodeBase + $RelocVirtualAddress While 1 Local $IMAGE_BASE_RELOCATION = DllStructCreate($tagIMAGE_BASE_RELOCATION, $Relocation) Local $VirtualAddress = DllStructGetData($IMAGE_BASE_RELOCATION, 'VirtualAddress') Local $SizeOfBlock = DllStructGetData($IMAGE_BASE_RELOCATION, 'SizeOfBlock') If $VirtualAddress = 0 Then ExitLoop Local $Dest = $CodeBase + $VirtualAddress Local $Entries = ($SizeOfBlock - 8) / 2 Local $RelInfo = DllStructCreate('word[' & $Entries & ']', $Relocation + 8) For $i = 1 To $Entries Local $Info = DllStructGetData($RelInfo, 1, $i) Local $Type = BitShift($Info, 12) If $Type = $IMAGE_REL_BASED_HIGHLOW Or $Type = $IMAGE_REL_BASED_DIR64 Then Local $Addr = DllStructCreate('ptr', $Dest + BitAND($Info, 0xFFF)) DllStructSetData($Addr, 1, DllStructGetData($Addr, 1) + $LocationDelta) EndIf Next $Relocation += $SizeOfBlock WEnd EndIf EndFunc ;==>MemLib_PerformBaseRelocation Func MemLib_Vaild($ModulePtr) Local $ModuleSize = DllStructGetSize(DllStructCreate($tagModule)) If API_IsBadReadPtr($ModulePtr, $ModuleSize) Then Return False Local $Module = DllStructCreate($tagModule, $ModulePtr) Local $CodeBase = DllStructGetData($Module, 'CodeBase') If Not $CodeBase Then Return False Return True EndFunc ;==>MemLib_Vaild Func MemoryDllCall($Module, $RetType, $FuncName, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) Local $Ret, $OpenFlag = False Local Const $MaxParams = 20 If (@NumParams < 3) Or (@NumParams > $MaxParams * 2 + 3) Or (Mod(@NumParams, 2) = 0) Then Return SetError(4, 0, 0) If Not IsPtr($Module) Then $OpenFlag = True $Module = MemoryDllOpen($Module) If @error Then Return SetError(1, 0, 0) EndIf Local $Addr = MemLib_GetProcAddress($Module, $FuncName) If Not $Addr Then Return SetError(3, 0, 0) Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Addr) Switch @NumParams Case 3 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 5 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 7 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 9 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 11 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 13 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall ( $_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 5 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ' )' $Ret = Execute($DllCallStr) EndSwitch Local $Err = @error If $OpenFlag Then MemoryDllClose($Module) Return SetError($Err, 0, $Ret) EndFunc ;==>MemoryDllCall Func MemoryDllClose($Module) MemLib_FreeLibrary($Module) EndFunc ;==>MemoryDllClose Func MemoryDllOpen($DllBinary) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Local $Module = MemLib_LoadLibrary($DllBinary) If @error Then Return SetError(@error, 0, -1) Return $Module EndFunc ;==>MemoryDllOpen Func MemoryFuncCall($RetType, $Address, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0) If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit() Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Address) Local $Ret Switch @NumParams Case 2 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi) Case 4 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1) Case 6 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2) Case 8 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3) Case 10 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4) Case 12 $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5) Case Else Local $DllCallStr = 'DllCall($_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1 For $i = 4 To @NumParams Step 2 $DllCallStr &= ', $Type' & $n & ', $Param' & $n $n += 1 Next $DllCallStr &= ')' $Ret = Execute($DllCallStr) EndSwitch Return SetError(@error, 0, $Ret) EndFunc ;==>MemoryFuncCall Func MemoryFuncInit() Local $KernelHandle = API_LoadLibrary('kernel32.dll') API_FreeLibrary($KernelHandle) Local $HookPtr = API_GetProcAddress($KernelHandle, $_MFHookApi) Local $HookSize = 7 + @AutoItX64 * 5 $_MFHookPtr = $HookPtr $_MFHookBak = DllStructCreate('byte[' & $HookSize & ']') If Not API_VirtualProtect($_MFHookPtr, $HookSize, $PAGE_EXECUTE_READWRITE) Then Return False DllStructSetData($_MFHookBak, 1, Peek('byte[' & $HookSize & ']', $_MFHookPtr)) If @AutoItX64 Then Poke('word', $_MFHookPtr, 0xB848) Poke('word', $_MFHookPtr + 10, 0xE0FF) Else Poke('byte', $_MFHookPtr, 0xB8) Poke('word', $_MFHookPtr + 5, 0xE0FF) EndIf Return True EndFunc ;==>MemoryFuncInit Func Peek($Type, $Ptr) If $Type = 'str' Then $Type = 'char[' & API_lstrlenA($Ptr) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & API_lstrlenW($Ptr) & ']' EndIf Return DllStructGetData(DllStructCreate($Type, $Ptr), 1) EndFunc ;==>Peek Func Poke($Type, $Ptr, $Value) If $Type = 'str' Then $Type = 'char[' & (StringLen($Value) + 1) & ']' ElseIf $Type = 'wstr' Then $Type = 'wchar[' & (StringLen($Value) + 1) & ']' EndIf DllStructSetData(DllStructCreate($Type, $Ptr), 1, $Value) EndFunc ;==>Poke #EndRegion #EndRegion #Region SID Tune ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _SID_Tune($bSaveBinary = False, $sSavePath = @ScriptDir) Local $SID_Tune $SID_Tune &= 'DrkAUFNJRAACAHwAAAAQABADAAEDABAAAFVuaWNvcoBuZmxha2VzAUABDABT+HJlbiBMgHVuZCAoU28AFgIpCz4yMDE2IENAYW1lbG90EHwABAAUAgoQTH0RTADqEUwNEq2WiaCSlZqtIAwAAwUvDgEAABJICQAWJzhLAF9ziqG61PAOAC1OcZa95xNCAHSp4Btam+IsAHvOJ4XoUcE3ALQ3xFf1nE4JANCjgm5oboivAOs5nBOhRgTcANDcEF7WcjgmAEKMCLiguCC8AKzkcEyEGBBwAEBwQHhYyOCYsAgwIC4BQgQAAgMACgMBAAQAAAUFBQYABgYHBwgICQkACgoLDA0NDg8AEBESExQVFxgAGhsdHyAiJCcAKSsuMTQ3Oj4AQUVJTlJXXGIAaG51fIOLk5wApa+5xNDd6vim/R5wHgANGAIDFwMDBjEDAxUAqKkPjfMAEbklEAqqvQYAF417Eb0HF40AfBG5KRCNIxAArSQQjTIWjWcAErktEI1PEbkAMRCNVhG5NRAAjV0RogAgwREEogcBAQ6pAZ0+ABGdORGdZRGpAAKdDxGpBJ0SABGpAJ04EZ0TABGdTRGdPBEgAC0STFwUpftIAKX8SKkACQCNgBjUog4gqRNAEAUAAQAAAWiF/GiFzPtggwjABiUSwAYAAQIAAAFMBhK9OxEA8OJMyhSp/50AOhGdJRG8ExEAucYXnWMRuc4IF50QQRsjEZ0UABGdOxGdKBGdACkRue4XnScRALn2F50mEakDAcAj4ADQGbnmFwCNF9S53hcp8ACN8RG51heNaAFADo1vEb04EckAwPAjub4XnQYA1J0/ELm2F50ABdSdPhCpCZ0oBNS9gDBOAzRgvCBiEbkIGEQJAxgITJYSQiRMQxMpAB+dDhH+PBHIAEwuE/Dqyf3wSCGwaEIeqYDAK4wmeoIsSCWsekULKX8jwEnEAr1mEUBQvT5AEdAJIMoUQx69ADkQhfu9OhCFAPy8PBGx' $SID_Tune &= '+8n7ALCfybCwT8mAALDFyWCwh50kKQEPvQ6BYMiAB//QuAj+T4ErAAXAERABNwAQ8CfJIPAvyQBQ8EpgTC0SvQAPEfCVyQLwCASQA8BUTJYUTCGaFAUQYsErhx0DGIAshcMB3gATORHwwqEHPhjgBmQhAiFhJYIEvWWIEUkBIEGouXshGQjeOREgBfASyf4U8AkABD5gDDsUqQb+QCaiAUxFFMjJCLCQN8AjOOmwnZJiwAb+F8AIMAXCA6dgJMAFoB7wNgM/PpAhSqKAILogHfAP5Qo/EhCgBT4QAA+9UBEpoAVREaAFT6AFMBkAqLlMGJ05ELkAZRidOhBMJhQAsfudTxGoTGmRwBD/8PIgMU0RgCcz4AHqGGYRgTHgKEDQuhTgCxKETAAVwSU9QCMgFBFMCBUAYTsRYL0UEdDwYT3ATA8lQFK8YFQOF+AfH5AgDJg4+TqBVqhMAOIUnWcRKfedCD0QuSACZBH+YwARvCURMBO9JggRGHmAKiYRvSdEEXngKicRvQAFCADQOr0kERh9TggRfWQgGqi5ThAAGH0mEY14EbkArhB9JxGNeREgvRIR8CtgOiSQAGKteBGdANStAHkRnQHUTDEWU2AKwAG9ZOAHJ0QCTAD0FaT7uU8QOAT5TsApua8Q+a5lISo94T1KaYFpIDvwAAmoiEb8ZvuIABD5/hIRpfudgFIRpfydUxFBCgoogAlSwSC9KRF9ZlOBIYAOGH3AIgIPfQGAIwHUvSMR3iOIEdBP4woYaQHgClMgCeMHOP3lB/38Bw8F6QfeQnlYrGgR8ABTuZYX0Bu5ngAXjXYRjRbUuVCuF/BAIHqowAKNoHcRTI0WgQQu4AMQGG1vEaB8uaYXBm0gBYMFlhfNdxFgzncR0A3gBqcGvAAQEfBeuWYX0AAjuXIXnTwQnQAD1CnwnTsQnYAC1LmKF/BDYI0CqMADnRERTPAWZYEFMeAEGH0ABGMEfhwXfYAG4gbABN0RETTeEUEM' $SID_Tune &= 'ioGUBAe9PyIQ4Ie9PhBAjL09BBA9wFoE1GADAwL/AgAJ/olB/okASUmIiP8RIUGDBQBqASFB/hH+AAIQ/gAA/EAADgz8AMICAAQFCQAAgWHQCQgABAcLYQGQBwcLCEi9ICBiAAAIJCQABEDACICGIOBGgCLeAAMC/2YAAgMCAAYHIAYJCgsKZgPAWCAwKMCQgPYAAgMIBAAGVwV3yrhpAGmZbXkAAgULwBcjJigAATAIIAhgAAEFBwfhfQQA8SMEAOtnEABAsAFABQGgAAQDoHAoBQEEAgEABgME/wAVCBUWFjkABQYHCMMBdZAKFxcYGDkA8AoCDHF2/wF+g8H/AD17qMbzHElnAJS99yFSiMLsQB1TbomcGAAAGVUBABoCABsBABwBAIYAYSb+/4FiGmAA/mEa/oMt/oGAYBpi/oJhGLIA2WEBg2GEAPwBgeMA0gNCE9ABE/6EK9ABE2fTAbEAYQGEYYQA/AGBVeMAH9EDF9ABF7MFF6+4B2ABswf/AYHjACPRA+oc0AEcswUcuAdgAbMHBf8BgeMAKP7/hWICPdABPv45/mA7ALH7/D37Y/5hADn+NP5rNrBpIPth/mA3QAE5Ygj7sGPAAP+FZy8EsHmAAC3+L/5gADKy+/w0+7BhIPv+MmX+UAr/hSMTBNEEQP470AFgPUpiwASw0ARnNgAE/gBhNP42/j7+PSPABsACMbNhIAIyZwMiBJABsGX+MmH+ji+xBNIGkgD+/4YPCtsPCgUKhg8KCAqGDwoPCp0FCoYPCg8KYg9iMQAKZjKQAwQKsPtRBfEAPYkwBj5iUQo9sPvQAoA5/mM2/GA3QgeyZZADYzuhBYACMoADVDRkYAFlkQhkAQQvWP4xsJAL0A40kAJhwXADNPv8NmaBDkQPIdEHYy+wZ0AKLfsA/C/+ZTRh/jJ3cAWgAwoDZWYSYQo1B2JmNFAL0A6wYHAPEQ82/7EWrwyvDK8MkAOvDK8Mogz+hq8MrwypDAkD' $SID_Tune &= 'rwyvDKMMAIdhKrT+MbT+UC20/jKCADaCADkCtKEBJrT+L7T+DisSAYAApwGGYSr+6jHQIzJQADZQAHEg0EEoL/4rwAAvJQE=' $SID_Tune = _WinAPI_Base64Decode($SID_Tune) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($SID_Tune) & ']') DllStructSetData($tSource, 1, $SID_Tune) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 3373) 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 & "\Unicornflakes.sid", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_SID_Tune #EndRegion ;---------------------------------------------------------------------------------------- Func _SetCtrlColorMode($hWnd, $bDarkMode = True, $sName = Default) If $sName = Default Then $sName = $bDarkMode ? 'DarkMode_Explorer' : 'Explorer' $bDarkMode = Not Not $bDarkMode ; https://www.vbforums.com/showthread.php?900444-Windows-10-Dark-Mode-amp-VB6-apps If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) Local Enum $eDefault, $eAllowDark, $eForceDark, $eForceLight, $eMax ; enum PreferredAppMode DllCall('uxtheme.dll', 'bool', 133, 'hwnd', $hWnd, 'bool', $bDarkMode) ; fnAllowDarkModeForWindow = 133 DllCall('uxtheme.dll', 'int', 135, 'int', ($bDarkMode ? $eForceDark : $eForceLight)) ; fnAllowDarkModeForApp = 135 _WinAPI_SetWindowTheme_unr($hWnd, $sName) ; https://www.autoitscript.com/forum/index.php?showtopic=211475&view=findpost&p=1530103 DllCall('uxtheme.dll', 'none', 104) ; fnRefreshImmersiveColorPolicyState = 104 ; not needed ? _SendMessage($hWnd, $WM_THEMECHANGED, 0, 0) ; not needed ? EndFunc ;==>_SetCtrlColorMode ;---------------------------------------------------------------------------------------- Func _WinAPI_SetWindowTheme_unr($hWnd, $sName = Null, $sList = Null) ;Causes a window to use a different set of visual style information than its class normally uses Local $sResult = DllCall('UxTheme.dll', 'long', 'SetWindowTheme', 'hwnd', $hWnd, 'wstr', $sName, 'wstr', $sList) If @error Then Return SetError(@error, @extended, 0) If $sResult[0] Then Return SetError(10, $sResult[0], 0) Return 1 EndFunc ;==>_WinAPI_SetWindowTheme_unr ;---------------------------------------------------------------------------------------- Func _WinAPI_DwmSetWindowAttribute_unr($hWnd, $iAttribute, $iData) ;Sets the value of the specified attributes for non-client rendering to apply to the window Local $aCall = DllCall('dwmapi.dll', 'long', 'DwmSetWindowAttribute', 'hwnd', $hWnd, 'dword', $iAttribute, 'dword*', $iData, 'dword', 4) If @error Then Return SetError(@error, @extended, 0) If $aCall[0] Then Return SetError(10, $aCall[0], 0) Return 1 EndFunc ;==>_WinAPI_DwmSetWindowAttribute_unr ;---------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------------------------------------------- ; https://www.autoitscript.com/forum/topic/211475-darkmode-udf-for-autoits-win32guis/#comment-1530103 ;-------------------------------------------------------------------------------------------------------------------------------- Func DarkMode($hGui, $bDarkMode = True) ; DarkMode Local Enum $DWMWA_USE_IMMERSIVE_DARK_MODE = (@OSBuild <= 18985) ? 19 : 20 ;ConsoleWrite("$DWMWA_USE_IMMERSIVE_DARK_MODE=" & $DWMWA_USE_IMMERSIVE_DARK_MODE & @CRLF) ; DWMWA_USE_IMMERSIVE_DARK_MODE ; https://learn.microsoft.com/en-us/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute ; Use with DwmSetWindowAttribute. Allows the window frame for this window to be drawn in dark mode colors when the dark mode system setting is enabled. ; For compatibility reasons, all windows default to light mode regardless of the system setting. ; The pvAttribute parameter points to a value of type BOOL. TRUE to honor dark mode for the window, FALSE to always use light mode. ; This value is supported starting with Windows 11 Build 22000. Local $iRet = _WinAPI_DwmSetWindowAttribute_unr($hGui, $DWMWA_USE_IMMERSIVE_DARK_MODE, $bDarkMode) If Not $iRet Then Return SetError(1, 0, -1) _SetCtrlColorMode($hLV, $bDarkMode) If $bDarkMode Then ; $hGUI GUISetBkColor(0x1B1B1B, $hGui) ;0x1B1B1B Black Else ; $hGUI GUISetBkColor(0xF0F0F0, $hGui) ;0xF0F0F0 Honeydew EndIf _WinAPI_RedrawWindow($hGui, 0, 0, $RDW_UPDATENOW) ;WinActivate("[CLASS:Progman;]") ; To refresh the frame. ;WinActivate($hGui) ; Only needed for the constant back and forth in this demo. EndFunc ;==>DarkMode The tool should also work for different DPI settings and in multi-monitor environment. Thanks to for testing: argumentum BugFix Kanashius Mombas After starting, the desktop icons are read in and displayed in a list. With the left mouse button you can start the app, with the right mouse button you have additional options, like starting the app with administrative rights. The source code and the compiled exe file are additionally located on my One Drive: Toolbar Desktop Works best when compiled!
    1 point
  13. experimentally: #include <GUIConstantsEx.au3> #include <WinAPIGdi.au3> #include <WindowsConstants.au3> #include <WinAPIEx.au3> #include <Timers.au3> Global $hGUI, $idColor1, $idColor2, $idColor3 Example() Func Example() ; Create a GUI. $hGUI = GUICreate("HLS Rainbow Controls Example", 500, 300, -1, -1, $WS_POPUP) $idColor1 = GUICtrlCreateLabel("", 0, 0, 500, 30, -1, $GUI_WS_EX_PARENTDRAG) $idColor2 = GUICtrlCreateLabel("", 0, 100, 500, 30) $idColor3 = GUICtrlCreateLabel("", 0, 200, 500, 30) Local $idBtn = GUICtrlCreateButton("CLOSE", 400, 250, 85, 30) ; Display the GUI. GUISetState(@SW_SHOW, $hGUI) ; set timer to check every nnn Local $i_TimerInterval = 40 _Timer_SetTimer($hGUI, $i_TimerInterval, "_TimerCheck") ; Register the time-based color update function. AdlibRegister("RandomColorViaTimer", 40) ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idBtn ExitLoop EndSwitch DoBorder() WEnd ; Cleanup ConsoleWrite("Killed All Timers? " & _Timer_KillAllTimers($hGUI) & @CRLF) AdlibUnRegister("RandomColorViaTimer") GUIDelete($hGUI) EndFunc ;==>Example Func RandomColorViaTimer() Local Const $iHueSpeed = 3 Local Const $iMaxHLS = 240 Local Const $iLuminance = 120 Local Const $iSaturation = 240 Local Static $iHue = 0 Local Static $hTimer = TimerInit() ; Calculate Hue $iHue = Mod($iHue + $iHueSpeed, $iMaxHLS) ; Time for a full Hue cycle If $iHue = 0 Then ConsoleWrite("<< << << Adlib: Time for a full Hue cycle: " & Round(TimerDiff($hTimer) / 1000, 3) & " seconds >> >> >>" & @LF) $hTimer = TimerInit() EndIf ; Convert HLS (0-240) to RGB Local $iColorRef = _WinAPI_ColorHLSToRGB($iHue, $iLuminance, $iSaturation) Local $sRGB = '0x' & Hex(_WinAPI_ColorHLSToRGB($iHue, $iLuminance, $iSaturation), 6) ; Apply Colors GUICtrlSetBkColor($idColor1, $sRGB) Local $sRef = _ColorRef($sRGB) ConsoleWrite("Adlib: " & $sRef & @CRLF) EndFunc ;==>RandomColorViaTimer ; Timer call back function Func _TimerCheck($hWnd, $iMsg, $iIDTimer, $iTime) #forceref $hWnd, $iMsg, $iIDTimer, $iTime Local Const $iHueSpeed = 3 Local Const $iMaxHLS = 240 Local Const $iLuminance = 120 Local Const $iSaturation = 240 Local Static $iHue = 160 Local Static $hTimer = TimerInit() ; Calculate Hue (reverse to fit with DoBorder) $iHue -= $iHueSpeed If $iHue < 0 Then $iHue = $iMaxHLS ; Time for a full Hue cycle If $iHue = $iMaxHLS Then ConsoleWrite("<< << << Timer: Time for a full Hue cycle: " & Round(TimerDiff($hTimer) / 1000, 3) & " seconds >> >> >>" & @LF) $hTimer = TimerInit() EndIf ; Convert HLS (0-240) to RGB Local $iColorRef = _WinAPI_ColorHLSToRGB($iHue, $iLuminance, $iSaturation) Local $sRGB = '0x' & Hex(_WinAPI_ColorHLSToRGB($iHue, $iLuminance, $iSaturation), 6) ; Apply Colors GUICtrlSetBkColor($idColor2, $sRGB) Local $sRef = _ColorRef($sRGB) ConsoleWrite("Timer: " & $sRef & @CRLF) EndFunc ;==>_TimerCheck Func DoBorder() Local Const $fSpeed = 4 Local Const $fInverseSpeed = 1 / $fSpeed Local Static $fHue ;the border col will be calculated based on the time elapsed from a single timer. Local Static $hTimer = TimerInit() Local Static $hTimer1 = TimerInit() Local Static $fLastTime Local $fCurTime = TimerDiff($hTimer) Local $fTimerSec = ($fCurTime - $fLastTime) / 1000 If $fTimerSec < 1 / 25 Then Return ;Slow down processing (do not needlessly refresh faster than 25hz) $fLastTime = $fCurTime ;Hue is a value between 0 and 1. ;Its value is based on the internal timer.. $fHue += ($fTimerSec * $fInverseSpeed) If $fHue >= 1 Then $fHue -= Int($fHue) ConsoleWrite("<< << << Bordr: Time for a full Hue cycle: " & Round(TimerDiff($hTimer1) / 1000, 3) & " seconds >> >> >>" & @LF) $hTimer1 = TimerInit() EndIf ;T = transition value. So RGB values are all based on this. ;We want RGB values to be between 0 and 1. Local $fT = 6 * $fHue Local $fR = Abs($fT - 3) - 1 Local $fG = 2 - Abs($fT - 2) Local $fB = 2 - Abs($fT - 4) ;Max values out at 0 and 1. $fR = ($fR < 0) ? 0 : ($fR > 1) ? 1 : $fR $fG = ($fG < 0) ? 0 : ($fG > 1) ? 1 : $fG $fB = ($fB < 0) ? 0 : ($fB > 1) ? 1 : $fB ;RGB is now a percentage of max values $fR *= 255 $fG *= 255 $fB *= 255 ;Construct RGB Value. (reverse order due to endianness!) Local $iRGB = BitOR(BitShift(Int($fB), -16), BitShift(Int($fG), -8), Int($fR)) GUICtrlSetBkColor($idColor3, $iRGB) Local $sRef = _ColorRef($iRGB) ConsoleWrite("Bordr: " & $sRef & @CRLF) EndFunc ;==>DoBorder Func _ColorRef($sRGB) ; Optionaly RGB analysis Local $iHue, $iLuminance, $iSaturation _WinAPI_ColorRGBToHLS($sRGB, $iHue, $iLuminance, $iSaturation) Local $R = _WinAPI_GetRValue($sRGB) Local $G = _WinAPI_GetGValue($sRGB) Local $B = _WinAPI_GetBValue($sRGB) Local $iAutoItColor = _WinAPI_RGB($R, $G, $B) Local $sHexColor = "0x" & Hex($iAutoItColor, 6) Local $sRef = "HLS(" & $iHue & "," & $iLuminance & "," & $iSaturation & ") => RGB(" & $R & "," & $G & "," & $B & ") => " & $sHexColor Return $sRef EndFunc ;==>_ColorRef
    1 point
  14. So maybe i just haven't been looking hard enough, but i could not find how to make toast notifications in win8+ from AutoIt. I looked at it on and off, and finally made some progress. Github repository: https://github.com/genius257/au3toast Zip download: https://github.com/genius257/au3toast/archive/52f6eb0c5e6543777e19010a6c64f46e4dbe8fe0.zip I am still working on event support, but would like some feedback from the forum so far Thanks!
    1 point
×
×
  • Create New...