Jump to content

Leaderboard

Popular Content

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

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