Jump to content

Toolbar Desktop v0.80 build 2023-08-31 beta


UEZ
 Share

Recommended Posts

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.0.0)
#pragma compile(ProductVersion, 3.3.16.1)
#pragma compile(LegalCopyright, "UEZ 2022 - 2023")
#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=p
#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 <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.80 build 2023-08-31 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

#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, $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 Const $hBMP_Restart = _GDIPlus_BitmapCreateFromMemory(_Restart_Pic(), True)
Global Const $hBMP_About = _GDIPlus_BitmapCreateFromMemory(_About_Pic(), True)
Global Const $hBMP_Exit = _GDIPlus_BitmapCreateFromMemory(_Exit_Pic(), True)
Global Const $hBMP_Check = _GDIPlus_BitmapCreateFromMemory(_Check_Pic(), True)
Global Const $hBMP_Rect = _GDIPlus_BitmapCreateFromMemory(_Rect_Pic(), True)
_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)

Global $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)

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 _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 = 0x000000
                                $tNMLVCUSTOMDRAW.ClrTextBk = 0x98FF98
                            Else     ; Other rows
                                $tNMLVCUSTOMDRAW.ClrText = 0x000000
                                $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

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!

Edited by UEZ
Code update

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

  • UEZ changed the title to Toolbar Desktop v0.80 build 2023-08-19 beta

Is there a bug in the ShellExecute code?

Using x64 works.

#AutoIt3Wrapper_UseX64=y
ShellExecute("C:\Users\Public\Desktop\Oracle VM VirtualBox.lnk")

But x86 fails:

EM.jpg

I normally work with x64 and just tested x86 and discovered this problem. Tested on 3.3.16.1 and Win11 22H2 x64.

 

Same issue when using _WinAPI_ShellExecute().

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

10 minutes ago, ioa747 said:

Edition    Windows 10 Pro  Version    22H2   AutoIt Version..: 3.3.16.1
work in both case

;~ #AutoIt3Wrapper_UseX64=y
ShellExecute("C:\Users\Public\Desktop\")

 

Thanks for testing but opening only the folder works here, too, but not when executing the LNK.

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

My problem is that this does not apply to every item in the list - only a few that do not work, including Oracle VM VirtualBox.lnk.

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

To inform, I tested with both x86 and x64 compiles. I have 42 items on my Desktop.

My Windows version is Windows 11 Pro 22H2 version 22621.2213

I had no issue with either the x86 or the x64 compile. Programs and URL's opened as expected.

 

Even though this is old information, I'm going to put it out there anyway . . . because this is Windows.

have you tried rebooting your PC?

Link to comment
Share on other sites

Thanks @nend and @Shark007 for testing. Reboot didn't solve the problem - I don't know what's going on here...

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

1 hour ago, ioa747 said:

special permissions
ShellExecute(@WindowsDir & "\explorer.exe", "C:\Users\Public\Desktop\Oracle VM VirtualBox.lnk")

Thanks @ioa747 - that version works. I still don't understand why x64 works and x86 doesn't with ShellExecute. If it's a permission thing, then it shouldn't work for x64 either.

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

I don't know why, it seemed strange to me too, I just noticed that in the folder C:\Users\Public\Desktop, I don't have normal rights,
even with the main account that has administrator rights.
When I went to change them, something told me about Inherited Permissions.
https://www.google.com/search?q=Inherited Permissions

 

I know that I know nothing

Link to comment
Share on other sites

I used Process Monitor to see what is happening and this is the result:

EM.jpg

I don't know the reason why ShellExecute or some other instances try to open the x86 Program Files folder although the target is "C:\Program Files\Oracle\VirtualBox\VirtualBox.exe" in the LNK file. Now I understand why it fails.

 

Anyhow, I changed the code to @ioa747's suggestion.

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

5 hours ago, ioa747 said:

I don't know why, it seemed strange to me too, I just noticed that in the folder C:\Users\Public\Desktop, I don't have normal rights,
even with the main account that has administrator rights.
When I went to change them, something told me about Inherited Permissions.
https://www.google.com/search?q=Inherited Permissions

 

In wondering why . . . out loud . . . maybe it is related to the language of the OS.

I'm guessing that UEZ' OS is not US English where as my system is US English.

Link to comment
Share on other sites

10 hours ago, Shark007 said:

I'm guessing that UEZ' OS is not US English where as my system is US English.

Nope, my OS is English because I'm using the company notebook. 

 

I assume it is a Wow64 redirection issue of x64 installed programs when running the code as x86. I don't know why LNK files are redirected although the target is absolute defined in the LNK file.

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites