first commit

This commit is contained in:
Tyleo Dv. Delaware 2024-02-18 22:17:39 +01:00
commit f696262406
500 changed files with 143551 additions and 0 deletions

0
ADB-FB-GUI/ADBGui.au3 Executable file
View file

0
ADB-FB-GUI/FastBootGui.au3 Executable file
View file

0
ADB-FB-GUI/MainMenu.au3 Executable file
View file

BIN
ADB-FB-GUI/exec/adb/AdbWinApi.dll Executable file

Binary file not shown.

Binary file not shown.

BIN
ADB-FB-GUI/exec/adb/adb.exe Executable file

Binary file not shown.

BIN
ADB-FB-GUI/exec/adb/fastboot.exe Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,4 @@
The .dll files here are distributed by Microsoft Corporation as part of the
Windows Driver Kit (available at
http://www.microsoft.com/whdc/resources/downloads.mspx) and included here as
permitted by the Microsoft Software License Terms.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,169 @@
;
; Android WinUsb driver installation.
;
[Version]
Signature = "$Windows NT$"
Class = AndroidUsbDeviceClass
ClassGuid = {3F966BD9-FA04-4ec5-991C-D326973B5128}
Provider = %ProviderName%
DriverVer = 08/28/2014,11.0.0000.00000
CatalogFile.NTx86 = androidwinusb86.cat
CatalogFile.NTamd64 = androidwinusba64.cat
[ClassInstall32]
Addreg = AndroidWinUsbClassReg
[AndroidWinUsbClassReg]
HKR,,,0,%ClassName%
HKR,,Icon,,-1
[Manufacturer]
%ProviderName% = Google, NTx86, NTamd64
[Google.NTx86]
;Google Nexus One
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
;Google Nexus S
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE7
;Google Glass
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9001
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9001&MI_01
;Project Tango (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4D00
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D02&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D04&MI_02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D06&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D07
[Google.NTamd64]
;Google Nexus One
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
;Google Nexus S
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
;Google Nexus Q
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
;Google Nexus (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE7
;Google Glass
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9001
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9001&MI_01
;Project Tango (generic)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4D00
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D02&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D04&MI_02
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D06&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D07
[USB_Install]
Include = winusb.inf
Needs = WINUSB.NT
[USB_Install.Services]
Include = winusb.inf
AddService = WinUSB,0x00000002,WinUSB_ServiceInstall
[WinUSB_ServiceInstall]
DisplayName = %WinUSB_SvcDesc%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\WinUSB.sys
[USB_Install.Wdf]
KmdfService = WINUSB, WinUSB_Install
[WinUSB_Install]
KmdfLibraryVersion = 1.9
[USB_Install.HW]
AddReg = Dev_AddReg
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}"
[USB_Install.CoInstallers]
AddReg = CoInstallers_AddReg
CopyFiles = CoInstallers_CopyFiles
[CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"
[CoInstallers_CopyFiles]
WinUSBCoInstaller2.dll
WdfCoInstaller01009.dll
[DestinationDirs]
CoInstallers_CopyFiles=11
[SourceDisksNames]
1 = %DISK_NAME%,,,\i386
2 = %DISK_NAME%,,,\amd64
[SourceDisksFiles.x86]
WinUSBCoInstaller2.dll = 1
WdfCoInstaller01009.dll = 1
[SourceDisksFiles.amd64]
WinUSBCoInstaller2.dll = 2
WdfCoInstaller01009.dll = 2
[Strings]
ProviderName = "Google, Inc."
SingleAdbInterface = "Android ADB Interface"
CompositeAdbInterface = "Android Composite ADB Interface"
SingleBootLoaderInterface = "Android Bootloader Interface"
WinUSB_SvcDesc = "Android USB Driver"
DISK_NAME = "Android WinUsb installation disk"
ClassName = "Android Device"

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,4 @@
The .dll files here are distributed by Microsoft Corporation as part of the
Windows Driver Kit (available at
http://www.microsoft.com/whdc/resources/downloads.mspx) and included here as
permitted by the Microsoft Software License Terms.

Binary file not shown.

Binary file not shown.

Binary file not shown.

118
ADB-FB-GUI/exec/install.bat Executable file
View file

@ -0,0 +1,118 @@
@ECHO off
CLS
TITLE 15 seconds ADB Installer v1.4.3
COLOR 17
ECHO ###############################################################################
ECHO # #
ECHO # 15 seconds ADB Installer #
ECHO # #
ECHO # version 1.4.3 #
ECHO # #
ECHO # by Snoop05 - Snoop05B@gmail.com #
ECHO # #
ECHO # Android Debug Bridge version 1.0.32 (MM) #
ECHO # Google USB Driver version 11.0.0000.00000 #
ECHO # #
ECHO # http://forum.xda-developers.com/showthread.php?t=2588979 #
ECHO # #
ECHO ###############################################################################
:Q1
ECHO(
SET /P ANSWER=Do you want to install ADB and Fastboot? (Y/N)
IF /i {%ANSWER%}=={y} (GOTO Q2)
IF /i {%ANSWER%}=={yes} (GOTO Q2)
IF /i {%ANSWER%}=={n} (GOTO DRV)
IF /i {%ANSWER%}=={no} (GOTO DRV)
ECHO(
ECHO Bad answer! Use only Y/N or Yes/No
GOTO Q1
:Q2
ECHO(
SET /P ANSWER=Install ADB system-wide? (Y/N)
IF /i {%ANSWER%}=={y} (GOTO ADB_S)
IF /i {%ANSWER%}=={yes} (GOTO ADB_S)
IF /i {%ANSWER%}=={n} (GOTO ADB_U)
IF /i {%ANSWER%}=={no} (GOTO ADB_U)
ECHO(
ECHO Bad answer! Use only Y/N or Yes/No
GOTO Q2
:ADB_U
ECHO(
ECHO Installing ADB and Fastboot ... (current user only)
ECHO(
ADB kill-server > NUL 2>&1
SET /a COUNT=0
IF EXIST %WINDIR%\adb.exe DEL %WINDIR%\adb.exe /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
IF EXIST %WINDIR%\AdbWinApi.dll DEL %WINDIR%\AdbWinApi.dll /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
IF EXIST %WINDIR%\AdbWinUsbApi.dll DEL %WINDIR%\AdbWinUsbApi.dll /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
IF EXIST %WINDIR%\fastboot.exe DEL %WINDIR%\fastboot.exe /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
XCOPY adb\adb.exe %USERPROFILE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
XCOPY adb\AdbWinApi.dll %USERPROFILE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
XCOPY adb\AdbWinUsbApi.dll %USERPROFILE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
XCOPY adb\fastboot.exe %USERPROFILE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
ECHO %COUNT% file(s) copied.
:PATH_U
ECHO %PATH% > PATH.TMP
ver > nul
FIND "%USERPROFILE%\adb" PATH.TMP > nul 2>&1
IF %ERRORLEVEL% LSS 1 GOTO DRV
VER | FIND "5.1" > NUL 2>&1
IF %ERRORLEVEL% LSS 1 xp\SETX.exe PATH "%PATH%;%USERPROFILE%\adb" 2>>%USERPROFILE%\Desktop\adb-installer.log && GOTO DRV
SETX PATH "%PATH%;%USERPROFILE%\adb" 2>>%USERPROFILE%\Desktop\adb-installer.log
GOTO DRV
:ADB_S
ECHO(
ECHO Installing ADB and Fastboot ... (system-wide)
ECHO(
ADB kill-server > NUL 2>&1
SET /a COUNT=0
IF EXIST %WINDIR%\adb.exe DEL %WINDIR%\adb.exe /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
IF EXIST %WINDIR%\AdbWinApi.dll DEL %WINDIR%\AdbWinApi.dll /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
IF EXIST %WINDIR%\AdbWinUsbApi.dll DEL %WINDIR%\AdbWinUsbApi.dll /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
IF EXIST %WINDIR%\fastboot.exe DEL %WINDIR%\fastboot.exe /f /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log
XCOPY adb\adb.exe %SYSTEMDRIVE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
XCOPY adb\AdbWinApi.dll %SYSTEMDRIVE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
XCOPY adb\AdbWinUsbApi.dll %SYSTEMDRIVE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
XCOPY adb\fastboot.exe %SYSTEMDRIVE%\adb\ /y /q 1>nul 2>>%USERPROFILE%\Desktop\adb-installer.log && SET /a COUNT=%COUNT%+1
ECHO %COUNT% file(s) copied.
:PATH_S
ECHO %PATH% > PATH.TMP
ver > nul
FIND "%SYSTEMDRIVE%\adb" PATH.TMP > nul 2>&1
IF %ERRORLEVEL% LSS 1 GOTO DRV
VER | FIND "5.1" > NUL 2>&1
IF %ERRORLEVEL% LSS 1 xp\SETX.exe PATH "%PATH%;%SYSTEMDRIVE%\adb" /m 2>>%USERPROFILE%\Desktop\adb-installer.log && GOTO DRV
SETX PATH "%PATH%;%SYSTEMDRIVE%\adb" /m 2>>%USERPROFILE%\Desktop\adb-installer.log
:DRV
DEL PATH.TMP
ECHO(
SET /P ANSWER=Do you want to install device drivers? (Y/N)
IF /i {%ANSWER%}=={y} (GOTO DRIVER)
IF /i {%ANSWER%}=={yes} (GOTO DRIVER)
IF /i {%ANSWER%}=={n} (GOTO FINISH)
IF /i {%ANSWER%}=={no} (GOTO FINISH)
ECHO Bad answer! Use only Y/N or Yes/No
GOTO DRV
:DRIVER
IF DEFINED programfiles(x86) GOTO x64
:x86
ECHO(
ECHO Installing 32-bit driver ...
ECHO Please continue driver installation ...
PING localhost -n 1 >NUL
START /wait driver\DPInst_x86 /f 2>>%USERPROFILE%\Desktop\adb-installer.log
GOTO FINISH
:x64
ECHO(
ECHO Installing 64-bit driver ...
ECHO Please continue driver installation ...
PING localhost -n 1 >NUL
START /wait driver\DPInst_x64 /f 2>>%USERPROFILE%\Desktop\adb-installer.log
:FINISH
ECHO(
ECHO All done!
CALL :LOG %USERPROFILE%\Desktop\adb-installer.log
:LOG
IF %~z1 == 0 DEL %USERPROFILE%\Desktop\adb-installer.log /f /q > nul 2>&1
PING localhost -n 2 >NUL
EXIT

BIN
ADB-FB-GUI/exec/xp/SETX.exe Executable file

Binary file not shown.

View file

@ -0,0 +1,23 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "TyleoAboutMe.au3"
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
#include-once
#cs ----------------------------------------------------------------------------
Author: BB_19
Material Themes for MetroGUI UDF
If you want to create your own themes, check out flatcolors.net, you can find there many random material/flat colors :)
#ce ----------------------------------------------------------------------------
;#Set Default Theme
Global $GUIThemeColor = "0x13161C" ; GUI Background Color
Global $FontThemeColor = "0xFFFFFF" ; Font Color
Global $GUIBorderColor = "0x2D2D2D" ; GUI Border Color
Global $ButtonBKColor = "0x00796b" ; Metro Button BacKground Color
Global $ButtonTextColor = "0xFFFFFF" ; Metro Button Text Color
Global $CB_Radio_Color = "0xFFFFFF" ;Checkbox and Radio Color (Box/Circle)
Global $GUI_Theme_Name = "DarkTealV2" ;Theme Name (For internal usage)
Global $CB_Radio_Hover_Color = "0xD8D8D8" ; Checkbox and Radio Hover Color (Box/Circle)
Global $CB_Radio_CheckMark_Color = "0x1a1a1a" ; Checkbox and Radio checkmark color
Func _SetTheme($ThemeSelect = "DarkTeal")
$GUI_Theme_Name = $ThemeSelect
Switch ($ThemeSelect)
Case "LightTeal"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTeal"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTealV2"
$GUIThemeColor = "0x13161C"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x35635B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkRuby"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x712043"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightTeal"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x336058"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightCyan"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x0D5C63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightBlue"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x1A4F70"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnight"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x3C4D66"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlue"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlueV2"
$GUIThemeColor = "0x040D11"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightBlue"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x244E80"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightCyan"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkCyan"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGray"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x3F5863"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGreen"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x2E7D32"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreen"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreenV2"
$GUIThemeColor = "0x061319"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightRed"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xc62828"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGray"
$GUIThemeColor = "0x1B2428"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x4F6772"
$ButtonBKColor = "0x607D8B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkAmber"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xffa000"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightOrange"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xBC5E05"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkOrange"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xC76810"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPurple"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkPurple"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPink"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xE91E63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case Else
ConsoleWrite("Metro-UDF-Error: Theme not found, using default theme." & @CRLF)
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
$GUI_Theme_Name = "DarkTealV2"
EndSwitch
EndFunc ;==>_SetTheme

View file

@ -0,0 +1,495 @@
;======================================
;~ Author : binhnx
;~ Created : 2014/10/20
;======================================
;~ Modified : BB_19
;~ Last modified : 2017/10/07
;======================================
#include-once
#include <WinAPI.au3>
#include <WinAPIShellEx.au3>
Local $_cHvr_aData[0]
Local Const $_cHvr_HDLLCOMCTL32 = _WinAPI_LoadLibrary('comctl32.dll')
Assert($_cHvr_HDLLCOMCTL32 <> 0, 'This UDF requires comctl32.dll')
Local Const $_cHvr_PDEFSUBCLASSPROC = _WinAPI_GetProcAddress($_cHvr_HDLLCOMCTL32, 'DefSubclassProc')
Local Const $_cHvr_PINTERNALSUBCLASS_DLL = DllCallbackRegister('_cHvr_iProc', 'NONE', 'HWND;UINT;WPARAM;LPARAM;DWORD')
Local Const $_cHvr_PINTERNALSUBCLASS = DllCallbackGetPtr($_cHvr_PINTERNALSUBCLASS_DLL)
OnAutoItExitRegister("_cHvr_Finalize")
Local Const $_cHvr_TSUBCLASSEXE = Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86')
Local Const $_cHvr_HEXECUTABLEHEAP = DllCall('kernel32.dll', 'HANDLE', 'HeapCreate', 'DWORD', 0x00040000, 'ULONG_PTR', 0, 'ULONG_PTR', 0)[0]
Assert($_cHvr_HEXECUTABLEHEAP <> 0, 'Failed to create executable heap object')
Local Const $_cHvr_PSUBCLASSEXE = _cHvr_ExecutableFromStruct(Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86'))
Func _cHvr_Register($idCtrl, $fnHovOff = '', $fnHoverOn = '', $fnClick = '', $fnDblClk = '', $HoverData = 0,$ClickData = 0,$fnRightClick = '')
Local $hWnd = GUICtrlGetHandle($idCtrl)
If (Not (IsHWnd($hWnd))) Then Return SetError(1, 0, -1)
Local $nIndex = _cHvr_GetNewIndex($hWnd)
Local $aData[13]
$aData[0] = $hWnd;Control Hwnd
$aData[1] = $idCtrl; Control handle
$aData[3] = $fnHovOff;Hover Off func
$aData[4] = $HoverData;Hover Off Data
$aData[5] = $fnHoverOn;Hover ON func
$aData[6] = $HoverData;Hover ON Data
$aData[7] = $fnRightClick;RClick func
$aData[8] = $ClickData; click data
$aData[9] = $fnClick;Click func
$aData[10] = $ClickData; click data
$aData[11] = $fnDblClk;DB click func
$aData[12] = $ClickData;DB click data
$_cHvr_aData[$nIndex] = $aData
_WinAPI_SetWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd, $nIndex)
Return $nIndex
EndFunc ;==>_cHvr_Register
Func _cHvr_iProc($hWnd, $uMsg, $wParam, $lParam, $cIndex)
Switch $uMsg
Case 0x0200;Hover
GUISetCursor(2, 1)
_cHvr_cMove($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0201;Leftclick
_cHvr_cDown($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0202
_cHvr_cUp($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Return False
Case 0x0203;Doubleclick
_cHvr_cDblClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0204;Rightclick
_cHvr_cRightClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x02A3;Hover leave
_cHvr_cLeave($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0082;Deleted
_cHvr_UnRegisterInternal($cIndex, $hWnd)
EndSwitch
Return True
EndFunc ;==>_cHvr_iProc
Func _cHvr_cDown(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_WinAPI_SetCapture($hWnd)
_cHvr_CallFunc($aCtrlData, 9)
EndFunc ;==>_cHvr_cDown
Func _cHvr_cMove(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
Local $bIn = _cHvr_IsInClient($hWnd, $lParam)
If Not $aCtrlData[2] Then
If $bIn Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 9)
EndIf
Else
If Not $bIn Then
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndIf
EndIf
ElseIf Not $aCtrlData[2] Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 5)
Local $tTME = DllStructCreate('DWORD;DWORD;HWND;DWORD')
DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, 2) ;$TME_LEAVE
DllStructSetData($tTME, 3, $hWnd)
DllCall('user32.dll', 'BOOL', 'TrackMouseEvent', 'STRUCT*', $tTME)
EndIf
EndFunc ;==>_cHvr_cMove
Func _cHvr_cUp(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
Local $lRet = _WinAPI_DefSubclassProc($hWnd, $uMsg, $wParam, $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
_WinAPI_ReleaseCapture()
If _cHvr_IsInClient($hWnd, $lParam) Then
_cHvr_CallFunc($aCtrlData, 9)
EndIf
EndIf
Return $lRet
EndFunc ;==>_cHvr_cUp
Func _cHvr_cDblClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 11)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cRightClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 7)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cLeave(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndFunc ;==>_cHvr_cLeave
Func _cHvr_CallFunc(ByRef $aCtrlData, $iCallType)
Call($aCtrlData[$iCallType], $aCtrlData[1], $aCtrlData[$iCallType + 1])
EndFunc ;==>_cHvr_CallFunc
Func _cHvr_ArrayPush(ByRef $aStackArr, Const $vSrc1 = Default, Const $vSrc2 = Default, Const $vSrc3 = Default, Const $vSrc4 = Default, Const $vSrc5 = Default)
While (UBound($aStackArr) < ($aStackArr[0] + @NumParams))
ReDim $aStackArr[UBound($aStackArr) * 2]
WEnd
If Not ($vSrc1 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc1
EndIf
If Not ($vSrc2 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc2
EndIf
If Not ($vSrc3 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc3
EndIf
If Not ($vSrc4 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc4
EndIf
If Not ($vSrc5 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc5
EndIf
EndFunc ;==>_cHvr_ArrayPush
Func _cHvr_IsInClient($hWnd, $lParam)
Local $iX = BitShift(BitShift($lParam, -16), 16)
Local $iY = BitShift($lParam, 16)
Local $aSize = WinGetClientSize($hWnd)
Return Not ($iX < 0 Or $iY < 0 Or $iX > $aSize[0] Or $iY > $aSize[1])
EndFunc ;==>_cHvr_IsInClient
Func _cHvr_CSCP_X86() ;Create Subclass Process x86
; $hWnd HWND size: 4 ESP+4 EBP+8
; $uMsg UINT size: 4 ESP+8 EBP+12
; $wParam WPARAM size: 4 ESP+12 EBP+16
; $lParam LPARAM size: 4 ESP+16 EBP+20
; $uIdSubclass UINT_PTR size: 4 ESP+20 EBP+24
; $dwRefData DWORD_PTR size: 4 ESP+24 EBP+28 Total: 24
; NERVER FORGET ADDING align 1 OR YOU WILL SPEND HOURS TO FIND WHAT CAUSE 0xC0000005 Access Violation
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; Func ; __stdcall
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x55) ;push ebp
_cHvr_ArrayPush($aOpCode, 0x8B, 0xEC) ;mov ebp, esp
; Save un-modified params to nv register
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+16]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x5D, 16) ;8b 5d 10
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;BYTE;BYTE;' ;mov esi, DWORD PTR [ebp+12]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x75, 12) ;8b 75 0c
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+20]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x7D, 20) ;8b 7d 14
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x82) ;81 fe 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x2A3) ;81 fe a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;BYTE;' ;lea eax, DWORD PTR [esi-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x86, -0x200) ;8d 86 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
; :WndProcInternal (HWND, UINT, WPARAM, LPARAM, DWORD)
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ecx, DWORD PTR [ebp+28]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x4D, 28) ;8b 4d 1c
$sExe &= 'BYTE;BYTE;BYTE;' ;mov edx, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x55, 8) ;8b 55 08
$sExe &= 'BYTE;' ;push ecx
_cHvr_ArrayPush($aOpCode, 0x51) ;51
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push edx
_cHvr_ArrayPush($aOpCode, 0x52) ;52
; Call
$sExe &= 'BYTE;PTR;' ;mov eax, _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PINTERNALSUBCLASS)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;' ;test eax, eax
_cHvr_ArrayPush($aOpCode, 0x85, 0xC0) ;85 c0
$sExe &= 'BYTE;BYTE;' ;jz short Return
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$aOpCode[$nElemOffset[2]] = $nAddrOffset[3] - $nAddrOffset[2]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov eax, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x45, 8)
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push eax
_cHvr_ArrayPush($aOpCode, 0x50) ;50
;Call
$sExe &= 'BYTE;PTR;' ;mov eax,COMCTL32.DefSubclassProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
; :Return
$aOpCode[$nElemOffset[3]] = $nAddrOffset[4] - $nAddrOffset[3]
; Restore nv-register
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x5F) ;pop edi
_cHvr_ArrayPush($aOpCode, 0x5E) ;pop esi
_cHvr_ArrayPush($aOpCode, 0x5B) ;pop ebx
; EndFunc
$sExe &= 'BYTE;BYTE;BYTE;WORD'
_cHvr_ArrayPush($aOpCode, 0x5D) ;pop ebp
_cHvr_ArrayPush($aOpCode, 0xC2, 24) ;ret 24
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X86
Func _cHvr_CSCP_X64() ;Create Subclass Process x64
; First four INT and UINT has size = 8 instead of 4 because they are stored in RCX, RDX, R8, R9
; $hWnd HWND size: 8 RCX RSP+8
; $uMsg UINT size: 8 EDX RSP+16
; $wParam WPARAM size: 8 R8 RSP+24
; $lParam LPARAM size: 8 R9 RSP+32
; $uIdSubclass UINT_PTR size: 8 RSP+40
; $dwRefData DWORD_PTR size: 8 RSP+48 Total: 48
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x82) ;81 fa 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x2A3) ;81 fa a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;DWORD;' ;lea eax, DWORD PTR [rdx-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x82, -0x200) ;8d 82 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; :WndProcInternal (HWND rsp+8, UINT +16, WPARAM +24, LPARAM +32, DWORD +40)
; $dwRefData = [ESP+48+48(sub rsp, 48)+8(push rdi)] = [ESP+104]
; Save base registers:
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+8], rbx
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x5C, 0x24, 8) ;48 89 5c 24 08
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+16], rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x6C, 0x24, 16) ;48 89 6c 24 10
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+24], rsi
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x74, 0x24, 24) ;48 89 74 24 18
$sExe &= 'BYTE;' ;push rdi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
; Max sub-routine params = 5 (size = 5*8 = 40), + 8 bytes for return value = 48.
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;sub rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xEC, 48) ;48 83 ec 30
; rbx, rbp, rsi now at [ESP+8+56], [ESP+16+56], [ESP+24+56]
; Save the parameters:
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rdi, r9
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF9) ;49 8b f9
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rsi, r8
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF0) ;49 8b f0
$sExe &= 'BYTE;BYTE;' ;mov ebx, edx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xDA) ;8b da
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rbp, rcx
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xE9) ;48 8b e9
; Prepare additional parameter for internal WndProc
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rax, QWORD PTR [rsp+104]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x44, 0x24, 104) ;48 8b 44 24 68
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+32], Rax]
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x44, 0x24, 32) ;48 89 44 24 20
; Call internal WndProc
$sExe &= 'BYTE;BYTE;PTR;' ;mov rax, QWORD PTR _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PINTERNALSUBCLASS)
;movabs rax, _cHvr_iProc ;48 b8 QWORD_PTR
$sExe &= 'BYTE;BYTE;' ;call rax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff d0
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; Restore parameters for DefSubclassProc call
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r9, rdi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xCF) ;4c 8b cf
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r8, rsi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xC6) ;4c 8b c6
$sExe &= 'BYTE;BYTE;' ;mov edx, ebx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xD3) ;8b d3
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rcx, rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xCD) ;48 8b cd
; Restore registers value
$aOpCode[$nElemOffset[3]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[3]
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbx, QWORD PTR [rsp+64]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x5C, 0x24, 64) ;48 8b 5c 24 40
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbp, QWORD PTR [rsp+72]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x6C, 0x24, 72) ;48 8b 6c 24 48
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rsi, QWORD PTR [rsp+80]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x74, 0x24, 80) ;48 8b 74 24 50
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;add rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xc4, 48) ;48 83 c4 30
$sExe &= 'BYTE;' ;pop rdi
_cHvr_ArrayPush($aOpCode, 0x5F) ;5f
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[4] = $aOpCode[0]
$aOpCode[$nElemOffset[2]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[2]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$sExe &= 'BYTE;BYTE;PTR;'
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0xFF, 0xE0)
; :Return
$aOpCode[$nElemOffset[4]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[4]
$sExe &= 'BYTE;' ;ret 0
_cHvr_ArrayPush($aOpCode, 0xC3)
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X64
Func _cHvr_PopulateOpcode(ByRef $sExe, ByRef $aOpCode)
Local $tExe = DllStructCreate($sExe)
Assert(@error = 0, 'DllStrucCreate Failed With Error = ' & @error)
For $i = 1 To $aOpCode[0]
DllStructSetData($tExe, $i, $aOpCode[$i])
Next
Return $tExe
EndFunc ;==>_cHvr_PopulateOpcode
Func _cHvr_ExecutableFromStruct($tExe)
Local $pExe = DllCall('kernel32.dll', 'PTR', 'HeapAlloc', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 8, 'ULONG_PTR', DllStructGetSize($tExe))[0]
Assert($pExe <> 0, 'Allocate memory failed')
DllCall("kernel32.dll", "none", "RtlMoveMemory", "PTR", $pExe, "PTR", DllStructGetPtr($tExe), "ULONG_PTR", DllStructGetSize($tExe))
Assert(@error = 0, 'Failed to copy memory')
Return $pExe
EndFunc ;==>_cHvr_ExecutableFromStruct
Func _cHvr_UnRegisterInternal($cIndex, $hWnd)
_WinAPI_RemoveWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd)
Local $aData=$_cHvr_aData[$cIndex]
$_cHvr_aData[$cIndex] = 0
Call( "_iControlDelete",$aData[1])
EndFunc ;==>_cHvr_UnRegisterInternal
Func _cHvr_Finalize()
DllCallbackFree($_cHvr_PINTERNALSUBCLASS_DLL)
_WinAPI_FreeLibrary($_cHvr_HDLLCOMCTL32)
If ($_cHvr_HEXECUTABLEHEAP <> 0) Then
If ($_cHvr_PSUBCLASSEXE <> 0) Then
DllCall('kernel32.dll', 'BOOL', 'HeapFree', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 0, 'PTR', $_cHvr_PSUBCLASSEXE)
EndIf
DllCall('kernel32.dll', 'BOOL', 'HeapDestroy', 'HANDLE', $_cHvr_HEXECUTABLEHEAP)
EndIf
EndFunc ;==>_cHvr_Finalize
Func Assert($bExpression, $sMsg = '', $sScript = @ScriptName, $sScriptPath = @ScriptFullPath, $iLine = @ScriptLineNumber, $iError = @error, $iExtend = @extended)
If (Not ($bExpression)) Then
MsgBox(BitOR(1, 0x10), 'Assertion Error!', _
@CRLF & 'Script' & @TAB & ': ' & $sScript _
& @CRLF & 'Path' & @TAB & ': ' & $sScriptPath _
& @CRLF & 'Line' & @TAB & ': ' & $iLine _
& @CRLF & 'Error' & @TAB & ': ' & ($iError > 0x7FFF ? Hex($iError) : $iError) _
& ($iExtend <> 0 ? ' (Extended : ' & ($iExtend > 0x7FFF ? Hex($iExtend) : $iExtend) & ')' : '') _
& @CRLF & 'Message' & @TAB & ': ' & $sMsg _
& @CRLF & @CRLF & 'OK: Exit Script' & @TAB & 'Cancel: Continue')
Exit
EndIf
EndFunc ;==>Assert
Func _cHvr_GetNewIndex($hWnd)
;Try to assign index from previously deleted control
For $i = 0 To UBound($_cHvr_aData) - 1 Step +1
If Not IsArray($_cHvr_aData[$i]) Then
Return $i
EndIf
Next
ReDim $_cHvr_aData[UBound($_cHvr_aData) + 1]
Return UBound($_cHvr_aData) - 1
EndFunc ;==>_cHvr_GetNewIndex
Func _WinAPI_GetCapture()
Return DllCall("user32.dll", "HWND", "GetCapture")[0]
EndFunc ;==>_WinAPI_GetCapture

View file

@ -0,0 +1,279 @@
#include-once
; #INDEX# ============================================================================================================
; Title .........: _StringSize
; AutoIt Version : v3.2.12.1 or higher
; Language ......: English
; Description ...: Returns size of rectangle required to display string - maximum width can be chosen
; Remarks .......:
; Note ..........:
; Author(s) .....: Melba23 - thanks to trancexx for the default DC code
; ====================================================================================================================
;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
; #CURRENT# ==========================================================================================================
; _StringSize: Returns size of rectangle required to display string - maximum width can be chosen
; ====================================================================================================================
; #INTERNAL_USE_ONLY#=================================================================================================
; _StringSize_Error_Close: Releases DC and deletes font object after error
; _StringSize_DefaultFontName: Determines Windows default font
; ====================================================================================================================
; #FUNCTION# =========================================================================================================
; Name...........: _StringSize
; Description ...: Returns size of rectangle required to display string - maximum permitted width can be chosen
; Syntax ........: _StringSize($sText[, $iSize[, $iWeight[, $iAttrib[, $sName[, $iWidth[, $hWnd]]]]]])
; Parameters ....: $sText - String to display
; $iSize - [optional] Font size in points - (default = 8.5)
; $iWeight - [optional] Font weight - (default = 400 = normal)
; $iAttrib - [optional] Font attribute (0-Normal (default), 2-Italic, 4-Underline, 8 Strike)
; + 1 if tabs are to be expanded before sizing
; $sName - [optional] Font name - (default = Tahoma)
; $iWidth - [optional] Max width for rectangle - (default = 0 => width of original string)
; $hWnd - [optional] GUI in which string will be displayed - (default 0 => normally not required)
; Requirement(s) : v3.2.12.1 or higher
; Return values .: Success - Returns 4-element array: ($iWidth set // $iWidth not set)
; |$array[0] = String reformatted with additonal @CRLF // Original string
; |$array[1] = Height of single line in selected font // idem
; |$array[2] = Width of rectangle required for reformatted // original string
; |$array[3] = Height of rectangle required for reformatted // original string
; Failure - Returns 0 and sets @error:
; |1 - Incorrect parameter type (@extended = parameter index)
; |2 - DLL call error - extended set as follows:
; |1 - GetDC failure
; |2 - SendMessage failure
; |3 - GetDeviceCaps failure
; |4 - CreateFont failure
; |5 - SelectObject failure
; |6 - GetTextExtentPoint32 failure
; |3 - Font too large for chosen max width - a word will not fit
; Author ........: Melba23 - thanks to trancexx for the default DC code
; Modified ......:
; Remarks .......: The use of the $hWnd parameter is not normally necessary - it is only required if the UDF does not
; return correct dimensions without it.
; Related .......:
; Link ..........:
; Example .......: Yes
;=====================================================================================================================
Func _StringSize($sText, $iSize = 8.5, $iWeight = 400, $iAttrib = 0, $sName = "", $iMaxWidth = 0, $hWnd = 0)
; Set parameters passed as Default
If $iSize = Default Then $iSize = 8.5
If $iWeight = Default Then $iWeight = 400
If $iAttrib = Default Then $iAttrib = 0
If $sName = "" Or $sName = Default Then $sName = _StringSize_DefaultFontName()
; Check parameters are correct type
If Not IsString($sText) Then Return SetError(1, 1, 0)
If Not IsNumber($iSize) Then Return SetError(1, 2, 0)
If Not IsInt($iWeight) Then Return SetError(1, 3, 0)
If Not IsInt($iAttrib) Then Return SetError(1, 4, 0)
If Not IsString($sName) Then Return SetError(1, 5, 0)
If Not IsNumber($iMaxWidth) Then Return SetError(1, 6, 0)
If Not IsHwnd($hWnd) And $hWnd <> 0 Then Return SetError(1, 7, 0)
Local $aRet, $hDC, $hFont, $hLabel = 0, $hLabel_Handle
; Check for tab expansion flag
Local $iExpTab = BitAnd($iAttrib, 1)
; Remove possible tab expansion flag from font attribute value
$iAttrib = BitAnd($iAttrib, BitNot(1))
; If GUI handle was passed
If IsHWnd($hWnd) Then
; Create label outside GUI borders
$hLabel = GUICtrlCreateLabel("", -10, -10, 10, 10)
$hLabel_Handle = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
; Create DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hLabel_Handle)
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, 1, 0)
EndIf
$hDC = $aRet[0]
$aRet = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hLabel_Handle, "int", 0x0031, "wparam", 0, "lparam", 0) ; $WM_GetFont
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, _StringSize_Error_Close(2, $hDC), 0)
EndIf
$hFont = $aRet[0]
Else
; Get default DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
If @error Or $aRet[0] = 0 Then Return SetError(2, 1, 0)
$hDC = $aRet[0]
; Create required font
$aRet = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", 90) ; $LOGPIXELSY
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(3, $hDC), 0)
Local $iInfo = $aRet[0]
$aRet = DllCall("gdi32.dll", "handle", "CreateFontW", "int", -$iInfo * $iSize / 72, "int", 0, "int", 0, "int", 0, _
"int", $iWeight, "dword", BitAND($iAttrib, 2), "dword", BitAND($iAttrib, 4), "dword", BitAND($iAttrib, 8), "dword", 0, "dword", 0, _
"dword", 0, "dword", 5, "dword", 0, "wstr", $sName)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(4, $hDC), 0)
$hFont = $aRet[0]
EndIf
; Select font and store previous font
$aRet = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hFont)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(5, $hDC, $hFont, $hLabel), 0)
Local $hPrevFont = $aRet[0]
; Declare variables
Local $avSize_Info[4], $iLine_Length, $iLine_Height = 0, $iLine_Count = 0, $iLine_Width = 0, $iWrap_Count, $iLast_Word, $sTest_Line
; Declare and fill Size structure
Local $tSize = DllStructCreate("int X;int Y")
DllStructSetData($tSize, "X", 0)
DllStructSetData($tSize, "Y", 0)
; Ensure EoL is @CRLF and break text into lines
$sText = StringRegExpReplace($sText, "((?<!\x0d)\x0a|\x0d(?!\x0a))", @CRLF)
Local $asLines = StringSplit($sText, @CRLF, 1)
; For each line
For $i = 1 To $asLines[0]
; Expand tabs if required
If $iExpTab Then
$asLines[$i] = StringReplace($asLines[$i], @TAB, " XXXXXXXX")
EndIf
; Size line
$iLine_Length = StringLen($asLines[$i])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$i], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
If DllStructGetData($tSize, "X") > $iLine_Width Then $iLine_Width = DllStructGetData($tSize, "X")
If DllStructGetData($tSize, "Y") > $iLine_Height Then $iLine_Height = DllStructGetData($tSize, "Y")
Next
; Check if $iMaxWidth has been both set and exceeded
If $iMaxWidth <> 0 And $iLine_Width > $iMaxWidth Then ; Wrapping required
; For each Line
For $j = 1 To $asLines[0]
; Size line unwrapped
$iLine_Length = StringLen($asLines[$j])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$j], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
; Check wrap status
If DllStructGetData($tSize, "X") < $iMaxWidth - 4 Then
; No wrap needed so count line and store
$iLine_Count += 1
$avSize_Info[0] &= $asLines[$j] & @CRLF
Else
; Wrap needed so zero counter for wrapped lines
$iWrap_Count = 0
; Build line to max width
While 1
; Zero line width
$iLine_Width = 0
; Initialise pointer for end of word
$iLast_Word = 0
; Add characters until EOL or maximum width reached
For $i = 1 To StringLen($asLines[$j])
; Is this just past a word ending?
If StringMid($asLines[$j], $i, 1) = " " Then $iLast_Word = $i - 1
; Increase line by one character
$sTest_Line = StringMid($asLines[$j], 1, $i)
; Get line length
$iLine_Length = StringLen($sTest_Line)
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sTest_Line, "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
$iLine_Width = DllStructGetData($tSize, "X")
; If too long exit the loop
If $iLine_Width >= $iMaxWidth - 4 Then ExitLoop
Next
; End of the line of text?
If $i > StringLen($asLines[$j]) Then
; Yes, so add final line to count
$iWrap_Count += 1
; Store line
$avSize_Info[0] &= $sTest_Line & @CRLF
ExitLoop
Else
; No, but add line just completed to count
$iWrap_Count += 1
; Check at least 1 word completed or return error
If $iLast_Word = 0 Then Return SetError(3, _StringSize_Error_Close(0, $hDC, $hFont, $hLabel), 0)
; Store line up to end of last word
$avSize_Info[0] &= StringLeft($sTest_Line, $iLast_Word) & @CRLF
; Strip string to point reached
$asLines[$j] = StringTrimLeft($asLines[$j], $iLast_Word)
; Trim leading whitespace
$asLines[$j] = StringStripWS($asLines[$j], 1)
; Repeat with remaining characters in line
EndIf
WEnd
; Add the number of wrapped lines to the count
$iLine_Count += $iWrap_Count
EndIf
Next
; Reset any tab expansions
If $iExpTab Then
$avSize_Info[0] = StringRegExpReplace($avSize_Info[0], "\x20?XXXXXXXX", @TAB)
EndIf
; Complete return array
$avSize_Info[1] = $iLine_Height
$avSize_Info[2] = $iMaxWidth
; Convert lines to pixels and add drop margin
$avSize_Info[3] = ($iLine_Count * $iLine_Height) + 4
Else ; No wrapping required
; Create return array (add drop margin to height)
Local $avSize_Info[4] = [$sText, $iLine_Height, $iLine_Width, ($asLines[0] * $iLine_Height) + 4]
EndIf
; Clear up
DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hPrevFont)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $avSize_Info
EndFunc ;==>_StringSize
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_Error_Close
; Description ...: Releases DC and deleted font object if required after error
; Syntax ........: _StringSize_Error_Close ($iExtCode, $hDC, $hGUI)
; Parameters ....: $iExtCode - code to return
; $hDC, $hGUI - handles as set in _StringSize function
; Return value ..: $iExtCode as passed
; Author ........: Melba23
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_Error_Close($iExtCode, $hDC = 0, $hFont = 0, $hLabel = 0)
If $hFont <> 0 Then DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
If $hDC <> 0 Then DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $iExtCode
EndFunc ;=>_StringSize_Error_Close
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_DefaultFontName
; Description ...: Determines Windows default font
; Syntax ........: _StringSize_DefaultFontName()
; Parameters ....: None
; Return values .: Success - Returns name of system default font
; Failure - Returns "Tahoma"
; Author ........: Melba23, based on some original code by Larrydalooza
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_DefaultFontName()
; Get default system font data
Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]")
DLLStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS))
DLLCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0)
Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DLLStructGetPtr($tNONCLIENTMETRICS, 13))
If IsString(DllStructGetData($tLOGFONT, 14)) Then
Return DllStructGetData($tLOGFONT, 14)
Else
Return "Tahoma"
EndIf
EndFunc ;=>_StringSize_DefaultFontName

View file

@ -0,0 +1,80 @@
#include-once
; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
; #INDEX# =======================================================================================================================
; Title .........: _GUIDisable
; AutoIt Version : v3.2.2.0 or higher
; Language ......: English
; Description ...: Creates a dimming effect on the current/selected GUI.
; Note ..........:
; Author(s) .....: guinness
; Remarks .......: Thanks to supersonic for the idea of adjusting the UDF when using Classic themes in Windows Vista+.
; ===============================================================================================================================
; #INCLUDES# ====================================================================================================================
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
; #GLOBAL VARIABLES# ============================================================================================================
Global Enum $__hGUIDisableHWnd, $__hGUIDisableHWndPrevious, $__iGUIDisableMax
Global $__aGUIDisable[$__iGUIDisableMax]
Func _GUIDisable($hWnd, $iAnimate = Default, $iBrightness = Default, $bColor = 0x000000)
Local Const $AW_SLIDE_IN_TOP = 0x00040004, $AW_SLIDE_OUT_TOP = 0x00050008
If $iAnimate = Default Then
$iAnimate = 1
EndIf
If $iBrightness = Default Then
$iBrightness = 5
EndIf
If $hWnd = -1 And $__aGUIDisable[$__hGUIDisableHWnd] = 0 Then
Local $iLabel = GUICtrlCreateLabel('', -99, -99, 1, 1)
$hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iLabel))
If @error Then
Return SetError(1, 0 * GUICtrlDelete($iLabel), 0)
EndIf
GUICtrlDelete($iLabel)
EndIf
If IsHWnd($__aGUIDisable[$__hGUIDisableHWnd]) Then
GUIDelete($__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = 0
$__aGUIDisable[$__hGUIDisableHWndPrevious] = 0
Else
$__aGUIDisable[$__hGUIDisableHWndPrevious] = $hWnd
Local $iLeft = 0, $iTop = 0
Local $iStyle = GUIGetStyle($__aGUIDisable[$__hGUIDisableHWndPrevious])
Local $sCurrentTheme = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes', 'CurrentTheme')
Local $iIsClassicTheme = Number(StringInStr($sCurrentTheme, 'Basic.theme', 2) = 0 And StringInStr($sCurrentTheme, 'Ease of Access Themes', 2) > 0)
Local $aWinGetPos = WinGetClientSize($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = GUICreate('', $aWinGetPos[0], $aWinGetPos[1], $iLeft + 3, $iTop + 3, $WS_POPUP, $WS_EX_MDICHILD, $__aGUIDisable[$__hGUIDisableHWndPrevious])
GUISetBkColor($bColor, $__aGUIDisable[$__hGUIDisableHWnd])
WinSetTrans($__aGUIDisable[$__hGUIDisableHWnd], '', Round($iBrightness * (255 / 100)))
If not $iAnimate Then
GUISetState(@SW_SHOW, $__aGUIDisable[$__hGUIDisableHWnd])
EndIf
GUISetState(@SW_DISABLE, $__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
EndIf
Return $__aGUIDisable[$__hGUIDisableHWnd]
EndFunc ;==>_GUIDisable
; #INTERNAL_USE_ONLY#============================================================================================================
Func __GUIDisable_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $iHeight = _WinAPI_HiWord($ilParam)
Local $iWidth = _WinAPI_LoWord($ilParam)
If $hWnd = $__aGUIDisable[$__hGUIDisableHWndPrevious] Then
Local $iWinGetPos = WinGetPos($__aGUIDisable[$__hGUIDisableHWnd])
If @error = 0 Then
WinMove($__aGUIDisable[$__hGUIDisableHWnd], '', $iWinGetPos[0], $iWinGetPos[1], $iWidth, $iHeight)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>__GUIDisable_WM_SIZE

13
APPX Installer/Releases/.media Executable file
View file

@ -0,0 +1,13 @@
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: Tyleo
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)

10
APPX Installer/TyleoAboutMe.au3 Executable file
View file

@ -0,0 +1,10 @@
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include <WindowsConstants.au3>
Func TyleoAbout($SoftName)
_Metro_MsgBox(8,"About / A propos",$SoftName & @CRLF & "Tyleo Softwares @ 2021" & @CRLF & " " & @CRLF & "BUILDING TOMORROW" & @CRLF & " " & @CRLF & "This Software is free and Open Source." & @CRLF & "tyleo.dev@outlook.com",400,15)
Return True
EndFunc

View file

@ -0,0 +1,23 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "TyleoAboutMe.au3"
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
#include-once
#cs ----------------------------------------------------------------------------
Author: BB_19
Material Themes for MetroGUI UDF
If you want to create your own themes, check out flatcolors.net, you can find there many random material/flat colors :)
#ce ----------------------------------------------------------------------------
;#Set Default Theme
Global $GUIThemeColor = "0x13161C" ; GUI Background Color
Global $FontThemeColor = "0xFFFFFF" ; Font Color
Global $GUIBorderColor = "0x2D2D2D" ; GUI Border Color
Global $ButtonBKColor = "0x00796b" ; Metro Button BacKground Color
Global $ButtonTextColor = "0xFFFFFF" ; Metro Button Text Color
Global $CB_Radio_Color = "0xFFFFFF" ;Checkbox and Radio Color (Box/Circle)
Global $GUI_Theme_Name = "DarkTealV2" ;Theme Name (For internal usage)
Global $CB_Radio_Hover_Color = "0xD8D8D8" ; Checkbox and Radio Hover Color (Box/Circle)
Global $CB_Radio_CheckMark_Color = "0x1a1a1a" ; Checkbox and Radio checkmark color
Func _SetTheme($ThemeSelect = "DarkTeal")
$GUI_Theme_Name = $ThemeSelect
Switch ($ThemeSelect)
Case "LightTeal"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTeal"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTealV2"
$GUIThemeColor = "0x13161C"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x35635B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkRuby"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x712043"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightTeal"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x336058"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightCyan"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x0D5C63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightBlue"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x1A4F70"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnight"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x3C4D66"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlue"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlueV2"
$GUIThemeColor = "0x040D11"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightBlue"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x244E80"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightCyan"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkCyan"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGray"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x3F5863"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGreen"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x2E7D32"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreen"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreenV2"
$GUIThemeColor = "0x061319"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightRed"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xc62828"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGray"
$GUIThemeColor = "0x1B2428"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x4F6772"
$ButtonBKColor = "0x607D8B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkAmber"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xffa000"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightOrange"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xBC5E05"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkOrange"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xC76810"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPurple"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkPurple"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPink"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xE91E63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case Else
ConsoleWrite("Metro-UDF-Error: Theme not found, using default theme." & @CRLF)
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
$GUI_Theme_Name = "DarkTealV2"
EndSwitch
EndFunc ;==>_SetTheme

View file

@ -0,0 +1,495 @@
;======================================
;~ Author : binhnx
;~ Created : 2014/10/20
;======================================
;~ Modified : BB_19
;~ Last modified : 2017/10/07
;======================================
#include-once
#include <WinAPI.au3>
#include <WinAPIShellEx.au3>
Local $_cHvr_aData[0]
Local Const $_cHvr_HDLLCOMCTL32 = _WinAPI_LoadLibrary('comctl32.dll')
Assert($_cHvr_HDLLCOMCTL32 <> 0, 'This UDF requires comctl32.dll')
Local Const $_cHvr_PDEFSUBCLASSPROC = _WinAPI_GetProcAddress($_cHvr_HDLLCOMCTL32, 'DefSubclassProc')
Local Const $_cHvr_PINTERNALSUBCLASS_DLL = DllCallbackRegister('_cHvr_iProc', 'NONE', 'HWND;UINT;WPARAM;LPARAM;DWORD')
Local Const $_cHvr_PINTERNALSUBCLASS = DllCallbackGetPtr($_cHvr_PINTERNALSUBCLASS_DLL)
OnAutoItExitRegister("_cHvr_Finalize")
Local Const $_cHvr_TSUBCLASSEXE = Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86')
Local Const $_cHvr_HEXECUTABLEHEAP = DllCall('kernel32.dll', 'HANDLE', 'HeapCreate', 'DWORD', 0x00040000, 'ULONG_PTR', 0, 'ULONG_PTR', 0)[0]
Assert($_cHvr_HEXECUTABLEHEAP <> 0, 'Failed to create executable heap object')
Local Const $_cHvr_PSUBCLASSEXE = _cHvr_ExecutableFromStruct(Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86'))
Func _cHvr_Register($idCtrl, $fnHovOff = '', $fnHoverOn = '', $fnClick = '', $fnDblClk = '', $HoverData = 0,$ClickData = 0,$fnRightClick = '')
Local $hWnd = GUICtrlGetHandle($idCtrl)
If (Not (IsHWnd($hWnd))) Then Return SetError(1, 0, -1)
Local $nIndex = _cHvr_GetNewIndex($hWnd)
Local $aData[13]
$aData[0] = $hWnd;Control Hwnd
$aData[1] = $idCtrl; Control handle
$aData[3] = $fnHovOff;Hover Off func
$aData[4] = $HoverData;Hover Off Data
$aData[5] = $fnHoverOn;Hover ON func
$aData[6] = $HoverData;Hover ON Data
$aData[7] = $fnRightClick;RClick func
$aData[8] = $ClickData; click data
$aData[9] = $fnClick;Click func
$aData[10] = $ClickData; click data
$aData[11] = $fnDblClk;DB click func
$aData[12] = $ClickData;DB click data
$_cHvr_aData[$nIndex] = $aData
_WinAPI_SetWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd, $nIndex)
Return $nIndex
EndFunc ;==>_cHvr_Register
Func _cHvr_iProc($hWnd, $uMsg, $wParam, $lParam, $cIndex)
Switch $uMsg
Case 0x0200;Hover
GUISetCursor(2, 1)
_cHvr_cMove($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0201;Leftclick
_cHvr_cDown($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0202
_cHvr_cUp($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Return False
Case 0x0203;Doubleclick
_cHvr_cDblClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0204;Rightclick
_cHvr_cRightClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x02A3;Hover leave
_cHvr_cLeave($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0082;Deleted
_cHvr_UnRegisterInternal($cIndex, $hWnd)
EndSwitch
Return True
EndFunc ;==>_cHvr_iProc
Func _cHvr_cDown(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_WinAPI_SetCapture($hWnd)
_cHvr_CallFunc($aCtrlData, 9)
EndFunc ;==>_cHvr_cDown
Func _cHvr_cMove(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
Local $bIn = _cHvr_IsInClient($hWnd, $lParam)
If Not $aCtrlData[2] Then
If $bIn Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 9)
EndIf
Else
If Not $bIn Then
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndIf
EndIf
ElseIf Not $aCtrlData[2] Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 5)
Local $tTME = DllStructCreate('DWORD;DWORD;HWND;DWORD')
DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, 2) ;$TME_LEAVE
DllStructSetData($tTME, 3, $hWnd)
DllCall('user32.dll', 'BOOL', 'TrackMouseEvent', 'STRUCT*', $tTME)
EndIf
EndFunc ;==>_cHvr_cMove
Func _cHvr_cUp(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
Local $lRet = _WinAPI_DefSubclassProc($hWnd, $uMsg, $wParam, $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
_WinAPI_ReleaseCapture()
If _cHvr_IsInClient($hWnd, $lParam) Then
_cHvr_CallFunc($aCtrlData, 9)
EndIf
EndIf
Return $lRet
EndFunc ;==>_cHvr_cUp
Func _cHvr_cDblClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 11)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cRightClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 7)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cLeave(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndFunc ;==>_cHvr_cLeave
Func _cHvr_CallFunc(ByRef $aCtrlData, $iCallType)
Call($aCtrlData[$iCallType], $aCtrlData[1], $aCtrlData[$iCallType + 1])
EndFunc ;==>_cHvr_CallFunc
Func _cHvr_ArrayPush(ByRef $aStackArr, Const $vSrc1 = Default, Const $vSrc2 = Default, Const $vSrc3 = Default, Const $vSrc4 = Default, Const $vSrc5 = Default)
While (UBound($aStackArr) < ($aStackArr[0] + @NumParams))
ReDim $aStackArr[UBound($aStackArr) * 2]
WEnd
If Not ($vSrc1 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc1
EndIf
If Not ($vSrc2 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc2
EndIf
If Not ($vSrc3 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc3
EndIf
If Not ($vSrc4 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc4
EndIf
If Not ($vSrc5 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc5
EndIf
EndFunc ;==>_cHvr_ArrayPush
Func _cHvr_IsInClient($hWnd, $lParam)
Local $iX = BitShift(BitShift($lParam, -16), 16)
Local $iY = BitShift($lParam, 16)
Local $aSize = WinGetClientSize($hWnd)
Return Not ($iX < 0 Or $iY < 0 Or $iX > $aSize[0] Or $iY > $aSize[1])
EndFunc ;==>_cHvr_IsInClient
Func _cHvr_CSCP_X86() ;Create Subclass Process x86
; $hWnd HWND size: 4 ESP+4 EBP+8
; $uMsg UINT size: 4 ESP+8 EBP+12
; $wParam WPARAM size: 4 ESP+12 EBP+16
; $lParam LPARAM size: 4 ESP+16 EBP+20
; $uIdSubclass UINT_PTR size: 4 ESP+20 EBP+24
; $dwRefData DWORD_PTR size: 4 ESP+24 EBP+28 Total: 24
; NERVER FORGET ADDING align 1 OR YOU WILL SPEND HOURS TO FIND WHAT CAUSE 0xC0000005 Access Violation
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; Func ; __stdcall
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x55) ;push ebp
_cHvr_ArrayPush($aOpCode, 0x8B, 0xEC) ;mov ebp, esp
; Save un-modified params to nv register
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+16]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x5D, 16) ;8b 5d 10
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;BYTE;BYTE;' ;mov esi, DWORD PTR [ebp+12]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x75, 12) ;8b 75 0c
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+20]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x7D, 20) ;8b 7d 14
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x82) ;81 fe 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x2A3) ;81 fe a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;BYTE;' ;lea eax, DWORD PTR [esi-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x86, -0x200) ;8d 86 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
; :WndProcInternal (HWND, UINT, WPARAM, LPARAM, DWORD)
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ecx, DWORD PTR [ebp+28]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x4D, 28) ;8b 4d 1c
$sExe &= 'BYTE;BYTE;BYTE;' ;mov edx, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x55, 8) ;8b 55 08
$sExe &= 'BYTE;' ;push ecx
_cHvr_ArrayPush($aOpCode, 0x51) ;51
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push edx
_cHvr_ArrayPush($aOpCode, 0x52) ;52
; Call
$sExe &= 'BYTE;PTR;' ;mov eax, _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PINTERNALSUBCLASS)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;' ;test eax, eax
_cHvr_ArrayPush($aOpCode, 0x85, 0xC0) ;85 c0
$sExe &= 'BYTE;BYTE;' ;jz short Return
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$aOpCode[$nElemOffset[2]] = $nAddrOffset[3] - $nAddrOffset[2]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov eax, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x45, 8)
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push eax
_cHvr_ArrayPush($aOpCode, 0x50) ;50
;Call
$sExe &= 'BYTE;PTR;' ;mov eax,COMCTL32.DefSubclassProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
; :Return
$aOpCode[$nElemOffset[3]] = $nAddrOffset[4] - $nAddrOffset[3]
; Restore nv-register
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x5F) ;pop edi
_cHvr_ArrayPush($aOpCode, 0x5E) ;pop esi
_cHvr_ArrayPush($aOpCode, 0x5B) ;pop ebx
; EndFunc
$sExe &= 'BYTE;BYTE;BYTE;WORD'
_cHvr_ArrayPush($aOpCode, 0x5D) ;pop ebp
_cHvr_ArrayPush($aOpCode, 0xC2, 24) ;ret 24
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X86
Func _cHvr_CSCP_X64() ;Create Subclass Process x64
; First four INT and UINT has size = 8 instead of 4 because they are stored in RCX, RDX, R8, R9
; $hWnd HWND size: 8 RCX RSP+8
; $uMsg UINT size: 8 EDX RSP+16
; $wParam WPARAM size: 8 R8 RSP+24
; $lParam LPARAM size: 8 R9 RSP+32
; $uIdSubclass UINT_PTR size: 8 RSP+40
; $dwRefData DWORD_PTR size: 8 RSP+48 Total: 48
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x82) ;81 fa 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x2A3) ;81 fa a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;DWORD;' ;lea eax, DWORD PTR [rdx-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x82, -0x200) ;8d 82 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; :WndProcInternal (HWND rsp+8, UINT +16, WPARAM +24, LPARAM +32, DWORD +40)
; $dwRefData = [ESP+48+48(sub rsp, 48)+8(push rdi)] = [ESP+104]
; Save base registers:
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+8], rbx
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x5C, 0x24, 8) ;48 89 5c 24 08
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+16], rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x6C, 0x24, 16) ;48 89 6c 24 10
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+24], rsi
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x74, 0x24, 24) ;48 89 74 24 18
$sExe &= 'BYTE;' ;push rdi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
; Max sub-routine params = 5 (size = 5*8 = 40), + 8 bytes for return value = 48.
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;sub rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xEC, 48) ;48 83 ec 30
; rbx, rbp, rsi now at [ESP+8+56], [ESP+16+56], [ESP+24+56]
; Save the parameters:
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rdi, r9
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF9) ;49 8b f9
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rsi, r8
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF0) ;49 8b f0
$sExe &= 'BYTE;BYTE;' ;mov ebx, edx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xDA) ;8b da
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rbp, rcx
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xE9) ;48 8b e9
; Prepare additional parameter for internal WndProc
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rax, QWORD PTR [rsp+104]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x44, 0x24, 104) ;48 8b 44 24 68
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+32], Rax]
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x44, 0x24, 32) ;48 89 44 24 20
; Call internal WndProc
$sExe &= 'BYTE;BYTE;PTR;' ;mov rax, QWORD PTR _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PINTERNALSUBCLASS)
;movabs rax, _cHvr_iProc ;48 b8 QWORD_PTR
$sExe &= 'BYTE;BYTE;' ;call rax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff d0
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; Restore parameters for DefSubclassProc call
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r9, rdi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xCF) ;4c 8b cf
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r8, rsi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xC6) ;4c 8b c6
$sExe &= 'BYTE;BYTE;' ;mov edx, ebx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xD3) ;8b d3
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rcx, rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xCD) ;48 8b cd
; Restore registers value
$aOpCode[$nElemOffset[3]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[3]
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbx, QWORD PTR [rsp+64]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x5C, 0x24, 64) ;48 8b 5c 24 40
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbp, QWORD PTR [rsp+72]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x6C, 0x24, 72) ;48 8b 6c 24 48
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rsi, QWORD PTR [rsp+80]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x74, 0x24, 80) ;48 8b 74 24 50
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;add rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xc4, 48) ;48 83 c4 30
$sExe &= 'BYTE;' ;pop rdi
_cHvr_ArrayPush($aOpCode, 0x5F) ;5f
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[4] = $aOpCode[0]
$aOpCode[$nElemOffset[2]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[2]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$sExe &= 'BYTE;BYTE;PTR;'
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0xFF, 0xE0)
; :Return
$aOpCode[$nElemOffset[4]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[4]
$sExe &= 'BYTE;' ;ret 0
_cHvr_ArrayPush($aOpCode, 0xC3)
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X64
Func _cHvr_PopulateOpcode(ByRef $sExe, ByRef $aOpCode)
Local $tExe = DllStructCreate($sExe)
Assert(@error = 0, 'DllStrucCreate Failed With Error = ' & @error)
For $i = 1 To $aOpCode[0]
DllStructSetData($tExe, $i, $aOpCode[$i])
Next
Return $tExe
EndFunc ;==>_cHvr_PopulateOpcode
Func _cHvr_ExecutableFromStruct($tExe)
Local $pExe = DllCall('kernel32.dll', 'PTR', 'HeapAlloc', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 8, 'ULONG_PTR', DllStructGetSize($tExe))[0]
Assert($pExe <> 0, 'Allocate memory failed')
DllCall("kernel32.dll", "none", "RtlMoveMemory", "PTR", $pExe, "PTR", DllStructGetPtr($tExe), "ULONG_PTR", DllStructGetSize($tExe))
Assert(@error = 0, 'Failed to copy memory')
Return $pExe
EndFunc ;==>_cHvr_ExecutableFromStruct
Func _cHvr_UnRegisterInternal($cIndex, $hWnd)
_WinAPI_RemoveWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd)
Local $aData=$_cHvr_aData[$cIndex]
$_cHvr_aData[$cIndex] = 0
Call( "_iControlDelete",$aData[1])
EndFunc ;==>_cHvr_UnRegisterInternal
Func _cHvr_Finalize()
DllCallbackFree($_cHvr_PINTERNALSUBCLASS_DLL)
_WinAPI_FreeLibrary($_cHvr_HDLLCOMCTL32)
If ($_cHvr_HEXECUTABLEHEAP <> 0) Then
If ($_cHvr_PSUBCLASSEXE <> 0) Then
DllCall('kernel32.dll', 'BOOL', 'HeapFree', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 0, 'PTR', $_cHvr_PSUBCLASSEXE)
EndIf
DllCall('kernel32.dll', 'BOOL', 'HeapDestroy', 'HANDLE', $_cHvr_HEXECUTABLEHEAP)
EndIf
EndFunc ;==>_cHvr_Finalize
Func Assert($bExpression, $sMsg = '', $sScript = @ScriptName, $sScriptPath = @ScriptFullPath, $iLine = @ScriptLineNumber, $iError = @error, $iExtend = @extended)
If (Not ($bExpression)) Then
MsgBox(BitOR(1, 0x10), 'Assertion Error!', _
@CRLF & 'Script' & @TAB & ': ' & $sScript _
& @CRLF & 'Path' & @TAB & ': ' & $sScriptPath _
& @CRLF & 'Line' & @TAB & ': ' & $iLine _
& @CRLF & 'Error' & @TAB & ': ' & ($iError > 0x7FFF ? Hex($iError) : $iError) _
& ($iExtend <> 0 ? ' (Extended : ' & ($iExtend > 0x7FFF ? Hex($iExtend) : $iExtend) & ')' : '') _
& @CRLF & 'Message' & @TAB & ': ' & $sMsg _
& @CRLF & @CRLF & 'OK: Exit Script' & @TAB & 'Cancel: Continue')
Exit
EndIf
EndFunc ;==>Assert
Func _cHvr_GetNewIndex($hWnd)
;Try to assign index from previously deleted control
For $i = 0 To UBound($_cHvr_aData) - 1 Step +1
If Not IsArray($_cHvr_aData[$i]) Then
Return $i
EndIf
Next
ReDim $_cHvr_aData[UBound($_cHvr_aData) + 1]
Return UBound($_cHvr_aData) - 1
EndFunc ;==>_cHvr_GetNewIndex
Func _WinAPI_GetCapture()
Return DllCall("user32.dll", "HWND", "GetCapture")[0]
EndFunc ;==>_WinAPI_GetCapture

View file

@ -0,0 +1,279 @@
#include-once
; #INDEX# ============================================================================================================
; Title .........: _StringSize
; AutoIt Version : v3.2.12.1 or higher
; Language ......: English
; Description ...: Returns size of rectangle required to display string - maximum width can be chosen
; Remarks .......:
; Note ..........:
; Author(s) .....: Melba23 - thanks to trancexx for the default DC code
; ====================================================================================================================
;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
; #CURRENT# ==========================================================================================================
; _StringSize: Returns size of rectangle required to display string - maximum width can be chosen
; ====================================================================================================================
; #INTERNAL_USE_ONLY#=================================================================================================
; _StringSize_Error_Close: Releases DC and deletes font object after error
; _StringSize_DefaultFontName: Determines Windows default font
; ====================================================================================================================
; #FUNCTION# =========================================================================================================
; Name...........: _StringSize
; Description ...: Returns size of rectangle required to display string - maximum permitted width can be chosen
; Syntax ........: _StringSize($sText[, $iSize[, $iWeight[, $iAttrib[, $sName[, $iWidth[, $hWnd]]]]]])
; Parameters ....: $sText - String to display
; $iSize - [optional] Font size in points - (default = 8.5)
; $iWeight - [optional] Font weight - (default = 400 = normal)
; $iAttrib - [optional] Font attribute (0-Normal (default), 2-Italic, 4-Underline, 8 Strike)
; + 1 if tabs are to be expanded before sizing
; $sName - [optional] Font name - (default = Tahoma)
; $iWidth - [optional] Max width for rectangle - (default = 0 => width of original string)
; $hWnd - [optional] GUI in which string will be displayed - (default 0 => normally not required)
; Requirement(s) : v3.2.12.1 or higher
; Return values .: Success - Returns 4-element array: ($iWidth set // $iWidth not set)
; |$array[0] = String reformatted with additonal @CRLF // Original string
; |$array[1] = Height of single line in selected font // idem
; |$array[2] = Width of rectangle required for reformatted // original string
; |$array[3] = Height of rectangle required for reformatted // original string
; Failure - Returns 0 and sets @error:
; |1 - Incorrect parameter type (@extended = parameter index)
; |2 - DLL call error - extended set as follows:
; |1 - GetDC failure
; |2 - SendMessage failure
; |3 - GetDeviceCaps failure
; |4 - CreateFont failure
; |5 - SelectObject failure
; |6 - GetTextExtentPoint32 failure
; |3 - Font too large for chosen max width - a word will not fit
; Author ........: Melba23 - thanks to trancexx for the default DC code
; Modified ......:
; Remarks .......: The use of the $hWnd parameter is not normally necessary - it is only required if the UDF does not
; return correct dimensions without it.
; Related .......:
; Link ..........:
; Example .......: Yes
;=====================================================================================================================
Func _StringSize($sText, $iSize = 8.5, $iWeight = 400, $iAttrib = 0, $sName = "", $iMaxWidth = 0, $hWnd = 0)
; Set parameters passed as Default
If $iSize = Default Then $iSize = 8.5
If $iWeight = Default Then $iWeight = 400
If $iAttrib = Default Then $iAttrib = 0
If $sName = "" Or $sName = Default Then $sName = _StringSize_DefaultFontName()
; Check parameters are correct type
If Not IsString($sText) Then Return SetError(1, 1, 0)
If Not IsNumber($iSize) Then Return SetError(1, 2, 0)
If Not IsInt($iWeight) Then Return SetError(1, 3, 0)
If Not IsInt($iAttrib) Then Return SetError(1, 4, 0)
If Not IsString($sName) Then Return SetError(1, 5, 0)
If Not IsNumber($iMaxWidth) Then Return SetError(1, 6, 0)
If Not IsHwnd($hWnd) And $hWnd <> 0 Then Return SetError(1, 7, 0)
Local $aRet, $hDC, $hFont, $hLabel = 0, $hLabel_Handle
; Check for tab expansion flag
Local $iExpTab = BitAnd($iAttrib, 1)
; Remove possible tab expansion flag from font attribute value
$iAttrib = BitAnd($iAttrib, BitNot(1))
; If GUI handle was passed
If IsHWnd($hWnd) Then
; Create label outside GUI borders
$hLabel = GUICtrlCreateLabel("", -10, -10, 10, 10)
$hLabel_Handle = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
; Create DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hLabel_Handle)
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, 1, 0)
EndIf
$hDC = $aRet[0]
$aRet = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hLabel_Handle, "int", 0x0031, "wparam", 0, "lparam", 0) ; $WM_GetFont
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, _StringSize_Error_Close(2, $hDC), 0)
EndIf
$hFont = $aRet[0]
Else
; Get default DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
If @error Or $aRet[0] = 0 Then Return SetError(2, 1, 0)
$hDC = $aRet[0]
; Create required font
$aRet = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", 90) ; $LOGPIXELSY
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(3, $hDC), 0)
Local $iInfo = $aRet[0]
$aRet = DllCall("gdi32.dll", "handle", "CreateFontW", "int", -$iInfo * $iSize / 72, "int", 0, "int", 0, "int", 0, _
"int", $iWeight, "dword", BitAND($iAttrib, 2), "dword", BitAND($iAttrib, 4), "dword", BitAND($iAttrib, 8), "dword", 0, "dword", 0, _
"dword", 0, "dword", 5, "dword", 0, "wstr", $sName)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(4, $hDC), 0)
$hFont = $aRet[0]
EndIf
; Select font and store previous font
$aRet = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hFont)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(5, $hDC, $hFont, $hLabel), 0)
Local $hPrevFont = $aRet[0]
; Declare variables
Local $avSize_Info[4], $iLine_Length, $iLine_Height = 0, $iLine_Count = 0, $iLine_Width = 0, $iWrap_Count, $iLast_Word, $sTest_Line
; Declare and fill Size structure
Local $tSize = DllStructCreate("int X;int Y")
DllStructSetData($tSize, "X", 0)
DllStructSetData($tSize, "Y", 0)
; Ensure EoL is @CRLF and break text into lines
$sText = StringRegExpReplace($sText, "((?<!\x0d)\x0a|\x0d(?!\x0a))", @CRLF)
Local $asLines = StringSplit($sText, @CRLF, 1)
; For each line
For $i = 1 To $asLines[0]
; Expand tabs if required
If $iExpTab Then
$asLines[$i] = StringReplace($asLines[$i], @TAB, " XXXXXXXX")
EndIf
; Size line
$iLine_Length = StringLen($asLines[$i])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$i], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
If DllStructGetData($tSize, "X") > $iLine_Width Then $iLine_Width = DllStructGetData($tSize, "X")
If DllStructGetData($tSize, "Y") > $iLine_Height Then $iLine_Height = DllStructGetData($tSize, "Y")
Next
; Check if $iMaxWidth has been both set and exceeded
If $iMaxWidth <> 0 And $iLine_Width > $iMaxWidth Then ; Wrapping required
; For each Line
For $j = 1 To $asLines[0]
; Size line unwrapped
$iLine_Length = StringLen($asLines[$j])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$j], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
; Check wrap status
If DllStructGetData($tSize, "X") < $iMaxWidth - 4 Then
; No wrap needed so count line and store
$iLine_Count += 1
$avSize_Info[0] &= $asLines[$j] & @CRLF
Else
; Wrap needed so zero counter for wrapped lines
$iWrap_Count = 0
; Build line to max width
While 1
; Zero line width
$iLine_Width = 0
; Initialise pointer for end of word
$iLast_Word = 0
; Add characters until EOL or maximum width reached
For $i = 1 To StringLen($asLines[$j])
; Is this just past a word ending?
If StringMid($asLines[$j], $i, 1) = " " Then $iLast_Word = $i - 1
; Increase line by one character
$sTest_Line = StringMid($asLines[$j], 1, $i)
; Get line length
$iLine_Length = StringLen($sTest_Line)
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sTest_Line, "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
$iLine_Width = DllStructGetData($tSize, "X")
; If too long exit the loop
If $iLine_Width >= $iMaxWidth - 4 Then ExitLoop
Next
; End of the line of text?
If $i > StringLen($asLines[$j]) Then
; Yes, so add final line to count
$iWrap_Count += 1
; Store line
$avSize_Info[0] &= $sTest_Line & @CRLF
ExitLoop
Else
; No, but add line just completed to count
$iWrap_Count += 1
; Check at least 1 word completed or return error
If $iLast_Word = 0 Then Return SetError(3, _StringSize_Error_Close(0, $hDC, $hFont, $hLabel), 0)
; Store line up to end of last word
$avSize_Info[0] &= StringLeft($sTest_Line, $iLast_Word) & @CRLF
; Strip string to point reached
$asLines[$j] = StringTrimLeft($asLines[$j], $iLast_Word)
; Trim leading whitespace
$asLines[$j] = StringStripWS($asLines[$j], 1)
; Repeat with remaining characters in line
EndIf
WEnd
; Add the number of wrapped lines to the count
$iLine_Count += $iWrap_Count
EndIf
Next
; Reset any tab expansions
If $iExpTab Then
$avSize_Info[0] = StringRegExpReplace($avSize_Info[0], "\x20?XXXXXXXX", @TAB)
EndIf
; Complete return array
$avSize_Info[1] = $iLine_Height
$avSize_Info[2] = $iMaxWidth
; Convert lines to pixels and add drop margin
$avSize_Info[3] = ($iLine_Count * $iLine_Height) + 4
Else ; No wrapping required
; Create return array (add drop margin to height)
Local $avSize_Info[4] = [$sText, $iLine_Height, $iLine_Width, ($asLines[0] * $iLine_Height) + 4]
EndIf
; Clear up
DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hPrevFont)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $avSize_Info
EndFunc ;==>_StringSize
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_Error_Close
; Description ...: Releases DC and deleted font object if required after error
; Syntax ........: _StringSize_Error_Close ($iExtCode, $hDC, $hGUI)
; Parameters ....: $iExtCode - code to return
; $hDC, $hGUI - handles as set in _StringSize function
; Return value ..: $iExtCode as passed
; Author ........: Melba23
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_Error_Close($iExtCode, $hDC = 0, $hFont = 0, $hLabel = 0)
If $hFont <> 0 Then DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
If $hDC <> 0 Then DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $iExtCode
EndFunc ;=>_StringSize_Error_Close
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_DefaultFontName
; Description ...: Determines Windows default font
; Syntax ........: _StringSize_DefaultFontName()
; Parameters ....: None
; Return values .: Success - Returns name of system default font
; Failure - Returns "Tahoma"
; Author ........: Melba23, based on some original code by Larrydalooza
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_DefaultFontName()
; Get default system font data
Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]")
DLLStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS))
DLLCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0)
Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DLLStructGetPtr($tNONCLIENTMETRICS, 13))
If IsString(DllStructGetData($tLOGFONT, 14)) Then
Return DllStructGetData($tLOGFONT, 14)
Else
Return "Tahoma"
EndIf
EndFunc ;=>_StringSize_DefaultFontName

View file

@ -0,0 +1,80 @@
#include-once
; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
; #INDEX# =======================================================================================================================
; Title .........: _GUIDisable
; AutoIt Version : v3.2.2.0 or higher
; Language ......: English
; Description ...: Creates a dimming effect on the current/selected GUI.
; Note ..........:
; Author(s) .....: guinness
; Remarks .......: Thanks to supersonic for the idea of adjusting the UDF when using Classic themes in Windows Vista+.
; ===============================================================================================================================
; #INCLUDES# ====================================================================================================================
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
; #GLOBAL VARIABLES# ============================================================================================================
Global Enum $__hGUIDisableHWnd, $__hGUIDisableHWndPrevious, $__iGUIDisableMax
Global $__aGUIDisable[$__iGUIDisableMax]
Func _GUIDisable($hWnd, $iAnimate = Default, $iBrightness = Default, $bColor = 0x000000)
Local Const $AW_SLIDE_IN_TOP = 0x00040004, $AW_SLIDE_OUT_TOP = 0x00050008
If $iAnimate = Default Then
$iAnimate = 1
EndIf
If $iBrightness = Default Then
$iBrightness = 5
EndIf
If $hWnd = -1 And $__aGUIDisable[$__hGUIDisableHWnd] = 0 Then
Local $iLabel = GUICtrlCreateLabel('', -99, -99, 1, 1)
$hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iLabel))
If @error Then
Return SetError(1, 0 * GUICtrlDelete($iLabel), 0)
EndIf
GUICtrlDelete($iLabel)
EndIf
If IsHWnd($__aGUIDisable[$__hGUIDisableHWnd]) Then
GUIDelete($__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = 0
$__aGUIDisable[$__hGUIDisableHWndPrevious] = 0
Else
$__aGUIDisable[$__hGUIDisableHWndPrevious] = $hWnd
Local $iLeft = 0, $iTop = 0
Local $iStyle = GUIGetStyle($__aGUIDisable[$__hGUIDisableHWndPrevious])
Local $sCurrentTheme = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes', 'CurrentTheme')
Local $iIsClassicTheme = Number(StringInStr($sCurrentTheme, 'Basic.theme', 2) = 0 And StringInStr($sCurrentTheme, 'Ease of Access Themes', 2) > 0)
Local $aWinGetPos = WinGetClientSize($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = GUICreate('', $aWinGetPos[0], $aWinGetPos[1], $iLeft + 3, $iTop + 3, $WS_POPUP, $WS_EX_MDICHILD, $__aGUIDisable[$__hGUIDisableHWndPrevious])
GUISetBkColor($bColor, $__aGUIDisable[$__hGUIDisableHWnd])
WinSetTrans($__aGUIDisable[$__hGUIDisableHWnd], '', Round($iBrightness * (255 / 100)))
If not $iAnimate Then
GUISetState(@SW_SHOW, $__aGUIDisable[$__hGUIDisableHWnd])
EndIf
GUISetState(@SW_DISABLE, $__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
EndIf
Return $__aGUIDisable[$__hGUIDisableHWnd]
EndFunc ;==>_GUIDisable
; #INTERNAL_USE_ONLY#============================================================================================================
Func __GUIDisable_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $iHeight = _WinAPI_HiWord($ilParam)
Local $iWidth = _WinAPI_LoWord($ilParam)
If $hWnd = $__aGUIDisable[$__hGUIDisableHWndPrevious] Then
Local $iWinGetPos = WinGetPos($__aGUIDisable[$__hGUIDisableHWnd])
If @error = 0 Then
WinMove($__aGUIDisable[$__hGUIDisableHWnd], '', $iWinGetPos[0], $iWinGetPos[1], $iWidth, $iHeight)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>__GUIDisable_WM_SIZE

View file

@ -0,0 +1,13 @@
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: Tyleo
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)

View file

@ -0,0 +1,10 @@
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include <WindowsConstants.au3>
Func TyleoAbout($SoftName)
_Metro_MsgBox(8,"About / A propos",$SoftName & @CRLF & "Tyleo Softwares @ 2021" & @CRLF & " " & @CRLF & "BUILDING TOMORROW" & @CRLF & " " & @CRLF & "This Software is free and Open Source." & @CRLF & "tyleo.dev@outlook.com",400,15)
Return True
EndFunc

23
AntiLock/AntiLock.au3 Executable file
View file

@ -0,0 +1,23 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "TyleoAboutMe.au3"
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
#include-once
#cs ----------------------------------------------------------------------------
Author: BB_19
Material Themes for MetroGUI UDF
If you want to create your own themes, check out flatcolors.net, you can find there many random material/flat colors :)
#ce ----------------------------------------------------------------------------
;#Set Default Theme
Global $GUIThemeColor = "0x13161C" ; GUI Background Color
Global $FontThemeColor = "0xFFFFFF" ; Font Color
Global $GUIBorderColor = "0x2D2D2D" ; GUI Border Color
Global $ButtonBKColor = "0x00796b" ; Metro Button BacKground Color
Global $ButtonTextColor = "0xFFFFFF" ; Metro Button Text Color
Global $CB_Radio_Color = "0xFFFFFF" ;Checkbox and Radio Color (Box/Circle)
Global $GUI_Theme_Name = "DarkTealV2" ;Theme Name (For internal usage)
Global $CB_Radio_Hover_Color = "0xD8D8D8" ; Checkbox and Radio Hover Color (Box/Circle)
Global $CB_Radio_CheckMark_Color = "0x1a1a1a" ; Checkbox and Radio checkmark color
Func _SetTheme($ThemeSelect = "DarkTeal")
$GUI_Theme_Name = $ThemeSelect
Switch ($ThemeSelect)
Case "LightTeal"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTeal"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTealV2"
$GUIThemeColor = "0x13161C"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x35635B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkRuby"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x712043"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightTeal"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x336058"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightCyan"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x0D5C63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightBlue"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x1A4F70"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnight"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x3C4D66"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlue"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlueV2"
$GUIThemeColor = "0x040D11"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightBlue"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x244E80"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightCyan"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkCyan"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGray"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x3F5863"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGreen"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x2E7D32"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreen"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreenV2"
$GUIThemeColor = "0x061319"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightRed"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xc62828"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGray"
$GUIThemeColor = "0x1B2428"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x4F6772"
$ButtonBKColor = "0x607D8B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkAmber"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xffa000"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightOrange"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xBC5E05"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkOrange"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xC76810"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPurple"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkPurple"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPink"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xE91E63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case Else
ConsoleWrite("Metro-UDF-Error: Theme not found, using default theme." & @CRLF)
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
$GUI_Theme_Name = "DarkTealV2"
EndSwitch
EndFunc ;==>_SetTheme

View file

@ -0,0 +1,495 @@
;======================================
;~ Author : binhnx
;~ Created : 2014/10/20
;======================================
;~ Modified : BB_19
;~ Last modified : 2017/10/07
;======================================
#include-once
#include <WinAPI.au3>
#include <WinAPIShellEx.au3>
Local $_cHvr_aData[0]
Local Const $_cHvr_HDLLCOMCTL32 = _WinAPI_LoadLibrary('comctl32.dll')
Assert($_cHvr_HDLLCOMCTL32 <> 0, 'This UDF requires comctl32.dll')
Local Const $_cHvr_PDEFSUBCLASSPROC = _WinAPI_GetProcAddress($_cHvr_HDLLCOMCTL32, 'DefSubclassProc')
Local Const $_cHvr_PINTERNALSUBCLASS_DLL = DllCallbackRegister('_cHvr_iProc', 'NONE', 'HWND;UINT;WPARAM;LPARAM;DWORD')
Local Const $_cHvr_PINTERNALSUBCLASS = DllCallbackGetPtr($_cHvr_PINTERNALSUBCLASS_DLL)
OnAutoItExitRegister("_cHvr_Finalize")
Local Const $_cHvr_TSUBCLASSEXE = Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86')
Local Const $_cHvr_HEXECUTABLEHEAP = DllCall('kernel32.dll', 'HANDLE', 'HeapCreate', 'DWORD', 0x00040000, 'ULONG_PTR', 0, 'ULONG_PTR', 0)[0]
Assert($_cHvr_HEXECUTABLEHEAP <> 0, 'Failed to create executable heap object')
Local Const $_cHvr_PSUBCLASSEXE = _cHvr_ExecutableFromStruct(Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86'))
Func _cHvr_Register($idCtrl, $fnHovOff = '', $fnHoverOn = '', $fnClick = '', $fnDblClk = '', $HoverData = 0,$ClickData = 0,$fnRightClick = '')
Local $hWnd = GUICtrlGetHandle($idCtrl)
If (Not (IsHWnd($hWnd))) Then Return SetError(1, 0, -1)
Local $nIndex = _cHvr_GetNewIndex($hWnd)
Local $aData[13]
$aData[0] = $hWnd;Control Hwnd
$aData[1] = $idCtrl; Control handle
$aData[3] = $fnHovOff;Hover Off func
$aData[4] = $HoverData;Hover Off Data
$aData[5] = $fnHoverOn;Hover ON func
$aData[6] = $HoverData;Hover ON Data
$aData[7] = $fnRightClick;RClick func
$aData[8] = $ClickData; click data
$aData[9] = $fnClick;Click func
$aData[10] = $ClickData; click data
$aData[11] = $fnDblClk;DB click func
$aData[12] = $ClickData;DB click data
$_cHvr_aData[$nIndex] = $aData
_WinAPI_SetWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd, $nIndex)
Return $nIndex
EndFunc ;==>_cHvr_Register
Func _cHvr_iProc($hWnd, $uMsg, $wParam, $lParam, $cIndex)
Switch $uMsg
Case 0x0200;Hover
GUISetCursor(2, 1)
_cHvr_cMove($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0201;Leftclick
_cHvr_cDown($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0202
_cHvr_cUp($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Return False
Case 0x0203;Doubleclick
_cHvr_cDblClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0204;Rightclick
_cHvr_cRightClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x02A3;Hover leave
_cHvr_cLeave($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0082;Deleted
_cHvr_UnRegisterInternal($cIndex, $hWnd)
EndSwitch
Return True
EndFunc ;==>_cHvr_iProc
Func _cHvr_cDown(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_WinAPI_SetCapture($hWnd)
_cHvr_CallFunc($aCtrlData, 9)
EndFunc ;==>_cHvr_cDown
Func _cHvr_cMove(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
Local $bIn = _cHvr_IsInClient($hWnd, $lParam)
If Not $aCtrlData[2] Then
If $bIn Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 9)
EndIf
Else
If Not $bIn Then
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndIf
EndIf
ElseIf Not $aCtrlData[2] Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 5)
Local $tTME = DllStructCreate('DWORD;DWORD;HWND;DWORD')
DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, 2) ;$TME_LEAVE
DllStructSetData($tTME, 3, $hWnd)
DllCall('user32.dll', 'BOOL', 'TrackMouseEvent', 'STRUCT*', $tTME)
EndIf
EndFunc ;==>_cHvr_cMove
Func _cHvr_cUp(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
Local $lRet = _WinAPI_DefSubclassProc($hWnd, $uMsg, $wParam, $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
_WinAPI_ReleaseCapture()
If _cHvr_IsInClient($hWnd, $lParam) Then
_cHvr_CallFunc($aCtrlData, 9)
EndIf
EndIf
Return $lRet
EndFunc ;==>_cHvr_cUp
Func _cHvr_cDblClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 11)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cRightClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 7)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cLeave(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndFunc ;==>_cHvr_cLeave
Func _cHvr_CallFunc(ByRef $aCtrlData, $iCallType)
Call($aCtrlData[$iCallType], $aCtrlData[1], $aCtrlData[$iCallType + 1])
EndFunc ;==>_cHvr_CallFunc
Func _cHvr_ArrayPush(ByRef $aStackArr, Const $vSrc1 = Default, Const $vSrc2 = Default, Const $vSrc3 = Default, Const $vSrc4 = Default, Const $vSrc5 = Default)
While (UBound($aStackArr) < ($aStackArr[0] + @NumParams))
ReDim $aStackArr[UBound($aStackArr) * 2]
WEnd
If Not ($vSrc1 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc1
EndIf
If Not ($vSrc2 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc2
EndIf
If Not ($vSrc3 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc3
EndIf
If Not ($vSrc4 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc4
EndIf
If Not ($vSrc5 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc5
EndIf
EndFunc ;==>_cHvr_ArrayPush
Func _cHvr_IsInClient($hWnd, $lParam)
Local $iX = BitShift(BitShift($lParam, -16), 16)
Local $iY = BitShift($lParam, 16)
Local $aSize = WinGetClientSize($hWnd)
Return Not ($iX < 0 Or $iY < 0 Or $iX > $aSize[0] Or $iY > $aSize[1])
EndFunc ;==>_cHvr_IsInClient
Func _cHvr_CSCP_X86() ;Create Subclass Process x86
; $hWnd HWND size: 4 ESP+4 EBP+8
; $uMsg UINT size: 4 ESP+8 EBP+12
; $wParam WPARAM size: 4 ESP+12 EBP+16
; $lParam LPARAM size: 4 ESP+16 EBP+20
; $uIdSubclass UINT_PTR size: 4 ESP+20 EBP+24
; $dwRefData DWORD_PTR size: 4 ESP+24 EBP+28 Total: 24
; NERVER FORGET ADDING align 1 OR YOU WILL SPEND HOURS TO FIND WHAT CAUSE 0xC0000005 Access Violation
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; Func ; __stdcall
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x55) ;push ebp
_cHvr_ArrayPush($aOpCode, 0x8B, 0xEC) ;mov ebp, esp
; Save un-modified params to nv register
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+16]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x5D, 16) ;8b 5d 10
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;BYTE;BYTE;' ;mov esi, DWORD PTR [ebp+12]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x75, 12) ;8b 75 0c
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+20]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x7D, 20) ;8b 7d 14
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x82) ;81 fe 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x2A3) ;81 fe a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;BYTE;' ;lea eax, DWORD PTR [esi-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x86, -0x200) ;8d 86 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
; :WndProcInternal (HWND, UINT, WPARAM, LPARAM, DWORD)
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ecx, DWORD PTR [ebp+28]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x4D, 28) ;8b 4d 1c
$sExe &= 'BYTE;BYTE;BYTE;' ;mov edx, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x55, 8) ;8b 55 08
$sExe &= 'BYTE;' ;push ecx
_cHvr_ArrayPush($aOpCode, 0x51) ;51
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push edx
_cHvr_ArrayPush($aOpCode, 0x52) ;52
; Call
$sExe &= 'BYTE;PTR;' ;mov eax, _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PINTERNALSUBCLASS)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;' ;test eax, eax
_cHvr_ArrayPush($aOpCode, 0x85, 0xC0) ;85 c0
$sExe &= 'BYTE;BYTE;' ;jz short Return
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$aOpCode[$nElemOffset[2]] = $nAddrOffset[3] - $nAddrOffset[2]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov eax, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x45, 8)
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push eax
_cHvr_ArrayPush($aOpCode, 0x50) ;50
;Call
$sExe &= 'BYTE;PTR;' ;mov eax,COMCTL32.DefSubclassProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
; :Return
$aOpCode[$nElemOffset[3]] = $nAddrOffset[4] - $nAddrOffset[3]
; Restore nv-register
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x5F) ;pop edi
_cHvr_ArrayPush($aOpCode, 0x5E) ;pop esi
_cHvr_ArrayPush($aOpCode, 0x5B) ;pop ebx
; EndFunc
$sExe &= 'BYTE;BYTE;BYTE;WORD'
_cHvr_ArrayPush($aOpCode, 0x5D) ;pop ebp
_cHvr_ArrayPush($aOpCode, 0xC2, 24) ;ret 24
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X86
Func _cHvr_CSCP_X64() ;Create Subclass Process x64
; First four INT and UINT has size = 8 instead of 4 because they are stored in RCX, RDX, R8, R9
; $hWnd HWND size: 8 RCX RSP+8
; $uMsg UINT size: 8 EDX RSP+16
; $wParam WPARAM size: 8 R8 RSP+24
; $lParam LPARAM size: 8 R9 RSP+32
; $uIdSubclass UINT_PTR size: 8 RSP+40
; $dwRefData DWORD_PTR size: 8 RSP+48 Total: 48
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x82) ;81 fa 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x2A3) ;81 fa a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;DWORD;' ;lea eax, DWORD PTR [rdx-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x82, -0x200) ;8d 82 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; :WndProcInternal (HWND rsp+8, UINT +16, WPARAM +24, LPARAM +32, DWORD +40)
; $dwRefData = [ESP+48+48(sub rsp, 48)+8(push rdi)] = [ESP+104]
; Save base registers:
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+8], rbx
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x5C, 0x24, 8) ;48 89 5c 24 08
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+16], rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x6C, 0x24, 16) ;48 89 6c 24 10
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+24], rsi
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x74, 0x24, 24) ;48 89 74 24 18
$sExe &= 'BYTE;' ;push rdi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
; Max sub-routine params = 5 (size = 5*8 = 40), + 8 bytes for return value = 48.
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;sub rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xEC, 48) ;48 83 ec 30
; rbx, rbp, rsi now at [ESP+8+56], [ESP+16+56], [ESP+24+56]
; Save the parameters:
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rdi, r9
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF9) ;49 8b f9
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rsi, r8
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF0) ;49 8b f0
$sExe &= 'BYTE;BYTE;' ;mov ebx, edx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xDA) ;8b da
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rbp, rcx
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xE9) ;48 8b e9
; Prepare additional parameter for internal WndProc
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rax, QWORD PTR [rsp+104]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x44, 0x24, 104) ;48 8b 44 24 68
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+32], Rax]
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x44, 0x24, 32) ;48 89 44 24 20
; Call internal WndProc
$sExe &= 'BYTE;BYTE;PTR;' ;mov rax, QWORD PTR _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PINTERNALSUBCLASS)
;movabs rax, _cHvr_iProc ;48 b8 QWORD_PTR
$sExe &= 'BYTE;BYTE;' ;call rax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff d0
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; Restore parameters for DefSubclassProc call
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r9, rdi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xCF) ;4c 8b cf
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r8, rsi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xC6) ;4c 8b c6
$sExe &= 'BYTE;BYTE;' ;mov edx, ebx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xD3) ;8b d3
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rcx, rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xCD) ;48 8b cd
; Restore registers value
$aOpCode[$nElemOffset[3]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[3]
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbx, QWORD PTR [rsp+64]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x5C, 0x24, 64) ;48 8b 5c 24 40
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbp, QWORD PTR [rsp+72]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x6C, 0x24, 72) ;48 8b 6c 24 48
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rsi, QWORD PTR [rsp+80]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x74, 0x24, 80) ;48 8b 74 24 50
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;add rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xc4, 48) ;48 83 c4 30
$sExe &= 'BYTE;' ;pop rdi
_cHvr_ArrayPush($aOpCode, 0x5F) ;5f
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[4] = $aOpCode[0]
$aOpCode[$nElemOffset[2]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[2]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$sExe &= 'BYTE;BYTE;PTR;'
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0xFF, 0xE0)
; :Return
$aOpCode[$nElemOffset[4]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[4]
$sExe &= 'BYTE;' ;ret 0
_cHvr_ArrayPush($aOpCode, 0xC3)
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X64
Func _cHvr_PopulateOpcode(ByRef $sExe, ByRef $aOpCode)
Local $tExe = DllStructCreate($sExe)
Assert(@error = 0, 'DllStrucCreate Failed With Error = ' & @error)
For $i = 1 To $aOpCode[0]
DllStructSetData($tExe, $i, $aOpCode[$i])
Next
Return $tExe
EndFunc ;==>_cHvr_PopulateOpcode
Func _cHvr_ExecutableFromStruct($tExe)
Local $pExe = DllCall('kernel32.dll', 'PTR', 'HeapAlloc', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 8, 'ULONG_PTR', DllStructGetSize($tExe))[0]
Assert($pExe <> 0, 'Allocate memory failed')
DllCall("kernel32.dll", "none", "RtlMoveMemory", "PTR", $pExe, "PTR", DllStructGetPtr($tExe), "ULONG_PTR", DllStructGetSize($tExe))
Assert(@error = 0, 'Failed to copy memory')
Return $pExe
EndFunc ;==>_cHvr_ExecutableFromStruct
Func _cHvr_UnRegisterInternal($cIndex, $hWnd)
_WinAPI_RemoveWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd)
Local $aData=$_cHvr_aData[$cIndex]
$_cHvr_aData[$cIndex] = 0
Call( "_iControlDelete",$aData[1])
EndFunc ;==>_cHvr_UnRegisterInternal
Func _cHvr_Finalize()
DllCallbackFree($_cHvr_PINTERNALSUBCLASS_DLL)
_WinAPI_FreeLibrary($_cHvr_HDLLCOMCTL32)
If ($_cHvr_HEXECUTABLEHEAP <> 0) Then
If ($_cHvr_PSUBCLASSEXE <> 0) Then
DllCall('kernel32.dll', 'BOOL', 'HeapFree', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 0, 'PTR', $_cHvr_PSUBCLASSEXE)
EndIf
DllCall('kernel32.dll', 'BOOL', 'HeapDestroy', 'HANDLE', $_cHvr_HEXECUTABLEHEAP)
EndIf
EndFunc ;==>_cHvr_Finalize
Func Assert($bExpression, $sMsg = '', $sScript = @ScriptName, $sScriptPath = @ScriptFullPath, $iLine = @ScriptLineNumber, $iError = @error, $iExtend = @extended)
If (Not ($bExpression)) Then
MsgBox(BitOR(1, 0x10), 'Assertion Error!', _
@CRLF & 'Script' & @TAB & ': ' & $sScript _
& @CRLF & 'Path' & @TAB & ': ' & $sScriptPath _
& @CRLF & 'Line' & @TAB & ': ' & $iLine _
& @CRLF & 'Error' & @TAB & ': ' & ($iError > 0x7FFF ? Hex($iError) : $iError) _
& ($iExtend <> 0 ? ' (Extended : ' & ($iExtend > 0x7FFF ? Hex($iExtend) : $iExtend) & ')' : '') _
& @CRLF & 'Message' & @TAB & ': ' & $sMsg _
& @CRLF & @CRLF & 'OK: Exit Script' & @TAB & 'Cancel: Continue')
Exit
EndIf
EndFunc ;==>Assert
Func _cHvr_GetNewIndex($hWnd)
;Try to assign index from previously deleted control
For $i = 0 To UBound($_cHvr_aData) - 1 Step +1
If Not IsArray($_cHvr_aData[$i]) Then
Return $i
EndIf
Next
ReDim $_cHvr_aData[UBound($_cHvr_aData) + 1]
Return UBound($_cHvr_aData) - 1
EndFunc ;==>_cHvr_GetNewIndex
Func _WinAPI_GetCapture()
Return DllCall("user32.dll", "HWND", "GetCapture")[0]
EndFunc ;==>_WinAPI_GetCapture

View file

@ -0,0 +1,279 @@
#include-once
; #INDEX# ============================================================================================================
; Title .........: _StringSize
; AutoIt Version : v3.2.12.1 or higher
; Language ......: English
; Description ...: Returns size of rectangle required to display string - maximum width can be chosen
; Remarks .......:
; Note ..........:
; Author(s) .....: Melba23 - thanks to trancexx for the default DC code
; ====================================================================================================================
;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
; #CURRENT# ==========================================================================================================
; _StringSize: Returns size of rectangle required to display string - maximum width can be chosen
; ====================================================================================================================
; #INTERNAL_USE_ONLY#=================================================================================================
; _StringSize_Error_Close: Releases DC and deletes font object after error
; _StringSize_DefaultFontName: Determines Windows default font
; ====================================================================================================================
; #FUNCTION# =========================================================================================================
; Name...........: _StringSize
; Description ...: Returns size of rectangle required to display string - maximum permitted width can be chosen
; Syntax ........: _StringSize($sText[, $iSize[, $iWeight[, $iAttrib[, $sName[, $iWidth[, $hWnd]]]]]])
; Parameters ....: $sText - String to display
; $iSize - [optional] Font size in points - (default = 8.5)
; $iWeight - [optional] Font weight - (default = 400 = normal)
; $iAttrib - [optional] Font attribute (0-Normal (default), 2-Italic, 4-Underline, 8 Strike)
; + 1 if tabs are to be expanded before sizing
; $sName - [optional] Font name - (default = Tahoma)
; $iWidth - [optional] Max width for rectangle - (default = 0 => width of original string)
; $hWnd - [optional] GUI in which string will be displayed - (default 0 => normally not required)
; Requirement(s) : v3.2.12.1 or higher
; Return values .: Success - Returns 4-element array: ($iWidth set // $iWidth not set)
; |$array[0] = String reformatted with additonal @CRLF // Original string
; |$array[1] = Height of single line in selected font // idem
; |$array[2] = Width of rectangle required for reformatted // original string
; |$array[3] = Height of rectangle required for reformatted // original string
; Failure - Returns 0 and sets @error:
; |1 - Incorrect parameter type (@extended = parameter index)
; |2 - DLL call error - extended set as follows:
; |1 - GetDC failure
; |2 - SendMessage failure
; |3 - GetDeviceCaps failure
; |4 - CreateFont failure
; |5 - SelectObject failure
; |6 - GetTextExtentPoint32 failure
; |3 - Font too large for chosen max width - a word will not fit
; Author ........: Melba23 - thanks to trancexx for the default DC code
; Modified ......:
; Remarks .......: The use of the $hWnd parameter is not normally necessary - it is only required if the UDF does not
; return correct dimensions without it.
; Related .......:
; Link ..........:
; Example .......: Yes
;=====================================================================================================================
Func _StringSize($sText, $iSize = 8.5, $iWeight = 400, $iAttrib = 0, $sName = "", $iMaxWidth = 0, $hWnd = 0)
; Set parameters passed as Default
If $iSize = Default Then $iSize = 8.5
If $iWeight = Default Then $iWeight = 400
If $iAttrib = Default Then $iAttrib = 0
If $sName = "" Or $sName = Default Then $sName = _StringSize_DefaultFontName()
; Check parameters are correct type
If Not IsString($sText) Then Return SetError(1, 1, 0)
If Not IsNumber($iSize) Then Return SetError(1, 2, 0)
If Not IsInt($iWeight) Then Return SetError(1, 3, 0)
If Not IsInt($iAttrib) Then Return SetError(1, 4, 0)
If Not IsString($sName) Then Return SetError(1, 5, 0)
If Not IsNumber($iMaxWidth) Then Return SetError(1, 6, 0)
If Not IsHwnd($hWnd) And $hWnd <> 0 Then Return SetError(1, 7, 0)
Local $aRet, $hDC, $hFont, $hLabel = 0, $hLabel_Handle
; Check for tab expansion flag
Local $iExpTab = BitAnd($iAttrib, 1)
; Remove possible tab expansion flag from font attribute value
$iAttrib = BitAnd($iAttrib, BitNot(1))
; If GUI handle was passed
If IsHWnd($hWnd) Then
; Create label outside GUI borders
$hLabel = GUICtrlCreateLabel("", -10, -10, 10, 10)
$hLabel_Handle = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
; Create DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hLabel_Handle)
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, 1, 0)
EndIf
$hDC = $aRet[0]
$aRet = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hLabel_Handle, "int", 0x0031, "wparam", 0, "lparam", 0) ; $WM_GetFont
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, _StringSize_Error_Close(2, $hDC), 0)
EndIf
$hFont = $aRet[0]
Else
; Get default DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
If @error Or $aRet[0] = 0 Then Return SetError(2, 1, 0)
$hDC = $aRet[0]
; Create required font
$aRet = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", 90) ; $LOGPIXELSY
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(3, $hDC), 0)
Local $iInfo = $aRet[0]
$aRet = DllCall("gdi32.dll", "handle", "CreateFontW", "int", -$iInfo * $iSize / 72, "int", 0, "int", 0, "int", 0, _
"int", $iWeight, "dword", BitAND($iAttrib, 2), "dword", BitAND($iAttrib, 4), "dword", BitAND($iAttrib, 8), "dword", 0, "dword", 0, _
"dword", 0, "dword", 5, "dword", 0, "wstr", $sName)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(4, $hDC), 0)
$hFont = $aRet[0]
EndIf
; Select font and store previous font
$aRet = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hFont)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(5, $hDC, $hFont, $hLabel), 0)
Local $hPrevFont = $aRet[0]
; Declare variables
Local $avSize_Info[4], $iLine_Length, $iLine_Height = 0, $iLine_Count = 0, $iLine_Width = 0, $iWrap_Count, $iLast_Word, $sTest_Line
; Declare and fill Size structure
Local $tSize = DllStructCreate("int X;int Y")
DllStructSetData($tSize, "X", 0)
DllStructSetData($tSize, "Y", 0)
; Ensure EoL is @CRLF and break text into lines
$sText = StringRegExpReplace($sText, "((?<!\x0d)\x0a|\x0d(?!\x0a))", @CRLF)
Local $asLines = StringSplit($sText, @CRLF, 1)
; For each line
For $i = 1 To $asLines[0]
; Expand tabs if required
If $iExpTab Then
$asLines[$i] = StringReplace($asLines[$i], @TAB, " XXXXXXXX")
EndIf
; Size line
$iLine_Length = StringLen($asLines[$i])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$i], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
If DllStructGetData($tSize, "X") > $iLine_Width Then $iLine_Width = DllStructGetData($tSize, "X")
If DllStructGetData($tSize, "Y") > $iLine_Height Then $iLine_Height = DllStructGetData($tSize, "Y")
Next
; Check if $iMaxWidth has been both set and exceeded
If $iMaxWidth <> 0 And $iLine_Width > $iMaxWidth Then ; Wrapping required
; For each Line
For $j = 1 To $asLines[0]
; Size line unwrapped
$iLine_Length = StringLen($asLines[$j])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$j], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
; Check wrap status
If DllStructGetData($tSize, "X") < $iMaxWidth - 4 Then
; No wrap needed so count line and store
$iLine_Count += 1
$avSize_Info[0] &= $asLines[$j] & @CRLF
Else
; Wrap needed so zero counter for wrapped lines
$iWrap_Count = 0
; Build line to max width
While 1
; Zero line width
$iLine_Width = 0
; Initialise pointer for end of word
$iLast_Word = 0
; Add characters until EOL or maximum width reached
For $i = 1 To StringLen($asLines[$j])
; Is this just past a word ending?
If StringMid($asLines[$j], $i, 1) = " " Then $iLast_Word = $i - 1
; Increase line by one character
$sTest_Line = StringMid($asLines[$j], 1, $i)
; Get line length
$iLine_Length = StringLen($sTest_Line)
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sTest_Line, "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
$iLine_Width = DllStructGetData($tSize, "X")
; If too long exit the loop
If $iLine_Width >= $iMaxWidth - 4 Then ExitLoop
Next
; End of the line of text?
If $i > StringLen($asLines[$j]) Then
; Yes, so add final line to count
$iWrap_Count += 1
; Store line
$avSize_Info[0] &= $sTest_Line & @CRLF
ExitLoop
Else
; No, but add line just completed to count
$iWrap_Count += 1
; Check at least 1 word completed or return error
If $iLast_Word = 0 Then Return SetError(3, _StringSize_Error_Close(0, $hDC, $hFont, $hLabel), 0)
; Store line up to end of last word
$avSize_Info[0] &= StringLeft($sTest_Line, $iLast_Word) & @CRLF
; Strip string to point reached
$asLines[$j] = StringTrimLeft($asLines[$j], $iLast_Word)
; Trim leading whitespace
$asLines[$j] = StringStripWS($asLines[$j], 1)
; Repeat with remaining characters in line
EndIf
WEnd
; Add the number of wrapped lines to the count
$iLine_Count += $iWrap_Count
EndIf
Next
; Reset any tab expansions
If $iExpTab Then
$avSize_Info[0] = StringRegExpReplace($avSize_Info[0], "\x20?XXXXXXXX", @TAB)
EndIf
; Complete return array
$avSize_Info[1] = $iLine_Height
$avSize_Info[2] = $iMaxWidth
; Convert lines to pixels and add drop margin
$avSize_Info[3] = ($iLine_Count * $iLine_Height) + 4
Else ; No wrapping required
; Create return array (add drop margin to height)
Local $avSize_Info[4] = [$sText, $iLine_Height, $iLine_Width, ($asLines[0] * $iLine_Height) + 4]
EndIf
; Clear up
DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hPrevFont)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $avSize_Info
EndFunc ;==>_StringSize
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_Error_Close
; Description ...: Releases DC and deleted font object if required after error
; Syntax ........: _StringSize_Error_Close ($iExtCode, $hDC, $hGUI)
; Parameters ....: $iExtCode - code to return
; $hDC, $hGUI - handles as set in _StringSize function
; Return value ..: $iExtCode as passed
; Author ........: Melba23
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_Error_Close($iExtCode, $hDC = 0, $hFont = 0, $hLabel = 0)
If $hFont <> 0 Then DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
If $hDC <> 0 Then DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $iExtCode
EndFunc ;=>_StringSize_Error_Close
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_DefaultFontName
; Description ...: Determines Windows default font
; Syntax ........: _StringSize_DefaultFontName()
; Parameters ....: None
; Return values .: Success - Returns name of system default font
; Failure - Returns "Tahoma"
; Author ........: Melba23, based on some original code by Larrydalooza
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_DefaultFontName()
; Get default system font data
Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]")
DLLStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS))
DLLCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0)
Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DLLStructGetPtr($tNONCLIENTMETRICS, 13))
If IsString(DllStructGetData($tLOGFONT, 14)) Then
Return DllStructGetData($tLOGFONT, 14)
Else
Return "Tahoma"
EndIf
EndFunc ;=>_StringSize_DefaultFontName

View file

@ -0,0 +1,80 @@
#include-once
; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
; #INDEX# =======================================================================================================================
; Title .........: _GUIDisable
; AutoIt Version : v3.2.2.0 or higher
; Language ......: English
; Description ...: Creates a dimming effect on the current/selected GUI.
; Note ..........:
; Author(s) .....: guinness
; Remarks .......: Thanks to supersonic for the idea of adjusting the UDF when using Classic themes in Windows Vista+.
; ===============================================================================================================================
; #INCLUDES# ====================================================================================================================
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
; #GLOBAL VARIABLES# ============================================================================================================
Global Enum $__hGUIDisableHWnd, $__hGUIDisableHWndPrevious, $__iGUIDisableMax
Global $__aGUIDisable[$__iGUIDisableMax]
Func _GUIDisable($hWnd, $iAnimate = Default, $iBrightness = Default, $bColor = 0x000000)
Local Const $AW_SLIDE_IN_TOP = 0x00040004, $AW_SLIDE_OUT_TOP = 0x00050008
If $iAnimate = Default Then
$iAnimate = 1
EndIf
If $iBrightness = Default Then
$iBrightness = 5
EndIf
If $hWnd = -1 And $__aGUIDisable[$__hGUIDisableHWnd] = 0 Then
Local $iLabel = GUICtrlCreateLabel('', -99, -99, 1, 1)
$hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iLabel))
If @error Then
Return SetError(1, 0 * GUICtrlDelete($iLabel), 0)
EndIf
GUICtrlDelete($iLabel)
EndIf
If IsHWnd($__aGUIDisable[$__hGUIDisableHWnd]) Then
GUIDelete($__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = 0
$__aGUIDisable[$__hGUIDisableHWndPrevious] = 0
Else
$__aGUIDisable[$__hGUIDisableHWndPrevious] = $hWnd
Local $iLeft = 0, $iTop = 0
Local $iStyle = GUIGetStyle($__aGUIDisable[$__hGUIDisableHWndPrevious])
Local $sCurrentTheme = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes', 'CurrentTheme')
Local $iIsClassicTheme = Number(StringInStr($sCurrentTheme, 'Basic.theme', 2) = 0 And StringInStr($sCurrentTheme, 'Ease of Access Themes', 2) > 0)
Local $aWinGetPos = WinGetClientSize($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = GUICreate('', $aWinGetPos[0], $aWinGetPos[1], $iLeft + 3, $iTop + 3, $WS_POPUP, $WS_EX_MDICHILD, $__aGUIDisable[$__hGUIDisableHWndPrevious])
GUISetBkColor($bColor, $__aGUIDisable[$__hGUIDisableHWnd])
WinSetTrans($__aGUIDisable[$__hGUIDisableHWnd], '', Round($iBrightness * (255 / 100)))
If not $iAnimate Then
GUISetState(@SW_SHOW, $__aGUIDisable[$__hGUIDisableHWnd])
EndIf
GUISetState(@SW_DISABLE, $__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
EndIf
Return $__aGUIDisable[$__hGUIDisableHWnd]
EndFunc ;==>_GUIDisable
; #INTERNAL_USE_ONLY#============================================================================================================
Func __GUIDisable_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $iHeight = _WinAPI_HiWord($ilParam)
Local $iWidth = _WinAPI_LoWord($ilParam)
If $hWnd = $__aGUIDisable[$__hGUIDisableHWndPrevious] Then
Local $iWinGetPos = WinGetPos($__aGUIDisable[$__hGUIDisableHWnd])
If @error = 0 Then
WinMove($__aGUIDisable[$__hGUIDisableHWnd], '', $iWinGetPos[0], $iWinGetPos[1], $iWidth, $iHeight)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>__GUIDisable_WM_SIZE

13
AntiLock/Releases/.media Executable file
View file

@ -0,0 +1,13 @@
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: Tyleo
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)

10
AntiLock/TyleoAboutMe.au3 Executable file
View file

@ -0,0 +1,10 @@
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include <WindowsConstants.au3>
Func TyleoAbout($SoftName)
_Metro_MsgBox(8,"About / A propos",$SoftName & @CRLF & "Tyleo Softwares @ 2021" & @CRLF & " " & @CRLF & "BUILDING TOMORROW" & @CRLF & " " & @CRLF & "This Software is free and Open Source." & @CRLF & "tyleo.dev@outlook.com",400,15)
Return True
EndFunc

View file

@ -0,0 +1,208 @@
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=AutoLogon Manager.ico
#AutoIt3Wrapper_Outfile_x64=..\..\Logiciels\AutoLogon Manager.exe
#AutoIt3Wrapper_Res_Comment=Autologon Manager
#AutoIt3Wrapper_Res_Description=Autologon Manager
#AutoIt3Wrapper_Res_Fileversion=1.0.4.12
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductName=Autologon Manager
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "TyleoAboutMe.au3"
$CurrentVer = FileGetVersion(@AutoItExe)
$ProgName = "Autologon Manager " & $CurrentVer
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce
$NoticeConfirm = _Metro_MsgBox(4,"NOTICE - TYLEO SOFTWARES FOR ADMIN'S","WARNING - THIS SOFTWARE CAN CREATE AND MANAGE AUTOMATIC LOGON. THE USE OF THIS SOFTWARE IS AT YOUR OWN RISK. WE STRONGLY DONT RECOMMEND TO CONFIGURE AN AUTOLOGON ON AN ADMINISTRATOR ACCOUNT, AND EVEN MORE DOMAIN ADMIN ACCOUNT. THIS SOFTWARE ARE PROVIDED WITH THE AS-IS BASIS. SELECT YES/OUI IF YOU UNDERSTAND THE RISK.")
if $NoticeConfirm = "No" Then
Exit(0)
EndIf
$Win_Logon = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
$Win_AutoUser = "DefaultUserName"
$Win_AutoPass = "DefaultPassword"
$Win_AutoDomain = "DefaultDomainName"
$Win_AutologonActivation = "AutoAdminLogon"
$Win_Enabled = "1"
$Win_Disabled = "0"
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Autologon Manager " & $CurrentVer, 483, 163, 236, 242)
GUISetFont(14, 400, 0, "Segoe UI")
Global $Label1 = GUICtrlCreateLabel("Username", 8, 8, 94, 29)
Global $Label2 = GUICtrlCreateLabel("Password", 8, 48, 94, 29)
Global $Label3 = GUICtrlCreateLabel("Domain", 8, 88, 94, 29)
Global $AutoUser = GUICtrlCreateInput("", 104, 8, 273, 28)
GUICtrlSetFont(-1, 11, 400, 0, "Segoe UI Light")
Global $AutoPass = GUICtrlCreateInput("", 104, 48, 273, 28)
GUICtrlSetFont(-1, 11, 400, 0, "Segoe UI Light")
Global $AutoDomain = GUICtrlCreateInput("", 104, 88, 273, 28)
GUICtrlSetFont(-1, 11, 400, 0, "Segoe UI Light")
Global $OneClear = GUICtrlCreateButton("🧹", 384, 8, 25, 25)
GUICtrlSetTip(-1,"Clear Input")
GUICtrlSetCursor(-1,0)
Global $OneRead = GUICtrlCreateButton("🔽", 416, 8, 25, 25)
GUICtrlSetTip(-1,"Get Active Value")
GUICtrlSetCursor(-1,0)
Global $OneRemove = GUICtrlCreateButton("", 448, 8, 25, 25)
GUICtrlSetTip(-1,"Remove Key")
GUICtrlSetCursor(-1,0)
Global $TwoClear = GUICtrlCreateButton("🧹", 384, 48, 25, 25)
GUICtrlSetTip(-1,"Clear Input")
GUICtrlSetCursor(-1,0)
Global $TwoRead = GUICtrlCreateButton("🔽", 416, 48, 25, 25)
GUICtrlSetTip(-1,"Get Active Value")
GUICtrlSetCursor(-1,0)
Global $TwoRemove = GUICtrlCreateButton("", 448, 48, 25, 25)
GUICtrlSetTip(-1,"Remove Key")
GUICtrlSetCursor(-1,0)
Global $ThreeClear = GUICtrlCreateButton("🧹", 384, 88, 25, 25)
GUICtrlSetTip(-1,"Clear Input")
GUICtrlSetCursor(-1,0)
Global $ThreeRead = GUICtrlCreateButton("🔽", 416, 88, 25, 25)
GUICtrlSetTip(-1,"Get Active Value")
GUICtrlSetCursor(-1,0)
Global $ThreeRemove = GUICtrlCreateButton("", 448, 88, 25, 25)
GUICtrlSetTip(-1,"Remove Key")
GUICtrlSetCursor(-1,0)
Global $AutologonState = GUICtrlCreateButton("STATE : OFF", 380, 120, 90, 33)
GUICtrlSetTip(-1,"Cancel and Exit")
GUICtrlSetFont(-1, 8,900)
GUICtrlSetBkColor(-1,0xCC0000)
GUICtrlSetColor(-1,0xFFFFFF)
Global $ApplyEnable = GUICtrlCreateButton("APPLY && ENABLE", 252, 120, 120, 33)
GUICtrlSetTip(-1,"Save Configuration and Enable Autologon")
GUICtrlSetCursor(-1,0)
GUICtrlSetFont(-1, 8,900)
Global $AutologonDisable = GUICtrlCreateButton("DISABLE", 8, 120, 120, 33)
GUICtrlSetTip(-1,"Disable Autologon")
GUICtrlSetCursor(-1,0)
GUICtrlSetFont(-1, 8,900)
Global $Exit = GUICtrlCreateButton("CANCEL", 130, 120, 120, 33)
GUICtrlSetTip(-1,"Cancel and Exit")
GUICtrlSetCursor(-1,0)
GUICtrlSetFont(-1, 8,900)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
AutologonStateCheck()
$OneReg = RegRead($Win_Logon,$Win_AutoUser)
GUICtrlSetData($AutoUser,$OneReg)
$TwoReg = RegRead($Win_Logon,$Win_AutoPass)
GUICtrlSetData($AutoPass,$TwoReg)
$ThreeReg = RegRead($Win_Logon,$Win_AutoDomain)
GUICtrlSetData($AutoDomain,$ThreeReg)
While 1
$nMsg = GUIGetMsg()
AutologonStateCheck()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Exit
Exit
Case $OneClear
GUICtrlSetData($AutoUser,"")
Case $TwoClear
GUICtrlSetData($AutoPass,"")
Case $ThreeClear
GUICtrlSetData($AutoDomain,"")
Case $OneRead
$OneReg = RegRead($Win_Logon,$Win_AutoUser)
GUICtrlSetData($AutoUser,$OneReg)
Case $TwoRead
$TwoReg = RegRead($Win_Logon,$Win_AutoPass)
GUICtrlSetData($AutoPass,$TwoReg)
Case $ThreeRead
$ThreeReg = RegRead($Win_Logon,$Win_AutoDomain)
GUICtrlSetData($AutoDomain,$ThreeReg)
Case $OneRemove
RegDelete($Win_Logon,$Win_AutoUser)
MsgBox(0,"Removed","Key " & $Win_Logon & "\" & $Win_AutoUser & " Removed.", 2)
GUICtrlSetData($AutoUser,"")
Case $TwoRemove
RegDelete($Win_Logon,$Win_AutoPass)
MsgBox(0,"Removed","Key " & $Win_Logon & "\" & $Win_AutoPass & " Removed.", 2)
GUICtrlSetData($AutoPass,"")
Case $ThreeRemove
RegDelete($Win_Logon,$Win_AutoDomain)
MsgBox(0,"Removed","Key " & $Win_Logon & "\" & $Win_AutoDomain & " Removed.", 2)
GUICtrlSetData($AutoDomain,"")
Case $AutologonDisable
RegWrite($Win_Logon,$Win_AutologonActivation,"REG_SZ","0")
Case $ApplyEnable
$Apply_AutoUser = GUICtrlRead($AutoUser)
$Apply_AutoPass = GUICtrlRead($AutoPass)
$Apply_AutoDomain = GUICtrlRead($AutoDomain)
if $Apply_AutoUser = "" Then
MsgBox(0+16,"No Username Provided","No username provided. You cannot apply Automatic Logon without username.",3)
Else
RegWrite($Win_Logon,$Win_AutologonActivation,"REG_SZ","1")
RegWrite($Win_Logon,$Win_AutoUser,"REG_SZ",$Apply_AutoUser)
RegWrite($Win_Logon,$Win_AutoPass,"REG_SZ",$Apply_AutoPass)
RegWrite($Win_Logon,$Win_AutoDomain,"REG_SZ",$Apply_AutoDomain)
AutologonStateCheck()
$RebootAsk = MsgBox(4,"Success","Autologon Applied and Activated." & @CRLF & "Start a try ? (Reboot after 5 seconds)")
; ConsoleWrite($RebootAsk)
if $RebootAsk = "6" Then
Run("shutdown -r -t 5")
Exit(0)
EndIf
EndIf
EndSwitch
WEnd
Func AutologonStateCheck()
$ALState = RegRead($Win_Logon,$Win_AutologonActivation)
if $ALState = "1" Then
GUICtrlSetData($AutologonState,"STATE : ON")
GUICtrlSetBkColor($AutologonState,0x09A600)
Else
GUICtrlSetData($AutologonState,"STATE : OFF")
GUICtrlSetBkColor($AutologonState,0xD50000)
EndIf
Sleep(40)
Return True
EndFunc

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
#include-once
#cs ----------------------------------------------------------------------------
Author: BB_19
Material Themes for MetroGUI UDF
If you want to create your own themes, check out flatcolors.net, you can find there many random material/flat colors :)
#ce ----------------------------------------------------------------------------
;#Set Default Theme
Global $GUIThemeColor = "0x13161C" ; GUI Background Color
Global $FontThemeColor = "0xFFFFFF" ; Font Color
Global $GUIBorderColor = "0x2D2D2D" ; GUI Border Color
Global $ButtonBKColor = "0x00796b" ; Metro Button BacKground Color
Global $ButtonTextColor = "0xFFFFFF" ; Metro Button Text Color
Global $CB_Radio_Color = "0xFFFFFF" ;Checkbox and Radio Color (Box/Circle)
Global $GUI_Theme_Name = "DarkTealV2" ;Theme Name (For internal usage)
Global $CB_Radio_Hover_Color = "0xD8D8D8" ; Checkbox and Radio Hover Color (Box/Circle)
Global $CB_Radio_CheckMark_Color = "0x1a1a1a" ; Checkbox and Radio checkmark color
Func _SetTheme($ThemeSelect = "DarkTeal")
$GUI_Theme_Name = $ThemeSelect
Switch ($ThemeSelect)
Case "LightTeal"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTeal"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTealV2"
$GUIThemeColor = "0x13161C"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x35635B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkRuby"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x712043"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightTeal"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x336058"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightCyan"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x0D5C63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightBlue"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x1A4F70"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnight"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x3C4D66"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlue"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlueV2"
$GUIThemeColor = "0x040D11"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightBlue"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x244E80"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightCyan"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkCyan"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGray"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x3F5863"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGreen"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x2E7D32"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreen"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreenV2"
$GUIThemeColor = "0x061319"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightRed"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xc62828"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGray"
$GUIThemeColor = "0x1B2428"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x4F6772"
$ButtonBKColor = "0x607D8B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkAmber"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xffa000"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightOrange"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xBC5E05"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkOrange"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xC76810"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPurple"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkPurple"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPink"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xE91E63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case Else
ConsoleWrite("Metro-UDF-Error: Theme not found, using default theme." & @CRLF)
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
$GUI_Theme_Name = "DarkTealV2"
EndSwitch
EndFunc ;==>_SetTheme

View file

@ -0,0 +1,495 @@
;======================================
;~ Author : binhnx
;~ Created : 2014/10/20
;======================================
;~ Modified : BB_19
;~ Last modified : 2017/10/07
;======================================
#include-once
#include <WinAPI.au3>
#include <WinAPIShellEx.au3>
Local $_cHvr_aData[0]
Local Const $_cHvr_HDLLCOMCTL32 = _WinAPI_LoadLibrary('comctl32.dll')
Assert($_cHvr_HDLLCOMCTL32 <> 0, 'This UDF requires comctl32.dll')
Local Const $_cHvr_PDEFSUBCLASSPROC = _WinAPI_GetProcAddress($_cHvr_HDLLCOMCTL32, 'DefSubclassProc')
Local Const $_cHvr_PINTERNALSUBCLASS_DLL = DllCallbackRegister('_cHvr_iProc', 'NONE', 'HWND;UINT;WPARAM;LPARAM;DWORD')
Local Const $_cHvr_PINTERNALSUBCLASS = DllCallbackGetPtr($_cHvr_PINTERNALSUBCLASS_DLL)
OnAutoItExitRegister("_cHvr_Finalize")
Local Const $_cHvr_TSUBCLASSEXE = Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86')
Local Const $_cHvr_HEXECUTABLEHEAP = DllCall('kernel32.dll', 'HANDLE', 'HeapCreate', 'DWORD', 0x00040000, 'ULONG_PTR', 0, 'ULONG_PTR', 0)[0]
Assert($_cHvr_HEXECUTABLEHEAP <> 0, 'Failed to create executable heap object')
Local Const $_cHvr_PSUBCLASSEXE = _cHvr_ExecutableFromStruct(Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86'))
Func _cHvr_Register($idCtrl, $fnHovOff = '', $fnHoverOn = '', $fnClick = '', $fnDblClk = '', $HoverData = 0,$ClickData = 0,$fnRightClick = '')
Local $hWnd = GUICtrlGetHandle($idCtrl)
If (Not (IsHWnd($hWnd))) Then Return SetError(1, 0, -1)
Local $nIndex = _cHvr_GetNewIndex($hWnd)
Local $aData[13]
$aData[0] = $hWnd;Control Hwnd
$aData[1] = $idCtrl; Control handle
$aData[3] = $fnHovOff;Hover Off func
$aData[4] = $HoverData;Hover Off Data
$aData[5] = $fnHoverOn;Hover ON func
$aData[6] = $HoverData;Hover ON Data
$aData[7] = $fnRightClick;RClick func
$aData[8] = $ClickData; click data
$aData[9] = $fnClick;Click func
$aData[10] = $ClickData; click data
$aData[11] = $fnDblClk;DB click func
$aData[12] = $ClickData;DB click data
$_cHvr_aData[$nIndex] = $aData
_WinAPI_SetWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd, $nIndex)
Return $nIndex
EndFunc ;==>_cHvr_Register
Func _cHvr_iProc($hWnd, $uMsg, $wParam, $lParam, $cIndex)
Switch $uMsg
Case 0x0200;Hover
GUISetCursor(2, 1)
_cHvr_cMove($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0201;Leftclick
_cHvr_cDown($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0202
_cHvr_cUp($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Return False
Case 0x0203;Doubleclick
_cHvr_cDblClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0204;Rightclick
_cHvr_cRightClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x02A3;Hover leave
_cHvr_cLeave($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0082;Deleted
_cHvr_UnRegisterInternal($cIndex, $hWnd)
EndSwitch
Return True
EndFunc ;==>_cHvr_iProc
Func _cHvr_cDown(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_WinAPI_SetCapture($hWnd)
_cHvr_CallFunc($aCtrlData, 9)
EndFunc ;==>_cHvr_cDown
Func _cHvr_cMove(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
Local $bIn = _cHvr_IsInClient($hWnd, $lParam)
If Not $aCtrlData[2] Then
If $bIn Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 9)
EndIf
Else
If Not $bIn Then
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndIf
EndIf
ElseIf Not $aCtrlData[2] Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 5)
Local $tTME = DllStructCreate('DWORD;DWORD;HWND;DWORD')
DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, 2) ;$TME_LEAVE
DllStructSetData($tTME, 3, $hWnd)
DllCall('user32.dll', 'BOOL', 'TrackMouseEvent', 'STRUCT*', $tTME)
EndIf
EndFunc ;==>_cHvr_cMove
Func _cHvr_cUp(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
Local $lRet = _WinAPI_DefSubclassProc($hWnd, $uMsg, $wParam, $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
_WinAPI_ReleaseCapture()
If _cHvr_IsInClient($hWnd, $lParam) Then
_cHvr_CallFunc($aCtrlData, 9)
EndIf
EndIf
Return $lRet
EndFunc ;==>_cHvr_cUp
Func _cHvr_cDblClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 11)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cRightClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 7)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cLeave(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndFunc ;==>_cHvr_cLeave
Func _cHvr_CallFunc(ByRef $aCtrlData, $iCallType)
Call($aCtrlData[$iCallType], $aCtrlData[1], $aCtrlData[$iCallType + 1])
EndFunc ;==>_cHvr_CallFunc
Func _cHvr_ArrayPush(ByRef $aStackArr, Const $vSrc1 = Default, Const $vSrc2 = Default, Const $vSrc3 = Default, Const $vSrc4 = Default, Const $vSrc5 = Default)
While (UBound($aStackArr) < ($aStackArr[0] + @NumParams))
ReDim $aStackArr[UBound($aStackArr) * 2]
WEnd
If Not ($vSrc1 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc1
EndIf
If Not ($vSrc2 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc2
EndIf
If Not ($vSrc3 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc3
EndIf
If Not ($vSrc4 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc4
EndIf
If Not ($vSrc5 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc5
EndIf
EndFunc ;==>_cHvr_ArrayPush
Func _cHvr_IsInClient($hWnd, $lParam)
Local $iX = BitShift(BitShift($lParam, -16), 16)
Local $iY = BitShift($lParam, 16)
Local $aSize = WinGetClientSize($hWnd)
Return Not ($iX < 0 Or $iY < 0 Or $iX > $aSize[0] Or $iY > $aSize[1])
EndFunc ;==>_cHvr_IsInClient
Func _cHvr_CSCP_X86() ;Create Subclass Process x86
; $hWnd HWND size: 4 ESP+4 EBP+8
; $uMsg UINT size: 4 ESP+8 EBP+12
; $wParam WPARAM size: 4 ESP+12 EBP+16
; $lParam LPARAM size: 4 ESP+16 EBP+20
; $uIdSubclass UINT_PTR size: 4 ESP+20 EBP+24
; $dwRefData DWORD_PTR size: 4 ESP+24 EBP+28 Total: 24
; NERVER FORGET ADDING align 1 OR YOU WILL SPEND HOURS TO FIND WHAT CAUSE 0xC0000005 Access Violation
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; Func ; __stdcall
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x55) ;push ebp
_cHvr_ArrayPush($aOpCode, 0x8B, 0xEC) ;mov ebp, esp
; Save un-modified params to nv register
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+16]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x5D, 16) ;8b 5d 10
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;BYTE;BYTE;' ;mov esi, DWORD PTR [ebp+12]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x75, 12) ;8b 75 0c
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+20]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x7D, 20) ;8b 7d 14
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x82) ;81 fe 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x2A3) ;81 fe a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;BYTE;' ;lea eax, DWORD PTR [esi-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x86, -0x200) ;8d 86 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
; :WndProcInternal (HWND, UINT, WPARAM, LPARAM, DWORD)
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ecx, DWORD PTR [ebp+28]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x4D, 28) ;8b 4d 1c
$sExe &= 'BYTE;BYTE;BYTE;' ;mov edx, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x55, 8) ;8b 55 08
$sExe &= 'BYTE;' ;push ecx
_cHvr_ArrayPush($aOpCode, 0x51) ;51
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push edx
_cHvr_ArrayPush($aOpCode, 0x52) ;52
; Call
$sExe &= 'BYTE;PTR;' ;mov eax, _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PINTERNALSUBCLASS)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;' ;test eax, eax
_cHvr_ArrayPush($aOpCode, 0x85, 0xC0) ;85 c0
$sExe &= 'BYTE;BYTE;' ;jz short Return
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$aOpCode[$nElemOffset[2]] = $nAddrOffset[3] - $nAddrOffset[2]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov eax, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x45, 8)
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push eax
_cHvr_ArrayPush($aOpCode, 0x50) ;50
;Call
$sExe &= 'BYTE;PTR;' ;mov eax,COMCTL32.DefSubclassProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
; :Return
$aOpCode[$nElemOffset[3]] = $nAddrOffset[4] - $nAddrOffset[3]
; Restore nv-register
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x5F) ;pop edi
_cHvr_ArrayPush($aOpCode, 0x5E) ;pop esi
_cHvr_ArrayPush($aOpCode, 0x5B) ;pop ebx
; EndFunc
$sExe &= 'BYTE;BYTE;BYTE;WORD'
_cHvr_ArrayPush($aOpCode, 0x5D) ;pop ebp
_cHvr_ArrayPush($aOpCode, 0xC2, 24) ;ret 24
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X86
Func _cHvr_CSCP_X64() ;Create Subclass Process x64
; First four INT and UINT has size = 8 instead of 4 because they are stored in RCX, RDX, R8, R9
; $hWnd HWND size: 8 RCX RSP+8
; $uMsg UINT size: 8 EDX RSP+16
; $wParam WPARAM size: 8 R8 RSP+24
; $lParam LPARAM size: 8 R9 RSP+32
; $uIdSubclass UINT_PTR size: 8 RSP+40
; $dwRefData DWORD_PTR size: 8 RSP+48 Total: 48
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x82) ;81 fa 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x2A3) ;81 fa a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;DWORD;' ;lea eax, DWORD PTR [rdx-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x82, -0x200) ;8d 82 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; :WndProcInternal (HWND rsp+8, UINT +16, WPARAM +24, LPARAM +32, DWORD +40)
; $dwRefData = [ESP+48+48(sub rsp, 48)+8(push rdi)] = [ESP+104]
; Save base registers:
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+8], rbx
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x5C, 0x24, 8) ;48 89 5c 24 08
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+16], rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x6C, 0x24, 16) ;48 89 6c 24 10
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+24], rsi
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x74, 0x24, 24) ;48 89 74 24 18
$sExe &= 'BYTE;' ;push rdi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
; Max sub-routine params = 5 (size = 5*8 = 40), + 8 bytes for return value = 48.
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;sub rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xEC, 48) ;48 83 ec 30
; rbx, rbp, rsi now at [ESP+8+56], [ESP+16+56], [ESP+24+56]
; Save the parameters:
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rdi, r9
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF9) ;49 8b f9
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rsi, r8
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF0) ;49 8b f0
$sExe &= 'BYTE;BYTE;' ;mov ebx, edx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xDA) ;8b da
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rbp, rcx
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xE9) ;48 8b e9
; Prepare additional parameter for internal WndProc
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rax, QWORD PTR [rsp+104]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x44, 0x24, 104) ;48 8b 44 24 68
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+32], Rax]
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x44, 0x24, 32) ;48 89 44 24 20
; Call internal WndProc
$sExe &= 'BYTE;BYTE;PTR;' ;mov rax, QWORD PTR _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PINTERNALSUBCLASS)
;movabs rax, _cHvr_iProc ;48 b8 QWORD_PTR
$sExe &= 'BYTE;BYTE;' ;call rax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff d0
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; Restore parameters for DefSubclassProc call
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r9, rdi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xCF) ;4c 8b cf
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r8, rsi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xC6) ;4c 8b c6
$sExe &= 'BYTE;BYTE;' ;mov edx, ebx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xD3) ;8b d3
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rcx, rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xCD) ;48 8b cd
; Restore registers value
$aOpCode[$nElemOffset[3]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[3]
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbx, QWORD PTR [rsp+64]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x5C, 0x24, 64) ;48 8b 5c 24 40
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbp, QWORD PTR [rsp+72]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x6C, 0x24, 72) ;48 8b 6c 24 48
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rsi, QWORD PTR [rsp+80]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x74, 0x24, 80) ;48 8b 74 24 50
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;add rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xc4, 48) ;48 83 c4 30
$sExe &= 'BYTE;' ;pop rdi
_cHvr_ArrayPush($aOpCode, 0x5F) ;5f
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[4] = $aOpCode[0]
$aOpCode[$nElemOffset[2]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[2]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$sExe &= 'BYTE;BYTE;PTR;'
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0xFF, 0xE0)
; :Return
$aOpCode[$nElemOffset[4]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[4]
$sExe &= 'BYTE;' ;ret 0
_cHvr_ArrayPush($aOpCode, 0xC3)
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X64
Func _cHvr_PopulateOpcode(ByRef $sExe, ByRef $aOpCode)
Local $tExe = DllStructCreate($sExe)
Assert(@error = 0, 'DllStrucCreate Failed With Error = ' & @error)
For $i = 1 To $aOpCode[0]
DllStructSetData($tExe, $i, $aOpCode[$i])
Next
Return $tExe
EndFunc ;==>_cHvr_PopulateOpcode
Func _cHvr_ExecutableFromStruct($tExe)
Local $pExe = DllCall('kernel32.dll', 'PTR', 'HeapAlloc', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 8, 'ULONG_PTR', DllStructGetSize($tExe))[0]
Assert($pExe <> 0, 'Allocate memory failed')
DllCall("kernel32.dll", "none", "RtlMoveMemory", "PTR", $pExe, "PTR", DllStructGetPtr($tExe), "ULONG_PTR", DllStructGetSize($tExe))
Assert(@error = 0, 'Failed to copy memory')
Return $pExe
EndFunc ;==>_cHvr_ExecutableFromStruct
Func _cHvr_UnRegisterInternal($cIndex, $hWnd)
_WinAPI_RemoveWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd)
Local $aData=$_cHvr_aData[$cIndex]
$_cHvr_aData[$cIndex] = 0
Call( "_iControlDelete",$aData[1])
EndFunc ;==>_cHvr_UnRegisterInternal
Func _cHvr_Finalize()
DllCallbackFree($_cHvr_PINTERNALSUBCLASS_DLL)
_WinAPI_FreeLibrary($_cHvr_HDLLCOMCTL32)
If ($_cHvr_HEXECUTABLEHEAP <> 0) Then
If ($_cHvr_PSUBCLASSEXE <> 0) Then
DllCall('kernel32.dll', 'BOOL', 'HeapFree', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 0, 'PTR', $_cHvr_PSUBCLASSEXE)
EndIf
DllCall('kernel32.dll', 'BOOL', 'HeapDestroy', 'HANDLE', $_cHvr_HEXECUTABLEHEAP)
EndIf
EndFunc ;==>_cHvr_Finalize
Func Assert($bExpression, $sMsg = '', $sScript = @ScriptName, $sScriptPath = @ScriptFullPath, $iLine = @ScriptLineNumber, $iError = @error, $iExtend = @extended)
If (Not ($bExpression)) Then
MsgBox(BitOR(1, 0x10), 'Assertion Error!', _
@CRLF & 'Script' & @TAB & ': ' & $sScript _
& @CRLF & 'Path' & @TAB & ': ' & $sScriptPath _
& @CRLF & 'Line' & @TAB & ': ' & $iLine _
& @CRLF & 'Error' & @TAB & ': ' & ($iError > 0x7FFF ? Hex($iError) : $iError) _
& ($iExtend <> 0 ? ' (Extended : ' & ($iExtend > 0x7FFF ? Hex($iExtend) : $iExtend) & ')' : '') _
& @CRLF & 'Message' & @TAB & ': ' & $sMsg _
& @CRLF & @CRLF & 'OK: Exit Script' & @TAB & 'Cancel: Continue')
Exit
EndIf
EndFunc ;==>Assert
Func _cHvr_GetNewIndex($hWnd)
;Try to assign index from previously deleted control
For $i = 0 To UBound($_cHvr_aData) - 1 Step +1
If Not IsArray($_cHvr_aData[$i]) Then
Return $i
EndIf
Next
ReDim $_cHvr_aData[UBound($_cHvr_aData) + 1]
Return UBound($_cHvr_aData) - 1
EndFunc ;==>_cHvr_GetNewIndex
Func _WinAPI_GetCapture()
Return DllCall("user32.dll", "HWND", "GetCapture")[0]
EndFunc ;==>_WinAPI_GetCapture

View file

@ -0,0 +1,279 @@
#include-once
; #INDEX# ============================================================================================================
; Title .........: _StringSize
; AutoIt Version : v3.2.12.1 or higher
; Language ......: English
; Description ...: Returns size of rectangle required to display string - maximum width can be chosen
; Remarks .......:
; Note ..........:
; Author(s) .....: Melba23 - thanks to trancexx for the default DC code
; ====================================================================================================================
;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
; #CURRENT# ==========================================================================================================
; _StringSize: Returns size of rectangle required to display string - maximum width can be chosen
; ====================================================================================================================
; #INTERNAL_USE_ONLY#=================================================================================================
; _StringSize_Error_Close: Releases DC and deletes font object after error
; _StringSize_DefaultFontName: Determines Windows default font
; ====================================================================================================================
; #FUNCTION# =========================================================================================================
; Name...........: _StringSize
; Description ...: Returns size of rectangle required to display string - maximum permitted width can be chosen
; Syntax ........: _StringSize($sText[, $iSize[, $iWeight[, $iAttrib[, $sName[, $iWidth[, $hWnd]]]]]])
; Parameters ....: $sText - String to display
; $iSize - [optional] Font size in points - (default = 8.5)
; $iWeight - [optional] Font weight - (default = 400 = normal)
; $iAttrib - [optional] Font attribute (0-Normal (default), 2-Italic, 4-Underline, 8 Strike)
; + 1 if tabs are to be expanded before sizing
; $sName - [optional] Font name - (default = Tahoma)
; $iWidth - [optional] Max width for rectangle - (default = 0 => width of original string)
; $hWnd - [optional] GUI in which string will be displayed - (default 0 => normally not required)
; Requirement(s) : v3.2.12.1 or higher
; Return values .: Success - Returns 4-element array: ($iWidth set // $iWidth not set)
; |$array[0] = String reformatted with additonal @CRLF // Original string
; |$array[1] = Height of single line in selected font // idem
; |$array[2] = Width of rectangle required for reformatted // original string
; |$array[3] = Height of rectangle required for reformatted // original string
; Failure - Returns 0 and sets @error:
; |1 - Incorrect parameter type (@extended = parameter index)
; |2 - DLL call error - extended set as follows:
; |1 - GetDC failure
; |2 - SendMessage failure
; |3 - GetDeviceCaps failure
; |4 - CreateFont failure
; |5 - SelectObject failure
; |6 - GetTextExtentPoint32 failure
; |3 - Font too large for chosen max width - a word will not fit
; Author ........: Melba23 - thanks to trancexx for the default DC code
; Modified ......:
; Remarks .......: The use of the $hWnd parameter is not normally necessary - it is only required if the UDF does not
; return correct dimensions without it.
; Related .......:
; Link ..........:
; Example .......: Yes
;=====================================================================================================================
Func _StringSize($sText, $iSize = 8.5, $iWeight = 400, $iAttrib = 0, $sName = "", $iMaxWidth = 0, $hWnd = 0)
; Set parameters passed as Default
If $iSize = Default Then $iSize = 8.5
If $iWeight = Default Then $iWeight = 400
If $iAttrib = Default Then $iAttrib = 0
If $sName = "" Or $sName = Default Then $sName = _StringSize_DefaultFontName()
; Check parameters are correct type
If Not IsString($sText) Then Return SetError(1, 1, 0)
If Not IsNumber($iSize) Then Return SetError(1, 2, 0)
If Not IsInt($iWeight) Then Return SetError(1, 3, 0)
If Not IsInt($iAttrib) Then Return SetError(1, 4, 0)
If Not IsString($sName) Then Return SetError(1, 5, 0)
If Not IsNumber($iMaxWidth) Then Return SetError(1, 6, 0)
If Not IsHwnd($hWnd) And $hWnd <> 0 Then Return SetError(1, 7, 0)
Local $aRet, $hDC, $hFont, $hLabel = 0, $hLabel_Handle
; Check for tab expansion flag
Local $iExpTab = BitAnd($iAttrib, 1)
; Remove possible tab expansion flag from font attribute value
$iAttrib = BitAnd($iAttrib, BitNot(1))
; If GUI handle was passed
If IsHWnd($hWnd) Then
; Create label outside GUI borders
$hLabel = GUICtrlCreateLabel("", -10, -10, 10, 10)
$hLabel_Handle = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
; Create DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hLabel_Handle)
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, 1, 0)
EndIf
$hDC = $aRet[0]
$aRet = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hLabel_Handle, "int", 0x0031, "wparam", 0, "lparam", 0) ; $WM_GetFont
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, _StringSize_Error_Close(2, $hDC), 0)
EndIf
$hFont = $aRet[0]
Else
; Get default DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
If @error Or $aRet[0] = 0 Then Return SetError(2, 1, 0)
$hDC = $aRet[0]
; Create required font
$aRet = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", 90) ; $LOGPIXELSY
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(3, $hDC), 0)
Local $iInfo = $aRet[0]
$aRet = DllCall("gdi32.dll", "handle", "CreateFontW", "int", -$iInfo * $iSize / 72, "int", 0, "int", 0, "int", 0, _
"int", $iWeight, "dword", BitAND($iAttrib, 2), "dword", BitAND($iAttrib, 4), "dword", BitAND($iAttrib, 8), "dword", 0, "dword", 0, _
"dword", 0, "dword", 5, "dword", 0, "wstr", $sName)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(4, $hDC), 0)
$hFont = $aRet[0]
EndIf
; Select font and store previous font
$aRet = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hFont)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(5, $hDC, $hFont, $hLabel), 0)
Local $hPrevFont = $aRet[0]
; Declare variables
Local $avSize_Info[4], $iLine_Length, $iLine_Height = 0, $iLine_Count = 0, $iLine_Width = 0, $iWrap_Count, $iLast_Word, $sTest_Line
; Declare and fill Size structure
Local $tSize = DllStructCreate("int X;int Y")
DllStructSetData($tSize, "X", 0)
DllStructSetData($tSize, "Y", 0)
; Ensure EoL is @CRLF and break text into lines
$sText = StringRegExpReplace($sText, "((?<!\x0d)\x0a|\x0d(?!\x0a))", @CRLF)
Local $asLines = StringSplit($sText, @CRLF, 1)
; For each line
For $i = 1 To $asLines[0]
; Expand tabs if required
If $iExpTab Then
$asLines[$i] = StringReplace($asLines[$i], @TAB, " XXXXXXXX")
EndIf
; Size line
$iLine_Length = StringLen($asLines[$i])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$i], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
If DllStructGetData($tSize, "X") > $iLine_Width Then $iLine_Width = DllStructGetData($tSize, "X")
If DllStructGetData($tSize, "Y") > $iLine_Height Then $iLine_Height = DllStructGetData($tSize, "Y")
Next
; Check if $iMaxWidth has been both set and exceeded
If $iMaxWidth <> 0 And $iLine_Width > $iMaxWidth Then ; Wrapping required
; For each Line
For $j = 1 To $asLines[0]
; Size line unwrapped
$iLine_Length = StringLen($asLines[$j])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$j], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
; Check wrap status
If DllStructGetData($tSize, "X") < $iMaxWidth - 4 Then
; No wrap needed so count line and store
$iLine_Count += 1
$avSize_Info[0] &= $asLines[$j] & @CRLF
Else
; Wrap needed so zero counter for wrapped lines
$iWrap_Count = 0
; Build line to max width
While 1
; Zero line width
$iLine_Width = 0
; Initialise pointer for end of word
$iLast_Word = 0
; Add characters until EOL or maximum width reached
For $i = 1 To StringLen($asLines[$j])
; Is this just past a word ending?
If StringMid($asLines[$j], $i, 1) = " " Then $iLast_Word = $i - 1
; Increase line by one character
$sTest_Line = StringMid($asLines[$j], 1, $i)
; Get line length
$iLine_Length = StringLen($sTest_Line)
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sTest_Line, "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
$iLine_Width = DllStructGetData($tSize, "X")
; If too long exit the loop
If $iLine_Width >= $iMaxWidth - 4 Then ExitLoop
Next
; End of the line of text?
If $i > StringLen($asLines[$j]) Then
; Yes, so add final line to count
$iWrap_Count += 1
; Store line
$avSize_Info[0] &= $sTest_Line & @CRLF
ExitLoop
Else
; No, but add line just completed to count
$iWrap_Count += 1
; Check at least 1 word completed or return error
If $iLast_Word = 0 Then Return SetError(3, _StringSize_Error_Close(0, $hDC, $hFont, $hLabel), 0)
; Store line up to end of last word
$avSize_Info[0] &= StringLeft($sTest_Line, $iLast_Word) & @CRLF
; Strip string to point reached
$asLines[$j] = StringTrimLeft($asLines[$j], $iLast_Word)
; Trim leading whitespace
$asLines[$j] = StringStripWS($asLines[$j], 1)
; Repeat with remaining characters in line
EndIf
WEnd
; Add the number of wrapped lines to the count
$iLine_Count += $iWrap_Count
EndIf
Next
; Reset any tab expansions
If $iExpTab Then
$avSize_Info[0] = StringRegExpReplace($avSize_Info[0], "\x20?XXXXXXXX", @TAB)
EndIf
; Complete return array
$avSize_Info[1] = $iLine_Height
$avSize_Info[2] = $iMaxWidth
; Convert lines to pixels and add drop margin
$avSize_Info[3] = ($iLine_Count * $iLine_Height) + 4
Else ; No wrapping required
; Create return array (add drop margin to height)
Local $avSize_Info[4] = [$sText, $iLine_Height, $iLine_Width, ($asLines[0] * $iLine_Height) + 4]
EndIf
; Clear up
DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hPrevFont)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $avSize_Info
EndFunc ;==>_StringSize
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_Error_Close
; Description ...: Releases DC and deleted font object if required after error
; Syntax ........: _StringSize_Error_Close ($iExtCode, $hDC, $hGUI)
; Parameters ....: $iExtCode - code to return
; $hDC, $hGUI - handles as set in _StringSize function
; Return value ..: $iExtCode as passed
; Author ........: Melba23
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_Error_Close($iExtCode, $hDC = 0, $hFont = 0, $hLabel = 0)
If $hFont <> 0 Then DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
If $hDC <> 0 Then DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $iExtCode
EndFunc ;=>_StringSize_Error_Close
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_DefaultFontName
; Description ...: Determines Windows default font
; Syntax ........: _StringSize_DefaultFontName()
; Parameters ....: None
; Return values .: Success - Returns name of system default font
; Failure - Returns "Tahoma"
; Author ........: Melba23, based on some original code by Larrydalooza
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_DefaultFontName()
; Get default system font data
Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]")
DLLStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS))
DLLCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0)
Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DLLStructGetPtr($tNONCLIENTMETRICS, 13))
If IsString(DllStructGetData($tLOGFONT, 14)) Then
Return DllStructGetData($tLOGFONT, 14)
Else
Return "Tahoma"
EndIf
EndFunc ;=>_StringSize_DefaultFontName

View file

@ -0,0 +1,80 @@
#include-once
; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
; #INDEX# =======================================================================================================================
; Title .........: _GUIDisable
; AutoIt Version : v3.2.2.0 or higher
; Language ......: English
; Description ...: Creates a dimming effect on the current/selected GUI.
; Note ..........:
; Author(s) .....: guinness
; Remarks .......: Thanks to supersonic for the idea of adjusting the UDF when using Classic themes in Windows Vista+.
; ===============================================================================================================================
; #INCLUDES# ====================================================================================================================
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
; #GLOBAL VARIABLES# ============================================================================================================
Global Enum $__hGUIDisableHWnd, $__hGUIDisableHWndPrevious, $__iGUIDisableMax
Global $__aGUIDisable[$__iGUIDisableMax]
Func _GUIDisable($hWnd, $iAnimate = Default, $iBrightness = Default, $bColor = 0x000000)
Local Const $AW_SLIDE_IN_TOP = 0x00040004, $AW_SLIDE_OUT_TOP = 0x00050008
If $iAnimate = Default Then
$iAnimate = 1
EndIf
If $iBrightness = Default Then
$iBrightness = 5
EndIf
If $hWnd = -1 And $__aGUIDisable[$__hGUIDisableHWnd] = 0 Then
Local $iLabel = GUICtrlCreateLabel('', -99, -99, 1, 1)
$hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iLabel))
If @error Then
Return SetError(1, 0 * GUICtrlDelete($iLabel), 0)
EndIf
GUICtrlDelete($iLabel)
EndIf
If IsHWnd($__aGUIDisable[$__hGUIDisableHWnd]) Then
GUIDelete($__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = 0
$__aGUIDisable[$__hGUIDisableHWndPrevious] = 0
Else
$__aGUIDisable[$__hGUIDisableHWndPrevious] = $hWnd
Local $iLeft = 0, $iTop = 0
Local $iStyle = GUIGetStyle($__aGUIDisable[$__hGUIDisableHWndPrevious])
Local $sCurrentTheme = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes', 'CurrentTheme')
Local $iIsClassicTheme = Number(StringInStr($sCurrentTheme, 'Basic.theme', 2) = 0 And StringInStr($sCurrentTheme, 'Ease of Access Themes', 2) > 0)
Local $aWinGetPos = WinGetClientSize($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = GUICreate('', $aWinGetPos[0], $aWinGetPos[1], $iLeft + 3, $iTop + 3, $WS_POPUP, $WS_EX_MDICHILD, $__aGUIDisable[$__hGUIDisableHWndPrevious])
GUISetBkColor($bColor, $__aGUIDisable[$__hGUIDisableHWnd])
WinSetTrans($__aGUIDisable[$__hGUIDisableHWnd], '', Round($iBrightness * (255 / 100)))
If not $iAnimate Then
GUISetState(@SW_SHOW, $__aGUIDisable[$__hGUIDisableHWnd])
EndIf
GUISetState(@SW_DISABLE, $__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
EndIf
Return $__aGUIDisable[$__hGUIDisableHWnd]
EndFunc ;==>_GUIDisable
; #INTERNAL_USE_ONLY#============================================================================================================
Func __GUIDisable_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $iHeight = _WinAPI_HiWord($ilParam)
Local $iWidth = _WinAPI_LoWord($ilParam)
If $hWnd = $__aGUIDisable[$__hGUIDisableHWndPrevious] Then
Local $iWinGetPos = WinGetPos($__aGUIDisable[$__hGUIDisableHWnd])
If @error = 0 Then
WinMove($__aGUIDisable[$__hGUIDisableHWnd], '', $iWinGetPos[0], $iWinGetPos[1], $iWidth, $iHeight)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>__GUIDisable_WM_SIZE

View file

@ -0,0 +1,13 @@
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: Tyleo
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)

Binary file not shown.

View file

@ -0,0 +1,10 @@
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include <WindowsConstants.au3>
Func TyleoAbout($SoftName)
_Metro_MsgBox(8,"About / A propos",$SoftName & @CRLF & "Tyleo Softwares @ 2021" & @CRLF & " " & @CRLF & "BUILDING TOMORROW" & @CRLF & " " & @CRLF & "This Software is free and Open Source." & @CRLF & "tyleo.dev@outlook.com",400,15)
Return True
EndFunc

View file

@ -0,0 +1,43 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Sans titre (1).ico
#AutoIt3Wrapper_Outfile=..\..\Logiciels\AutomatedClockSync_NW_32-LE.exe
#AutoIt3Wrapper_Outfile_x64=..\..\Logiciels\AutomatedClockSync_NW_64.exe
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_Res_Comment=ACS - Automated Clock Syncer NoWait
#AutoIt3Wrapper_Res_Description=ACS - Automated Clock Syncer NoWait
#AutoIt3Wrapper_Res_Fileversion=1.0.0.3
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductName=ACS
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#NoTrayIcon
#RequireAdmin
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "Extensions.au3"
GetSoftDetails(@AutoItExe,"DEV")
; Integrated : NTP_GetTime()
; Integrated : System_SetTime()
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce
ResyncTime()
Func ResyncTime()
RunWait("net start w32time", "", @SW_HIDE)
RunWait("w32tm /resync", "", @SW_HIDE)
EndFunc

View file

@ -0,0 +1,57 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Sans titre (1).ico
#AutoIt3Wrapper_Outfile=..\..\Logiciels\AutomatedClockSync_32-LE.exe
#AutoIt3Wrapper_Outfile_x64=..\..\Logiciels\AutomatedClockSync_64.exe
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_Res_Comment=ACS - Automated Clock Syncer
#AutoIt3Wrapper_Res_Description=ACS - Automated Clock Syncer
#AutoIt3Wrapper_Res_Fileversion=1.0.0.5
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductName=ACS
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#RequireAdmin
Opt("TrayMenuMode", 3)
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "Extensions.au3"
GetSoftDetails(@AutoItExe,"DEV")
; Integrated : NTP_GetTime()
; Integrated : System_SetTime()
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce
ResyncTime()
Global $TrayMenu_Resync = TrayCreateItem("Resync Now")
Global $TrayMenu_Exit = TrayCreateItem("Exit")
While 1
$nMSG =GUIGetMsg()
Switch $nMSG
Case $TrayMenu_Resync
ResyncTime()
Case $TrayMenu_Exit
Exit(0)
EndSwitch
WEnd
Func ResyncTime()
RunWait("net start w32time", "", @SW_HIDE)
RunWait("w32tm /resync", "", @SW_HIDE)
EndFunc

View file

@ -0,0 +1,34 @@
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include <WindowsConstants.au3>
; Color Accent
$theMWTitleBarColor = Hex(RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM", "AccentColor"))
$theMWTitleBarColor = StringRight($theMWTitleBarColor, 6)
$theMWTitleBarColor = "0x" & StringRight($theMWTitleBarColor, 2) & StringMid($theMWTitleBarColor, 3, 2) & StringLeft($theMWTitleBarColor, 2)
$CurrentAccent = $theMWTitleBarColor
; Software Base Details
Func GetSoftDetails($Exe,$Stage)
Global $CurrentVersion,$CurrentName,$CurrentBaseVersion
$CurrentVersion = FileGetVersion($Exe,$FV_FILEVERSION)
$CurrentBaseVersion = FileGetVersion($Exe,$FV_PRODUCTVERSION)
$CurrentName = FileGetVersion($Exe,$FV_PRODUCTNAME)
if $Stage = "BETA" Then
$CurrentVersion = $CurrentVersion & "-beta"
Elseif $Stage = "RELEASE" or $Stage = "STABLE" Then
$CurrentVersion = $CurrentVersion & "-rel"
Else
$CurrentVersion = $CurrentVersion & "-dev"
EndIf
Return True
EndFunc
; About Us
Func TyleoAbout($SoftName)
_Metro_MsgBox(8,"About / A propos",$SoftName & @CRLF & "Tyleo Softwares @ 2021" & @CRLF & " " & @CRLF & "BUILDING TOMORROW" & @CRLF & " " & @CRLF & "This Software is free and Open Source." & @CRLF & "tyleo.dev@outlook.com",400,15)
Return True
EndFunc

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
#include-once
#cs ----------------------------------------------------------------------------
Author: BB_19
Material Themes for MetroGUI UDF
If you want to create your own themes, check out flatcolors.net, you can find there many random material/flat colors :)
#ce ----------------------------------------------------------------------------
;#Set Default Theme
Global $GUIThemeColor = "0x13161C" ; GUI Background Color
Global $FontThemeColor = "0xFFFFFF" ; Font Color
Global $GUIBorderColor = "0x2D2D2D" ; GUI Border Color
Global $ButtonBKColor = "0x00796b" ; Metro Button BacKground Color
Global $ButtonTextColor = "0xFFFFFF" ; Metro Button Text Color
Global $CB_Radio_Color = "0xFFFFFF" ;Checkbox and Radio Color (Box/Circle)
Global $GUI_Theme_Name = "DarkTealV2" ;Theme Name (For internal usage)
Global $CB_Radio_Hover_Color = "0xD8D8D8" ; Checkbox and Radio Hover Color (Box/Circle)
Global $CB_Radio_CheckMark_Color = "0x1a1a1a" ; Checkbox and Radio checkmark color
Func _SetTheme($ThemeSelect = "DarkTeal")
$GUI_Theme_Name = $ThemeSelect
Switch ($ThemeSelect)
Case "LightTeal"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTeal"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTealV2"
$GUIThemeColor = "0x13161C"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x35635B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkRuby"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x712043"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightTeal"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x336058"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightCyan"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x0D5C63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightBlue"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x1A4F70"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnight"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x3C4D66"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlue"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlueV2"
$GUIThemeColor = "0x040D11"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightBlue"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x244E80"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightCyan"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkCyan"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGray"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x3F5863"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGreen"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x2E7D32"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreen"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreenV2"
$GUIThemeColor = "0x061319"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightRed"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xc62828"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGray"
$GUIThemeColor = "0x1B2428"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x4F6772"
$ButtonBKColor = "0x607D8B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkAmber"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xffa000"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightOrange"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xBC5E05"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkOrange"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xC76810"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPurple"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkPurple"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPink"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xE91E63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case Else
ConsoleWrite("Metro-UDF-Error: Theme not found, using default theme." & @CRLF)
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
$GUI_Theme_Name = "DarkTealV2"
EndSwitch
EndFunc ;==>_SetTheme

View file

@ -0,0 +1,495 @@
;======================================
;~ Author : binhnx
;~ Created : 2014/10/20
;======================================
;~ Modified : BB_19
;~ Last modified : 2017/10/07
;======================================
#include-once
#include <WinAPI.au3>
#include <WinAPIShellEx.au3>
Local $_cHvr_aData[0]
Local Const $_cHvr_HDLLCOMCTL32 = _WinAPI_LoadLibrary('comctl32.dll')
Assert($_cHvr_HDLLCOMCTL32 <> 0, 'This UDF requires comctl32.dll')
Local Const $_cHvr_PDEFSUBCLASSPROC = _WinAPI_GetProcAddress($_cHvr_HDLLCOMCTL32, 'DefSubclassProc')
Local Const $_cHvr_PINTERNALSUBCLASS_DLL = DllCallbackRegister('_cHvr_iProc', 'NONE', 'HWND;UINT;WPARAM;LPARAM;DWORD')
Local Const $_cHvr_PINTERNALSUBCLASS = DllCallbackGetPtr($_cHvr_PINTERNALSUBCLASS_DLL)
OnAutoItExitRegister("_cHvr_Finalize")
Local Const $_cHvr_TSUBCLASSEXE = Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86')
Local Const $_cHvr_HEXECUTABLEHEAP = DllCall('kernel32.dll', 'HANDLE', 'HeapCreate', 'DWORD', 0x00040000, 'ULONG_PTR', 0, 'ULONG_PTR', 0)[0]
Assert($_cHvr_HEXECUTABLEHEAP <> 0, 'Failed to create executable heap object')
Local Const $_cHvr_PSUBCLASSEXE = _cHvr_ExecutableFromStruct(Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86'))
Func _cHvr_Register($idCtrl, $fnHovOff = '', $fnHoverOn = '', $fnClick = '', $fnDblClk = '', $HoverData = 0,$ClickData = 0,$fnRightClick = '')
Local $hWnd = GUICtrlGetHandle($idCtrl)
If (Not (IsHWnd($hWnd))) Then Return SetError(1, 0, -1)
Local $nIndex = _cHvr_GetNewIndex($hWnd)
Local $aData[13]
$aData[0] = $hWnd;Control Hwnd
$aData[1] = $idCtrl; Control handle
$aData[3] = $fnHovOff;Hover Off func
$aData[4] = $HoverData;Hover Off Data
$aData[5] = $fnHoverOn;Hover ON func
$aData[6] = $HoverData;Hover ON Data
$aData[7] = $fnRightClick;RClick func
$aData[8] = $ClickData; click data
$aData[9] = $fnClick;Click func
$aData[10] = $ClickData; click data
$aData[11] = $fnDblClk;DB click func
$aData[12] = $ClickData;DB click data
$_cHvr_aData[$nIndex] = $aData
_WinAPI_SetWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd, $nIndex)
Return $nIndex
EndFunc ;==>_cHvr_Register
Func _cHvr_iProc($hWnd, $uMsg, $wParam, $lParam, $cIndex)
Switch $uMsg
Case 0x0200;Hover
GUISetCursor(2, 1)
_cHvr_cMove($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0201;Leftclick
_cHvr_cDown($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0202
_cHvr_cUp($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Return False
Case 0x0203;Doubleclick
_cHvr_cDblClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0204;Rightclick
_cHvr_cRightClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x02A3;Hover leave
_cHvr_cLeave($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0082;Deleted
_cHvr_UnRegisterInternal($cIndex, $hWnd)
EndSwitch
Return True
EndFunc ;==>_cHvr_iProc
Func _cHvr_cDown(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_WinAPI_SetCapture($hWnd)
_cHvr_CallFunc($aCtrlData, 9)
EndFunc ;==>_cHvr_cDown
Func _cHvr_cMove(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
Local $bIn = _cHvr_IsInClient($hWnd, $lParam)
If Not $aCtrlData[2] Then
If $bIn Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 9)
EndIf
Else
If Not $bIn Then
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndIf
EndIf
ElseIf Not $aCtrlData[2] Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 5)
Local $tTME = DllStructCreate('DWORD;DWORD;HWND;DWORD')
DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, 2) ;$TME_LEAVE
DllStructSetData($tTME, 3, $hWnd)
DllCall('user32.dll', 'BOOL', 'TrackMouseEvent', 'STRUCT*', $tTME)
EndIf
EndFunc ;==>_cHvr_cMove
Func _cHvr_cUp(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
Local $lRet = _WinAPI_DefSubclassProc($hWnd, $uMsg, $wParam, $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
_WinAPI_ReleaseCapture()
If _cHvr_IsInClient($hWnd, $lParam) Then
_cHvr_CallFunc($aCtrlData, 9)
EndIf
EndIf
Return $lRet
EndFunc ;==>_cHvr_cUp
Func _cHvr_cDblClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 11)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cRightClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 7)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cLeave(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndFunc ;==>_cHvr_cLeave
Func _cHvr_CallFunc(ByRef $aCtrlData, $iCallType)
Call($aCtrlData[$iCallType], $aCtrlData[1], $aCtrlData[$iCallType + 1])
EndFunc ;==>_cHvr_CallFunc
Func _cHvr_ArrayPush(ByRef $aStackArr, Const $vSrc1 = Default, Const $vSrc2 = Default, Const $vSrc3 = Default, Const $vSrc4 = Default, Const $vSrc5 = Default)
While (UBound($aStackArr) < ($aStackArr[0] + @NumParams))
ReDim $aStackArr[UBound($aStackArr) * 2]
WEnd
If Not ($vSrc1 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc1
EndIf
If Not ($vSrc2 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc2
EndIf
If Not ($vSrc3 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc3
EndIf
If Not ($vSrc4 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc4
EndIf
If Not ($vSrc5 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc5
EndIf
EndFunc ;==>_cHvr_ArrayPush
Func _cHvr_IsInClient($hWnd, $lParam)
Local $iX = BitShift(BitShift($lParam, -16), 16)
Local $iY = BitShift($lParam, 16)
Local $aSize = WinGetClientSize($hWnd)
Return Not ($iX < 0 Or $iY < 0 Or $iX > $aSize[0] Or $iY > $aSize[1])
EndFunc ;==>_cHvr_IsInClient
Func _cHvr_CSCP_X86() ;Create Subclass Process x86
; $hWnd HWND size: 4 ESP+4 EBP+8
; $uMsg UINT size: 4 ESP+8 EBP+12
; $wParam WPARAM size: 4 ESP+12 EBP+16
; $lParam LPARAM size: 4 ESP+16 EBP+20
; $uIdSubclass UINT_PTR size: 4 ESP+20 EBP+24
; $dwRefData DWORD_PTR size: 4 ESP+24 EBP+28 Total: 24
; NERVER FORGET ADDING align 1 OR YOU WILL SPEND HOURS TO FIND WHAT CAUSE 0xC0000005 Access Violation
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; Func ; __stdcall
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x55) ;push ebp
_cHvr_ArrayPush($aOpCode, 0x8B, 0xEC) ;mov ebp, esp
; Save un-modified params to nv register
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+16]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x5D, 16) ;8b 5d 10
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;BYTE;BYTE;' ;mov esi, DWORD PTR [ebp+12]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x75, 12) ;8b 75 0c
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+20]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x7D, 20) ;8b 7d 14
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x82) ;81 fe 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x2A3) ;81 fe a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;BYTE;' ;lea eax, DWORD PTR [esi-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x86, -0x200) ;8d 86 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
; :WndProcInternal (HWND, UINT, WPARAM, LPARAM, DWORD)
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ecx, DWORD PTR [ebp+28]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x4D, 28) ;8b 4d 1c
$sExe &= 'BYTE;BYTE;BYTE;' ;mov edx, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x55, 8) ;8b 55 08
$sExe &= 'BYTE;' ;push ecx
_cHvr_ArrayPush($aOpCode, 0x51) ;51
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push edx
_cHvr_ArrayPush($aOpCode, 0x52) ;52
; Call
$sExe &= 'BYTE;PTR;' ;mov eax, _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PINTERNALSUBCLASS)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;' ;test eax, eax
_cHvr_ArrayPush($aOpCode, 0x85, 0xC0) ;85 c0
$sExe &= 'BYTE;BYTE;' ;jz short Return
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$aOpCode[$nElemOffset[2]] = $nAddrOffset[3] - $nAddrOffset[2]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov eax, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x45, 8)
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push eax
_cHvr_ArrayPush($aOpCode, 0x50) ;50
;Call
$sExe &= 'BYTE;PTR;' ;mov eax,COMCTL32.DefSubclassProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
; :Return
$aOpCode[$nElemOffset[3]] = $nAddrOffset[4] - $nAddrOffset[3]
; Restore nv-register
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x5F) ;pop edi
_cHvr_ArrayPush($aOpCode, 0x5E) ;pop esi
_cHvr_ArrayPush($aOpCode, 0x5B) ;pop ebx
; EndFunc
$sExe &= 'BYTE;BYTE;BYTE;WORD'
_cHvr_ArrayPush($aOpCode, 0x5D) ;pop ebp
_cHvr_ArrayPush($aOpCode, 0xC2, 24) ;ret 24
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X86
Func _cHvr_CSCP_X64() ;Create Subclass Process x64
; First four INT and UINT has size = 8 instead of 4 because they are stored in RCX, RDX, R8, R9
; $hWnd HWND size: 8 RCX RSP+8
; $uMsg UINT size: 8 EDX RSP+16
; $wParam WPARAM size: 8 R8 RSP+24
; $lParam LPARAM size: 8 R9 RSP+32
; $uIdSubclass UINT_PTR size: 8 RSP+40
; $dwRefData DWORD_PTR size: 8 RSP+48 Total: 48
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x82) ;81 fa 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x2A3) ;81 fa a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;DWORD;' ;lea eax, DWORD PTR [rdx-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x82, -0x200) ;8d 82 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; :WndProcInternal (HWND rsp+8, UINT +16, WPARAM +24, LPARAM +32, DWORD +40)
; $dwRefData = [ESP+48+48(sub rsp, 48)+8(push rdi)] = [ESP+104]
; Save base registers:
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+8], rbx
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x5C, 0x24, 8) ;48 89 5c 24 08
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+16], rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x6C, 0x24, 16) ;48 89 6c 24 10
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+24], rsi
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x74, 0x24, 24) ;48 89 74 24 18
$sExe &= 'BYTE;' ;push rdi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
; Max sub-routine params = 5 (size = 5*8 = 40), + 8 bytes for return value = 48.
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;sub rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xEC, 48) ;48 83 ec 30
; rbx, rbp, rsi now at [ESP+8+56], [ESP+16+56], [ESP+24+56]
; Save the parameters:
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rdi, r9
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF9) ;49 8b f9
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rsi, r8
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF0) ;49 8b f0
$sExe &= 'BYTE;BYTE;' ;mov ebx, edx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xDA) ;8b da
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rbp, rcx
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xE9) ;48 8b e9
; Prepare additional parameter for internal WndProc
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rax, QWORD PTR [rsp+104]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x44, 0x24, 104) ;48 8b 44 24 68
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+32], Rax]
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x44, 0x24, 32) ;48 89 44 24 20
; Call internal WndProc
$sExe &= 'BYTE;BYTE;PTR;' ;mov rax, QWORD PTR _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PINTERNALSUBCLASS)
;movabs rax, _cHvr_iProc ;48 b8 QWORD_PTR
$sExe &= 'BYTE;BYTE;' ;call rax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff d0
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; Restore parameters for DefSubclassProc call
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r9, rdi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xCF) ;4c 8b cf
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r8, rsi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xC6) ;4c 8b c6
$sExe &= 'BYTE;BYTE;' ;mov edx, ebx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xD3) ;8b d3
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rcx, rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xCD) ;48 8b cd
; Restore registers value
$aOpCode[$nElemOffset[3]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[3]
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbx, QWORD PTR [rsp+64]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x5C, 0x24, 64) ;48 8b 5c 24 40
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbp, QWORD PTR [rsp+72]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x6C, 0x24, 72) ;48 8b 6c 24 48
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rsi, QWORD PTR [rsp+80]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x74, 0x24, 80) ;48 8b 74 24 50
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;add rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xc4, 48) ;48 83 c4 30
$sExe &= 'BYTE;' ;pop rdi
_cHvr_ArrayPush($aOpCode, 0x5F) ;5f
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[4] = $aOpCode[0]
$aOpCode[$nElemOffset[2]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[2]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$sExe &= 'BYTE;BYTE;PTR;'
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0xFF, 0xE0)
; :Return
$aOpCode[$nElemOffset[4]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[4]
$sExe &= 'BYTE;' ;ret 0
_cHvr_ArrayPush($aOpCode, 0xC3)
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X64
Func _cHvr_PopulateOpcode(ByRef $sExe, ByRef $aOpCode)
Local $tExe = DllStructCreate($sExe)
Assert(@error = 0, 'DllStrucCreate Failed With Error = ' & @error)
For $i = 1 To $aOpCode[0]
DllStructSetData($tExe, $i, $aOpCode[$i])
Next
Return $tExe
EndFunc ;==>_cHvr_PopulateOpcode
Func _cHvr_ExecutableFromStruct($tExe)
Local $pExe = DllCall('kernel32.dll', 'PTR', 'HeapAlloc', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 8, 'ULONG_PTR', DllStructGetSize($tExe))[0]
Assert($pExe <> 0, 'Allocate memory failed')
DllCall("kernel32.dll", "none", "RtlMoveMemory", "PTR", $pExe, "PTR", DllStructGetPtr($tExe), "ULONG_PTR", DllStructGetSize($tExe))
Assert(@error = 0, 'Failed to copy memory')
Return $pExe
EndFunc ;==>_cHvr_ExecutableFromStruct
Func _cHvr_UnRegisterInternal($cIndex, $hWnd)
_WinAPI_RemoveWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd)
Local $aData=$_cHvr_aData[$cIndex]
$_cHvr_aData[$cIndex] = 0
Call( "_iControlDelete",$aData[1])
EndFunc ;==>_cHvr_UnRegisterInternal
Func _cHvr_Finalize()
DllCallbackFree($_cHvr_PINTERNALSUBCLASS_DLL)
_WinAPI_FreeLibrary($_cHvr_HDLLCOMCTL32)
If ($_cHvr_HEXECUTABLEHEAP <> 0) Then
If ($_cHvr_PSUBCLASSEXE <> 0) Then
DllCall('kernel32.dll', 'BOOL', 'HeapFree', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 0, 'PTR', $_cHvr_PSUBCLASSEXE)
EndIf
DllCall('kernel32.dll', 'BOOL', 'HeapDestroy', 'HANDLE', $_cHvr_HEXECUTABLEHEAP)
EndIf
EndFunc ;==>_cHvr_Finalize
Func Assert($bExpression, $sMsg = '', $sScript = @ScriptName, $sScriptPath = @ScriptFullPath, $iLine = @ScriptLineNumber, $iError = @error, $iExtend = @extended)
If (Not ($bExpression)) Then
MsgBox(BitOR(1, 0x10), 'Assertion Error!', _
@CRLF & 'Script' & @TAB & ': ' & $sScript _
& @CRLF & 'Path' & @TAB & ': ' & $sScriptPath _
& @CRLF & 'Line' & @TAB & ': ' & $iLine _
& @CRLF & 'Error' & @TAB & ': ' & ($iError > 0x7FFF ? Hex($iError) : $iError) _
& ($iExtend <> 0 ? ' (Extended : ' & ($iExtend > 0x7FFF ? Hex($iExtend) : $iExtend) & ')' : '') _
& @CRLF & 'Message' & @TAB & ': ' & $sMsg _
& @CRLF & @CRLF & 'OK: Exit Script' & @TAB & 'Cancel: Continue')
Exit
EndIf
EndFunc ;==>Assert
Func _cHvr_GetNewIndex($hWnd)
;Try to assign index from previously deleted control
For $i = 0 To UBound($_cHvr_aData) - 1 Step +1
If Not IsArray($_cHvr_aData[$i]) Then
Return $i
EndIf
Next
ReDim $_cHvr_aData[UBound($_cHvr_aData) + 1]
Return UBound($_cHvr_aData) - 1
EndFunc ;==>_cHvr_GetNewIndex
Func _WinAPI_GetCapture()
Return DllCall("user32.dll", "HWND", "GetCapture")[0]
EndFunc ;==>_WinAPI_GetCapture

View file

@ -0,0 +1,279 @@
#include-once
; #INDEX# ============================================================================================================
; Title .........: _StringSize
; AutoIt Version : v3.2.12.1 or higher
; Language ......: English
; Description ...: Returns size of rectangle required to display string - maximum width can be chosen
; Remarks .......:
; Note ..........:
; Author(s) .....: Melba23 - thanks to trancexx for the default DC code
; ====================================================================================================================
;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
; #CURRENT# ==========================================================================================================
; _StringSize: Returns size of rectangle required to display string - maximum width can be chosen
; ====================================================================================================================
; #INTERNAL_USE_ONLY#=================================================================================================
; _StringSize_Error_Close: Releases DC and deletes font object after error
; _StringSize_DefaultFontName: Determines Windows default font
; ====================================================================================================================
; #FUNCTION# =========================================================================================================
; Name...........: _StringSize
; Description ...: Returns size of rectangle required to display string - maximum permitted width can be chosen
; Syntax ........: _StringSize($sText[, $iSize[, $iWeight[, $iAttrib[, $sName[, $iWidth[, $hWnd]]]]]])
; Parameters ....: $sText - String to display
; $iSize - [optional] Font size in points - (default = 8.5)
; $iWeight - [optional] Font weight - (default = 400 = normal)
; $iAttrib - [optional] Font attribute (0-Normal (default), 2-Italic, 4-Underline, 8 Strike)
; + 1 if tabs are to be expanded before sizing
; $sName - [optional] Font name - (default = Tahoma)
; $iWidth - [optional] Max width for rectangle - (default = 0 => width of original string)
; $hWnd - [optional] GUI in which string will be displayed - (default 0 => normally not required)
; Requirement(s) : v3.2.12.1 or higher
; Return values .: Success - Returns 4-element array: ($iWidth set // $iWidth not set)
; |$array[0] = String reformatted with additonal @CRLF // Original string
; |$array[1] = Height of single line in selected font // idem
; |$array[2] = Width of rectangle required for reformatted // original string
; |$array[3] = Height of rectangle required for reformatted // original string
; Failure - Returns 0 and sets @error:
; |1 - Incorrect parameter type (@extended = parameter index)
; |2 - DLL call error - extended set as follows:
; |1 - GetDC failure
; |2 - SendMessage failure
; |3 - GetDeviceCaps failure
; |4 - CreateFont failure
; |5 - SelectObject failure
; |6 - GetTextExtentPoint32 failure
; |3 - Font too large for chosen max width - a word will not fit
; Author ........: Melba23 - thanks to trancexx for the default DC code
; Modified ......:
; Remarks .......: The use of the $hWnd parameter is not normally necessary - it is only required if the UDF does not
; return correct dimensions without it.
; Related .......:
; Link ..........:
; Example .......: Yes
;=====================================================================================================================
Func _StringSize($sText, $iSize = 8.5, $iWeight = 400, $iAttrib = 0, $sName = "", $iMaxWidth = 0, $hWnd = 0)
; Set parameters passed as Default
If $iSize = Default Then $iSize = 8.5
If $iWeight = Default Then $iWeight = 400
If $iAttrib = Default Then $iAttrib = 0
If $sName = "" Or $sName = Default Then $sName = _StringSize_DefaultFontName()
; Check parameters are correct type
If Not IsString($sText) Then Return SetError(1, 1, 0)
If Not IsNumber($iSize) Then Return SetError(1, 2, 0)
If Not IsInt($iWeight) Then Return SetError(1, 3, 0)
If Not IsInt($iAttrib) Then Return SetError(1, 4, 0)
If Not IsString($sName) Then Return SetError(1, 5, 0)
If Not IsNumber($iMaxWidth) Then Return SetError(1, 6, 0)
If Not IsHwnd($hWnd) And $hWnd <> 0 Then Return SetError(1, 7, 0)
Local $aRet, $hDC, $hFont, $hLabel = 0, $hLabel_Handle
; Check for tab expansion flag
Local $iExpTab = BitAnd($iAttrib, 1)
; Remove possible tab expansion flag from font attribute value
$iAttrib = BitAnd($iAttrib, BitNot(1))
; If GUI handle was passed
If IsHWnd($hWnd) Then
; Create label outside GUI borders
$hLabel = GUICtrlCreateLabel("", -10, -10, 10, 10)
$hLabel_Handle = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
; Create DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hLabel_Handle)
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, 1, 0)
EndIf
$hDC = $aRet[0]
$aRet = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hLabel_Handle, "int", 0x0031, "wparam", 0, "lparam", 0) ; $WM_GetFont
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, _StringSize_Error_Close(2, $hDC), 0)
EndIf
$hFont = $aRet[0]
Else
; Get default DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
If @error Or $aRet[0] = 0 Then Return SetError(2, 1, 0)
$hDC = $aRet[0]
; Create required font
$aRet = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", 90) ; $LOGPIXELSY
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(3, $hDC), 0)
Local $iInfo = $aRet[0]
$aRet = DllCall("gdi32.dll", "handle", "CreateFontW", "int", -$iInfo * $iSize / 72, "int", 0, "int", 0, "int", 0, _
"int", $iWeight, "dword", BitAND($iAttrib, 2), "dword", BitAND($iAttrib, 4), "dword", BitAND($iAttrib, 8), "dword", 0, "dword", 0, _
"dword", 0, "dword", 5, "dword", 0, "wstr", $sName)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(4, $hDC), 0)
$hFont = $aRet[0]
EndIf
; Select font and store previous font
$aRet = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hFont)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(5, $hDC, $hFont, $hLabel), 0)
Local $hPrevFont = $aRet[0]
; Declare variables
Local $avSize_Info[4], $iLine_Length, $iLine_Height = 0, $iLine_Count = 0, $iLine_Width = 0, $iWrap_Count, $iLast_Word, $sTest_Line
; Declare and fill Size structure
Local $tSize = DllStructCreate("int X;int Y")
DllStructSetData($tSize, "X", 0)
DllStructSetData($tSize, "Y", 0)
; Ensure EoL is @CRLF and break text into lines
$sText = StringRegExpReplace($sText, "((?<!\x0d)\x0a|\x0d(?!\x0a))", @CRLF)
Local $asLines = StringSplit($sText, @CRLF, 1)
; For each line
For $i = 1 To $asLines[0]
; Expand tabs if required
If $iExpTab Then
$asLines[$i] = StringReplace($asLines[$i], @TAB, " XXXXXXXX")
EndIf
; Size line
$iLine_Length = StringLen($asLines[$i])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$i], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
If DllStructGetData($tSize, "X") > $iLine_Width Then $iLine_Width = DllStructGetData($tSize, "X")
If DllStructGetData($tSize, "Y") > $iLine_Height Then $iLine_Height = DllStructGetData($tSize, "Y")
Next
; Check if $iMaxWidth has been both set and exceeded
If $iMaxWidth <> 0 And $iLine_Width > $iMaxWidth Then ; Wrapping required
; For each Line
For $j = 1 To $asLines[0]
; Size line unwrapped
$iLine_Length = StringLen($asLines[$j])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$j], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
; Check wrap status
If DllStructGetData($tSize, "X") < $iMaxWidth - 4 Then
; No wrap needed so count line and store
$iLine_Count += 1
$avSize_Info[0] &= $asLines[$j] & @CRLF
Else
; Wrap needed so zero counter for wrapped lines
$iWrap_Count = 0
; Build line to max width
While 1
; Zero line width
$iLine_Width = 0
; Initialise pointer for end of word
$iLast_Word = 0
; Add characters until EOL or maximum width reached
For $i = 1 To StringLen($asLines[$j])
; Is this just past a word ending?
If StringMid($asLines[$j], $i, 1) = " " Then $iLast_Word = $i - 1
; Increase line by one character
$sTest_Line = StringMid($asLines[$j], 1, $i)
; Get line length
$iLine_Length = StringLen($sTest_Line)
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sTest_Line, "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
$iLine_Width = DllStructGetData($tSize, "X")
; If too long exit the loop
If $iLine_Width >= $iMaxWidth - 4 Then ExitLoop
Next
; End of the line of text?
If $i > StringLen($asLines[$j]) Then
; Yes, so add final line to count
$iWrap_Count += 1
; Store line
$avSize_Info[0] &= $sTest_Line & @CRLF
ExitLoop
Else
; No, but add line just completed to count
$iWrap_Count += 1
; Check at least 1 word completed or return error
If $iLast_Word = 0 Then Return SetError(3, _StringSize_Error_Close(0, $hDC, $hFont, $hLabel), 0)
; Store line up to end of last word
$avSize_Info[0] &= StringLeft($sTest_Line, $iLast_Word) & @CRLF
; Strip string to point reached
$asLines[$j] = StringTrimLeft($asLines[$j], $iLast_Word)
; Trim leading whitespace
$asLines[$j] = StringStripWS($asLines[$j], 1)
; Repeat with remaining characters in line
EndIf
WEnd
; Add the number of wrapped lines to the count
$iLine_Count += $iWrap_Count
EndIf
Next
; Reset any tab expansions
If $iExpTab Then
$avSize_Info[0] = StringRegExpReplace($avSize_Info[0], "\x20?XXXXXXXX", @TAB)
EndIf
; Complete return array
$avSize_Info[1] = $iLine_Height
$avSize_Info[2] = $iMaxWidth
; Convert lines to pixels and add drop margin
$avSize_Info[3] = ($iLine_Count * $iLine_Height) + 4
Else ; No wrapping required
; Create return array (add drop margin to height)
Local $avSize_Info[4] = [$sText, $iLine_Height, $iLine_Width, ($asLines[0] * $iLine_Height) + 4]
EndIf
; Clear up
DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hPrevFont)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $avSize_Info
EndFunc ;==>_StringSize
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_Error_Close
; Description ...: Releases DC and deleted font object if required after error
; Syntax ........: _StringSize_Error_Close ($iExtCode, $hDC, $hGUI)
; Parameters ....: $iExtCode - code to return
; $hDC, $hGUI - handles as set in _StringSize function
; Return value ..: $iExtCode as passed
; Author ........: Melba23
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_Error_Close($iExtCode, $hDC = 0, $hFont = 0, $hLabel = 0)
If $hFont <> 0 Then DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
If $hDC <> 0 Then DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $iExtCode
EndFunc ;=>_StringSize_Error_Close
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_DefaultFontName
; Description ...: Determines Windows default font
; Syntax ........: _StringSize_DefaultFontName()
; Parameters ....: None
; Return values .: Success - Returns name of system default font
; Failure - Returns "Tahoma"
; Author ........: Melba23, based on some original code by Larrydalooza
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_DefaultFontName()
; Get default system font data
Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]")
DLLStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS))
DLLCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0)
Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DLLStructGetPtr($tNONCLIENTMETRICS, 13))
If IsString(DllStructGetData($tLOGFONT, 14)) Then
Return DllStructGetData($tLOGFONT, 14)
Else
Return "Tahoma"
EndIf
EndFunc ;=>_StringSize_DefaultFontName

View file

@ -0,0 +1,80 @@
#include-once
; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
; #INDEX# =======================================================================================================================
; Title .........: _GUIDisable
; AutoIt Version : v3.2.2.0 or higher
; Language ......: English
; Description ...: Creates a dimming effect on the current/selected GUI.
; Note ..........:
; Author(s) .....: guinness
; Remarks .......: Thanks to supersonic for the idea of adjusting the UDF when using Classic themes in Windows Vista+.
; ===============================================================================================================================
; #INCLUDES# ====================================================================================================================
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
; #GLOBAL VARIABLES# ============================================================================================================
Global Enum $__hGUIDisableHWnd, $__hGUIDisableHWndPrevious, $__iGUIDisableMax
Global $__aGUIDisable[$__iGUIDisableMax]
Func _GUIDisable($hWnd, $iAnimate = Default, $iBrightness = Default, $bColor = 0x000000)
Local Const $AW_SLIDE_IN_TOP = 0x00040004, $AW_SLIDE_OUT_TOP = 0x00050008
If $iAnimate = Default Then
$iAnimate = 1
EndIf
If $iBrightness = Default Then
$iBrightness = 5
EndIf
If $hWnd = -1 And $__aGUIDisable[$__hGUIDisableHWnd] = 0 Then
Local $iLabel = GUICtrlCreateLabel('', -99, -99, 1, 1)
$hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iLabel))
If @error Then
Return SetError(1, 0 * GUICtrlDelete($iLabel), 0)
EndIf
GUICtrlDelete($iLabel)
EndIf
If IsHWnd($__aGUIDisable[$__hGUIDisableHWnd]) Then
GUIDelete($__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = 0
$__aGUIDisable[$__hGUIDisableHWndPrevious] = 0
Else
$__aGUIDisable[$__hGUIDisableHWndPrevious] = $hWnd
Local $iLeft = 0, $iTop = 0
Local $iStyle = GUIGetStyle($__aGUIDisable[$__hGUIDisableHWndPrevious])
Local $sCurrentTheme = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes', 'CurrentTheme')
Local $iIsClassicTheme = Number(StringInStr($sCurrentTheme, 'Basic.theme', 2) = 0 And StringInStr($sCurrentTheme, 'Ease of Access Themes', 2) > 0)
Local $aWinGetPos = WinGetClientSize($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = GUICreate('', $aWinGetPos[0], $aWinGetPos[1], $iLeft + 3, $iTop + 3, $WS_POPUP, $WS_EX_MDICHILD, $__aGUIDisable[$__hGUIDisableHWndPrevious])
GUISetBkColor($bColor, $__aGUIDisable[$__hGUIDisableHWnd])
WinSetTrans($__aGUIDisable[$__hGUIDisableHWnd], '', Round($iBrightness * (255 / 100)))
If not $iAnimate Then
GUISetState(@SW_SHOW, $__aGUIDisable[$__hGUIDisableHWnd])
EndIf
GUISetState(@SW_DISABLE, $__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
EndIf
Return $__aGUIDisable[$__hGUIDisableHWnd]
EndFunc ;==>_GUIDisable
; #INTERNAL_USE_ONLY#============================================================================================================
Func __GUIDisable_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $iHeight = _WinAPI_HiWord($ilParam)
Local $iWidth = _WinAPI_LoWord($ilParam)
If $hWnd = $__aGUIDisable[$__hGUIDisableHWndPrevious] Then
Local $iWinGetPos = WinGetPos($__aGUIDisable[$__hGUIDisableHWnd])
If @error = 0 Then
WinMove($__aGUIDisable[$__hGUIDisableHWnd], '', $iWinGetPos[0], $iWinGetPos[1], $iWidth, $iHeight)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>__GUIDisable_WM_SIZE

229
AutomatedClockSync/Projet.kxf Executable file
View file

@ -0,0 +1,229 @@
<?xml version="1.0" encoding="windows-1251"?>
<object type="TAForm" name="Form1">
<properties>
<property name="Left" vt="Int16">192</property>
<property name="Top" vt="Int16">154</property>
<property name="Width" vt="Int16">633</property>
<property name="Height" vt="Int16">292</property>
<property name="Caption" vt="String">Form1</property>
<property name="Color" vt="Ident">clBtnFace</property>
<property name="Font.Charset" vt="Ident">DEFAULT_CHARSET</property>
<property name="Font.Color" vt="Ident">clWindowText</property>
<property name="Font.Height" vt="Int8">-13</property>
<property name="Font.Name" vt="String">Segoe UI</property>
<property name="Font.Style" vt="Set"/>
<property name="Menu" vt="Ident">Menu1</property>
<property name="OldCreateOrder" vt="False">False</property>
<property name="Visible" vt="True">True</property>
<property name="Style" vt="Int32">-1798701056</property>
<property name="ExStyle" vt="Int16">256</property>
<property name="Version" vt="String">1.04</property>
<property name="FormOptOnEvent" vt="False">False</property>
<property name="FormOptExpVars" vt="False">False</property>
<property name="FormOptPopulate" vt="False">False</property>
<property name="FormOptVarsForSet" vt="False">False</property>
<property name="FormOptIndentChar" vt="Int8">-1</property>
<property name="FormOptIndentCount" vt="Int8">1</property>
<property name="FormOptIndentInit" vt="Int8">0</property>
<property name="FormOptVarScope" vt="Int8">1</property>
<property name="Resizing" vt="Set"/>
<property name="PixelsPerInch" vt="Int8">96</property>
<property name="TextHeight" vt="Int8">15</property>
</properties>
<components>
<object type="TAMenu" name="Menu1">
<properties>
<property name="Left" vt="Int16">586</property>
<property name="Top" vt="Int8">56</property>
<property name="Width" vt="Int8">28</property>
<property name="Height" vt="Int8">28</property>
<property name="Associate" vt="Ident">Owner</property>
<property name="WrappedName" vt="String">MainMenu1</property>
</properties>
<components/>
</object>
<object type="TALabel" name="Label2">
<properties>
<property name="Left" vt="Int8">5</property>
<property name="Top" vt="Int8">9</property>
<property name="Width" vt="Int8">70</property>
<property name="Height" vt="Int8">23</property>
<property name="Caption" vt="String">Utilisateur</property>
<property name="Font.Charset" vt="Ident">DEFAULT_CHARSET</property>
<property name="Font.Color" vt="Ident">clWindowText</property>
<property name="Font.Height" vt="Int8">-16</property>
<property name="Font.Name" vt="String">Segoe UI</property>
<property name="Font.Style" vt="Set"/>
<property name="ParentFont" vt="False">False</property>
<property name="TabOrder" vt="Int8">0</property>
<property name="HaveVariable" vt="False">False</property>
<property name="CtrlStyle" vt="Int32">1342308608</property>
<property name="CtrlExStyle" vt="Int8">0</property>
<property name="Resizing" vt="Set"/>
</properties>
<components/>
</object>
<object type="TALabel" name="Label3">
<properties>
<property name="Left" vt="Int8">5</property>
<property name="Top" vt="Int8">32</property>
<property name="Width" vt="Int8">41</property>
<property name="Height" vt="Int8">23</property>
<property name="Caption" vt="String">Poste</property>
<property name="Font.Charset" vt="Ident">DEFAULT_CHARSET</property>
<property name="Font.Color" vt="Ident">clWindowText</property>
<property name="Font.Height" vt="Int8">-16</property>
<property name="Font.Name" vt="String">Segoe UI</property>
<property name="Font.Style" vt="Set"/>
<property name="ParentFont" vt="False">False</property>
<property name="TabOrder" vt="Int8">1</property>
<property name="HaveVariable" vt="False">False</property>
<property name="CtrlStyle" vt="Int32">1342308608</property>
<property name="CtrlExStyle" vt="Int8">0</property>
<property name="Resizing" vt="Set"/>
</properties>
<components/>
</object>
<object type="TALabel" name="Label4">
<properties>
<property name="Left" vt="Int16">258</property>
<property name="Top" vt="Int8">66</property>
<property name="Width" vt="Int8">100</property>
<property name="Height" vt="Int8">19</property>
<property name="Caption" vt="String">Descriptif Rapide</property>
<property name="TabOrder" vt="Int8">2</property>
<property name="HaveVariable" vt="False">False</property>
<property name="CtrlStyle" vt="Int32">1342308609</property>
<property name="CtrlExStyle" vt="Int8">0</property>
<property name="Resizing" vt="Set"/>
</properties>
<components/>
</object>
<object type="TAInput" name="Input1">
<properties>
<property name="Left" vt="Int8">81</property>
<property name="Top" vt="Int8">7</property>
<property name="Width" vt="Int16">418</property>
<property name="Height" vt="Int8">23</property>
<property name="TabOrder" vt="Int8">3</property>
<property name="Text" vt="String">Input1</property>
<property name="CtrlStyle" vt="Int32">1342374016</property>
<property name="CtrlExStyle" vt="Int16">512</property>
<property name="Resizing" vt="Set">DockHeight</property>
</properties>
<components/>
</object>
<object type="TAInput" name="Input2">
<properties>
<property name="Left" vt="Int16">500</property>
<property name="Top" vt="Int8">7</property>
<property name="Width" vt="Int8">109</property>
<property name="Height" vt="Int8">23</property>
<property name="TabOrder" vt="Int8">4</property>
<property name="Text" vt="String">Input1</property>
<property name="CtrlStyle" vt="Int32">1342374016</property>
<property name="CtrlExStyle" vt="Int16">512</property>
<property name="Resizing" vt="Set">DockHeight</property>
</properties>
<components/>
</object>
<object type="TAInput" name="Input3">
<properties>
<property name="Left" vt="Int8">50</property>
<property name="Top" vt="Int8">32</property>
<property name="Width" vt="Int16">294</property>
<property name="Height" vt="Int8">23</property>
<property name="TabOrder" vt="Int8">5</property>
<property name="Text" vt="String">Input3</property>
<property name="CtrlStyle" vt="Int32">1342374016</property>
<property name="CtrlExStyle" vt="Int16">512</property>
<property name="Resizing" vt="Set">DockHeight</property>
</properties>
<components/>
</object>
<object type="TAEdit" name="Edit1">
<properties>
<property name="Left" vt="Int8">1</property>
<property name="Top" vt="Int8">86</property>
<property name="Width" vt="Int16">615</property>
<property name="Height" vt="Int16">146</property>
<property name="Lines.Strings" vt="List">
<list>
<li vt="String">Edit1</li>
</list>
</property>
<property name="TabOrder" vt="Int8">6</property>
<property name="CtrlStyle" vt="Int32">1345523908</property>
<property name="CtrlExStyle" vt="Int16">512</property>
<property name="Resizing" vt="Set"/>
</properties>
<components/>
</object>
<object type="TAInput" name="Input4">
<properties>
<property name="Left" vt="Int16">372</property>
<property name="Top" vt="Int8">33</property>
<property name="Width" vt="Int16">239</property>
<property name="Height" vt="Int8">23</property>
<property name="TabOrder" vt="Int8">7</property>
<property name="Text" vt="String">Input3</property>
<property name="CtrlStyle" vt="Int32">1342374016</property>
<property name="CtrlExStyle" vt="Int16">512</property>
<property name="Resizing" vt="Set">DockHeight</property>
</properties>
<components/>
</object>
<object type="TALabel" name="Label1">
<properties>
<property name="Left" vt="Int16">346</property>
<property name="Top" vt="Int8">34</property>
<property name="Width" vt="Int8">25</property>
<property name="Height" vt="Int8">23</property>
<property name="Caption" vt="String">Tel.</property>
<property name="Font.Charset" vt="Ident">DEFAULT_CHARSET</property>
<property name="Font.Color" vt="Ident">clWindowText</property>
<property name="Font.Height" vt="Int8">-16</property>
<property name="Font.Name" vt="String">Segoe UI</property>
<property name="Font.Style" vt="Set"/>
<property name="ParentFont" vt="False">False</property>
<property name="TabOrder" vt="Int8">8</property>
<property name="HaveVariable" vt="False">False</property>
<property name="CtrlStyle" vt="Int32">1342308608</property>
<property name="CtrlExStyle" vt="Int8">0</property>
<property name="Resizing" vt="Set"/>
</properties>
<components/>
</object>
<object type="TMainMenu" name="MainMenu1">
<properties/>
<components>
<object type="TAMenuItem" name="MenuItem2">
<properties>
<property name="Caption" vt="String">MenuItem2</property>
</properties>
<components>
<object type="TAMenuItem" name="MenuItem4">
<properties>
<property name="Caption" vt="String">MenuItem4</property>
</properties>
<components/>
</object>
</components>
</object>
<object type="TAMenuItem" name="MenuItem1">
<properties>
<property name="Caption" vt="String">MenuItem1</property>
</properties>
<components>
<object type="TAMenuItem" name="MenuItem3">
<properties>
<property name="Caption" vt="String">MenuItem3</property>
</properties>
<components/>
</object>
</components>
</object>
</components>
</object>
</components>
</object>

1
AutomatedClockSync/README.md Executable file
View file

@ -0,0 +1 @@
Logiciel Tyleo Créé avec CNP

View file

@ -0,0 +1,13 @@
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: Tyleo
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

View file

@ -0,0 +1,2 @@
2021/12/26 09:54:31
UDPRecv failed - @error = -2

View file

@ -0,0 +1,23 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "TyleoAboutMe.au3"
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
#include-once
#cs ----------------------------------------------------------------------------
Author: BB_19
Material Themes for MetroGUI UDF
If you want to create your own themes, check out flatcolors.net, you can find there many random material/flat colors :)
#ce ----------------------------------------------------------------------------
;#Set Default Theme
Global $GUIThemeColor = "0x13161C" ; GUI Background Color
Global $FontThemeColor = "0xFFFFFF" ; Font Color
Global $GUIBorderColor = "0x2D2D2D" ; GUI Border Color
Global $ButtonBKColor = "0x00796b" ; Metro Button BacKground Color
Global $ButtonTextColor = "0xFFFFFF" ; Metro Button Text Color
Global $CB_Radio_Color = "0xFFFFFF" ;Checkbox and Radio Color (Box/Circle)
Global $GUI_Theme_Name = "DarkTealV2" ;Theme Name (For internal usage)
Global $CB_Radio_Hover_Color = "0xD8D8D8" ; Checkbox and Radio Hover Color (Box/Circle)
Global $CB_Radio_CheckMark_Color = "0x1a1a1a" ; Checkbox and Radio checkmark color
Func _SetTheme($ThemeSelect = "DarkTeal")
$GUI_Theme_Name = $ThemeSelect
Switch ($ThemeSelect)
Case "LightTeal"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTeal"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTealV2"
$GUIThemeColor = "0x13161C"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x35635B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkRuby"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x712043"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightTeal"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x336058"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightCyan"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x0D5C63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightBlue"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x1A4F70"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnight"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x3C4D66"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlue"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlueV2"
$GUIThemeColor = "0x040D11"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightBlue"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x244E80"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightCyan"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkCyan"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGray"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x3F5863"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGreen"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x2E7D32"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreen"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreenV2"
$GUIThemeColor = "0x061319"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightRed"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xc62828"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGray"
$GUIThemeColor = "0x1B2428"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x4F6772"
$ButtonBKColor = "0x607D8B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkAmber"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xffa000"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightOrange"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xBC5E05"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkOrange"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xC76810"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPurple"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkPurple"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPink"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xE91E63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case Else
ConsoleWrite("Metro-UDF-Error: Theme not found, using default theme." & @CRLF)
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
$GUI_Theme_Name = "DarkTealV2"
EndSwitch
EndFunc ;==>_SetTheme

View file

@ -0,0 +1,495 @@
;======================================
;~ Author : binhnx
;~ Created : 2014/10/20
;======================================
;~ Modified : BB_19
;~ Last modified : 2017/10/07
;======================================
#include-once
#include <WinAPI.au3>
#include <WinAPIShellEx.au3>
Local $_cHvr_aData[0]
Local Const $_cHvr_HDLLCOMCTL32 = _WinAPI_LoadLibrary('comctl32.dll')
Assert($_cHvr_HDLLCOMCTL32 <> 0, 'This UDF requires comctl32.dll')
Local Const $_cHvr_PDEFSUBCLASSPROC = _WinAPI_GetProcAddress($_cHvr_HDLLCOMCTL32, 'DefSubclassProc')
Local Const $_cHvr_PINTERNALSUBCLASS_DLL = DllCallbackRegister('_cHvr_iProc', 'NONE', 'HWND;UINT;WPARAM;LPARAM;DWORD')
Local Const $_cHvr_PINTERNALSUBCLASS = DllCallbackGetPtr($_cHvr_PINTERNALSUBCLASS_DLL)
OnAutoItExitRegister("_cHvr_Finalize")
Local Const $_cHvr_TSUBCLASSEXE = Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86')
Local Const $_cHvr_HEXECUTABLEHEAP = DllCall('kernel32.dll', 'HANDLE', 'HeapCreate', 'DWORD', 0x00040000, 'ULONG_PTR', 0, 'ULONG_PTR', 0)[0]
Assert($_cHvr_HEXECUTABLEHEAP <> 0, 'Failed to create executable heap object')
Local Const $_cHvr_PSUBCLASSEXE = _cHvr_ExecutableFromStruct(Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86'))
Func _cHvr_Register($idCtrl, $fnHovOff = '', $fnHoverOn = '', $fnClick = '', $fnDblClk = '', $HoverData = 0,$ClickData = 0,$fnRightClick = '')
Local $hWnd = GUICtrlGetHandle($idCtrl)
If (Not (IsHWnd($hWnd))) Then Return SetError(1, 0, -1)
Local $nIndex = _cHvr_GetNewIndex($hWnd)
Local $aData[13]
$aData[0] = $hWnd;Control Hwnd
$aData[1] = $idCtrl; Control handle
$aData[3] = $fnHovOff;Hover Off func
$aData[4] = $HoverData;Hover Off Data
$aData[5] = $fnHoverOn;Hover ON func
$aData[6] = $HoverData;Hover ON Data
$aData[7] = $fnRightClick;RClick func
$aData[8] = $ClickData; click data
$aData[9] = $fnClick;Click func
$aData[10] = $ClickData; click data
$aData[11] = $fnDblClk;DB click func
$aData[12] = $ClickData;DB click data
$_cHvr_aData[$nIndex] = $aData
_WinAPI_SetWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd, $nIndex)
Return $nIndex
EndFunc ;==>_cHvr_Register
Func _cHvr_iProc($hWnd, $uMsg, $wParam, $lParam, $cIndex)
Switch $uMsg
Case 0x0200;Hover
GUISetCursor(2, 1)
_cHvr_cMove($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0201;Leftclick
_cHvr_cDown($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0202
_cHvr_cUp($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Return False
Case 0x0203;Doubleclick
_cHvr_cDblClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0204;Rightclick
_cHvr_cRightClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x02A3;Hover leave
_cHvr_cLeave($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0082;Deleted
_cHvr_UnRegisterInternal($cIndex, $hWnd)
EndSwitch
Return True
EndFunc ;==>_cHvr_iProc
Func _cHvr_cDown(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_WinAPI_SetCapture($hWnd)
_cHvr_CallFunc($aCtrlData, 9)
EndFunc ;==>_cHvr_cDown
Func _cHvr_cMove(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
Local $bIn = _cHvr_IsInClient($hWnd, $lParam)
If Not $aCtrlData[2] Then
If $bIn Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 9)
EndIf
Else
If Not $bIn Then
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndIf
EndIf
ElseIf Not $aCtrlData[2] Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 5)
Local $tTME = DllStructCreate('DWORD;DWORD;HWND;DWORD')
DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, 2) ;$TME_LEAVE
DllStructSetData($tTME, 3, $hWnd)
DllCall('user32.dll', 'BOOL', 'TrackMouseEvent', 'STRUCT*', $tTME)
EndIf
EndFunc ;==>_cHvr_cMove
Func _cHvr_cUp(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
Local $lRet = _WinAPI_DefSubclassProc($hWnd, $uMsg, $wParam, $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
_WinAPI_ReleaseCapture()
If _cHvr_IsInClient($hWnd, $lParam) Then
_cHvr_CallFunc($aCtrlData, 9)
EndIf
EndIf
Return $lRet
EndFunc ;==>_cHvr_cUp
Func _cHvr_cDblClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 11)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cRightClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 7)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cLeave(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndFunc ;==>_cHvr_cLeave
Func _cHvr_CallFunc(ByRef $aCtrlData, $iCallType)
Call($aCtrlData[$iCallType], $aCtrlData[1], $aCtrlData[$iCallType + 1])
EndFunc ;==>_cHvr_CallFunc
Func _cHvr_ArrayPush(ByRef $aStackArr, Const $vSrc1 = Default, Const $vSrc2 = Default, Const $vSrc3 = Default, Const $vSrc4 = Default, Const $vSrc5 = Default)
While (UBound($aStackArr) < ($aStackArr[0] + @NumParams))
ReDim $aStackArr[UBound($aStackArr) * 2]
WEnd
If Not ($vSrc1 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc1
EndIf
If Not ($vSrc2 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc2
EndIf
If Not ($vSrc3 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc3
EndIf
If Not ($vSrc4 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc4
EndIf
If Not ($vSrc5 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc5
EndIf
EndFunc ;==>_cHvr_ArrayPush
Func _cHvr_IsInClient($hWnd, $lParam)
Local $iX = BitShift(BitShift($lParam, -16), 16)
Local $iY = BitShift($lParam, 16)
Local $aSize = WinGetClientSize($hWnd)
Return Not ($iX < 0 Or $iY < 0 Or $iX > $aSize[0] Or $iY > $aSize[1])
EndFunc ;==>_cHvr_IsInClient
Func _cHvr_CSCP_X86() ;Create Subclass Process x86
; $hWnd HWND size: 4 ESP+4 EBP+8
; $uMsg UINT size: 4 ESP+8 EBP+12
; $wParam WPARAM size: 4 ESP+12 EBP+16
; $lParam LPARAM size: 4 ESP+16 EBP+20
; $uIdSubclass UINT_PTR size: 4 ESP+20 EBP+24
; $dwRefData DWORD_PTR size: 4 ESP+24 EBP+28 Total: 24
; NERVER FORGET ADDING align 1 OR YOU WILL SPEND HOURS TO FIND WHAT CAUSE 0xC0000005 Access Violation
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; Func ; __stdcall
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x55) ;push ebp
_cHvr_ArrayPush($aOpCode, 0x8B, 0xEC) ;mov ebp, esp
; Save un-modified params to nv register
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+16]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x5D, 16) ;8b 5d 10
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;BYTE;BYTE;' ;mov esi, DWORD PTR [ebp+12]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x75, 12) ;8b 75 0c
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+20]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x7D, 20) ;8b 7d 14
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x82) ;81 fe 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x2A3) ;81 fe a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;BYTE;' ;lea eax, DWORD PTR [esi-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x86, -0x200) ;8d 86 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
; :WndProcInternal (HWND, UINT, WPARAM, LPARAM, DWORD)
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ecx, DWORD PTR [ebp+28]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x4D, 28) ;8b 4d 1c
$sExe &= 'BYTE;BYTE;BYTE;' ;mov edx, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x55, 8) ;8b 55 08
$sExe &= 'BYTE;' ;push ecx
_cHvr_ArrayPush($aOpCode, 0x51) ;51
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push edx
_cHvr_ArrayPush($aOpCode, 0x52) ;52
; Call
$sExe &= 'BYTE;PTR;' ;mov eax, _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PINTERNALSUBCLASS)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;' ;test eax, eax
_cHvr_ArrayPush($aOpCode, 0x85, 0xC0) ;85 c0
$sExe &= 'BYTE;BYTE;' ;jz short Return
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$aOpCode[$nElemOffset[2]] = $nAddrOffset[3] - $nAddrOffset[2]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov eax, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x45, 8)
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push eax
_cHvr_ArrayPush($aOpCode, 0x50) ;50
;Call
$sExe &= 'BYTE;PTR;' ;mov eax,COMCTL32.DefSubclassProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
; :Return
$aOpCode[$nElemOffset[3]] = $nAddrOffset[4] - $nAddrOffset[3]
; Restore nv-register
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x5F) ;pop edi
_cHvr_ArrayPush($aOpCode, 0x5E) ;pop esi
_cHvr_ArrayPush($aOpCode, 0x5B) ;pop ebx
; EndFunc
$sExe &= 'BYTE;BYTE;BYTE;WORD'
_cHvr_ArrayPush($aOpCode, 0x5D) ;pop ebp
_cHvr_ArrayPush($aOpCode, 0xC2, 24) ;ret 24
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X86
Func _cHvr_CSCP_X64() ;Create Subclass Process x64
; First four INT and UINT has size = 8 instead of 4 because they are stored in RCX, RDX, R8, R9
; $hWnd HWND size: 8 RCX RSP+8
; $uMsg UINT size: 8 EDX RSP+16
; $wParam WPARAM size: 8 R8 RSP+24
; $lParam LPARAM size: 8 R9 RSP+32
; $uIdSubclass UINT_PTR size: 8 RSP+40
; $dwRefData DWORD_PTR size: 8 RSP+48 Total: 48
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x82) ;81 fa 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x2A3) ;81 fa a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;DWORD;' ;lea eax, DWORD PTR [rdx-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x82, -0x200) ;8d 82 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; :WndProcInternal (HWND rsp+8, UINT +16, WPARAM +24, LPARAM +32, DWORD +40)
; $dwRefData = [ESP+48+48(sub rsp, 48)+8(push rdi)] = [ESP+104]
; Save base registers:
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+8], rbx
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x5C, 0x24, 8) ;48 89 5c 24 08
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+16], rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x6C, 0x24, 16) ;48 89 6c 24 10
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+24], rsi
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x74, 0x24, 24) ;48 89 74 24 18
$sExe &= 'BYTE;' ;push rdi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
; Max sub-routine params = 5 (size = 5*8 = 40), + 8 bytes for return value = 48.
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;sub rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xEC, 48) ;48 83 ec 30
; rbx, rbp, rsi now at [ESP+8+56], [ESP+16+56], [ESP+24+56]
; Save the parameters:
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rdi, r9
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF9) ;49 8b f9
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rsi, r8
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF0) ;49 8b f0
$sExe &= 'BYTE;BYTE;' ;mov ebx, edx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xDA) ;8b da
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rbp, rcx
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xE9) ;48 8b e9
; Prepare additional parameter for internal WndProc
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rax, QWORD PTR [rsp+104]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x44, 0x24, 104) ;48 8b 44 24 68
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+32], Rax]
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x44, 0x24, 32) ;48 89 44 24 20
; Call internal WndProc
$sExe &= 'BYTE;BYTE;PTR;' ;mov rax, QWORD PTR _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PINTERNALSUBCLASS)
;movabs rax, _cHvr_iProc ;48 b8 QWORD_PTR
$sExe &= 'BYTE;BYTE;' ;call rax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff d0
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; Restore parameters for DefSubclassProc call
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r9, rdi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xCF) ;4c 8b cf
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r8, rsi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xC6) ;4c 8b c6
$sExe &= 'BYTE;BYTE;' ;mov edx, ebx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xD3) ;8b d3
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rcx, rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xCD) ;48 8b cd
; Restore registers value
$aOpCode[$nElemOffset[3]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[3]
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbx, QWORD PTR [rsp+64]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x5C, 0x24, 64) ;48 8b 5c 24 40
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbp, QWORD PTR [rsp+72]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x6C, 0x24, 72) ;48 8b 6c 24 48
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rsi, QWORD PTR [rsp+80]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x74, 0x24, 80) ;48 8b 74 24 50
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;add rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xc4, 48) ;48 83 c4 30
$sExe &= 'BYTE;' ;pop rdi
_cHvr_ArrayPush($aOpCode, 0x5F) ;5f
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[4] = $aOpCode[0]
$aOpCode[$nElemOffset[2]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[2]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$sExe &= 'BYTE;BYTE;PTR;'
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0xFF, 0xE0)
; :Return
$aOpCode[$nElemOffset[4]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[4]
$sExe &= 'BYTE;' ;ret 0
_cHvr_ArrayPush($aOpCode, 0xC3)
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X64
Func _cHvr_PopulateOpcode(ByRef $sExe, ByRef $aOpCode)
Local $tExe = DllStructCreate($sExe)
Assert(@error = 0, 'DllStrucCreate Failed With Error = ' & @error)
For $i = 1 To $aOpCode[0]
DllStructSetData($tExe, $i, $aOpCode[$i])
Next
Return $tExe
EndFunc ;==>_cHvr_PopulateOpcode
Func _cHvr_ExecutableFromStruct($tExe)
Local $pExe = DllCall('kernel32.dll', 'PTR', 'HeapAlloc', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 8, 'ULONG_PTR', DllStructGetSize($tExe))[0]
Assert($pExe <> 0, 'Allocate memory failed')
DllCall("kernel32.dll", "none", "RtlMoveMemory", "PTR", $pExe, "PTR", DllStructGetPtr($tExe), "ULONG_PTR", DllStructGetSize($tExe))
Assert(@error = 0, 'Failed to copy memory')
Return $pExe
EndFunc ;==>_cHvr_ExecutableFromStruct
Func _cHvr_UnRegisterInternal($cIndex, $hWnd)
_WinAPI_RemoveWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd)
Local $aData=$_cHvr_aData[$cIndex]
$_cHvr_aData[$cIndex] = 0
Call( "_iControlDelete",$aData[1])
EndFunc ;==>_cHvr_UnRegisterInternal
Func _cHvr_Finalize()
DllCallbackFree($_cHvr_PINTERNALSUBCLASS_DLL)
_WinAPI_FreeLibrary($_cHvr_HDLLCOMCTL32)
If ($_cHvr_HEXECUTABLEHEAP <> 0) Then
If ($_cHvr_PSUBCLASSEXE <> 0) Then
DllCall('kernel32.dll', 'BOOL', 'HeapFree', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 0, 'PTR', $_cHvr_PSUBCLASSEXE)
EndIf
DllCall('kernel32.dll', 'BOOL', 'HeapDestroy', 'HANDLE', $_cHvr_HEXECUTABLEHEAP)
EndIf
EndFunc ;==>_cHvr_Finalize
Func Assert($bExpression, $sMsg = '', $sScript = @ScriptName, $sScriptPath = @ScriptFullPath, $iLine = @ScriptLineNumber, $iError = @error, $iExtend = @extended)
If (Not ($bExpression)) Then
MsgBox(BitOR(1, 0x10), 'Assertion Error!', _
@CRLF & 'Script' & @TAB & ': ' & $sScript _
& @CRLF & 'Path' & @TAB & ': ' & $sScriptPath _
& @CRLF & 'Line' & @TAB & ': ' & $iLine _
& @CRLF & 'Error' & @TAB & ': ' & ($iError > 0x7FFF ? Hex($iError) : $iError) _
& ($iExtend <> 0 ? ' (Extended : ' & ($iExtend > 0x7FFF ? Hex($iExtend) : $iExtend) & ')' : '') _
& @CRLF & 'Message' & @TAB & ': ' & $sMsg _
& @CRLF & @CRLF & 'OK: Exit Script' & @TAB & 'Cancel: Continue')
Exit
EndIf
EndFunc ;==>Assert
Func _cHvr_GetNewIndex($hWnd)
;Try to assign index from previously deleted control
For $i = 0 To UBound($_cHvr_aData) - 1 Step +1
If Not IsArray($_cHvr_aData[$i]) Then
Return $i
EndIf
Next
ReDim $_cHvr_aData[UBound($_cHvr_aData) + 1]
Return UBound($_cHvr_aData) - 1
EndFunc ;==>_cHvr_GetNewIndex
Func _WinAPI_GetCapture()
Return DllCall("user32.dll", "HWND", "GetCapture")[0]
EndFunc ;==>_WinAPI_GetCapture

View file

@ -0,0 +1,279 @@
#include-once
; #INDEX# ============================================================================================================
; Title .........: _StringSize
; AutoIt Version : v3.2.12.1 or higher
; Language ......: English
; Description ...: Returns size of rectangle required to display string - maximum width can be chosen
; Remarks .......:
; Note ..........:
; Author(s) .....: Melba23 - thanks to trancexx for the default DC code
; ====================================================================================================================
;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
; #CURRENT# ==========================================================================================================
; _StringSize: Returns size of rectangle required to display string - maximum width can be chosen
; ====================================================================================================================
; #INTERNAL_USE_ONLY#=================================================================================================
; _StringSize_Error_Close: Releases DC and deletes font object after error
; _StringSize_DefaultFontName: Determines Windows default font
; ====================================================================================================================
; #FUNCTION# =========================================================================================================
; Name...........: _StringSize
; Description ...: Returns size of rectangle required to display string - maximum permitted width can be chosen
; Syntax ........: _StringSize($sText[, $iSize[, $iWeight[, $iAttrib[, $sName[, $iWidth[, $hWnd]]]]]])
; Parameters ....: $sText - String to display
; $iSize - [optional] Font size in points - (default = 8.5)
; $iWeight - [optional] Font weight - (default = 400 = normal)
; $iAttrib - [optional] Font attribute (0-Normal (default), 2-Italic, 4-Underline, 8 Strike)
; + 1 if tabs are to be expanded before sizing
; $sName - [optional] Font name - (default = Tahoma)
; $iWidth - [optional] Max width for rectangle - (default = 0 => width of original string)
; $hWnd - [optional] GUI in which string will be displayed - (default 0 => normally not required)
; Requirement(s) : v3.2.12.1 or higher
; Return values .: Success - Returns 4-element array: ($iWidth set // $iWidth not set)
; |$array[0] = String reformatted with additonal @CRLF // Original string
; |$array[1] = Height of single line in selected font // idem
; |$array[2] = Width of rectangle required for reformatted // original string
; |$array[3] = Height of rectangle required for reformatted // original string
; Failure - Returns 0 and sets @error:
; |1 - Incorrect parameter type (@extended = parameter index)
; |2 - DLL call error - extended set as follows:
; |1 - GetDC failure
; |2 - SendMessage failure
; |3 - GetDeviceCaps failure
; |4 - CreateFont failure
; |5 - SelectObject failure
; |6 - GetTextExtentPoint32 failure
; |3 - Font too large for chosen max width - a word will not fit
; Author ........: Melba23 - thanks to trancexx for the default DC code
; Modified ......:
; Remarks .......: The use of the $hWnd parameter is not normally necessary - it is only required if the UDF does not
; return correct dimensions without it.
; Related .......:
; Link ..........:
; Example .......: Yes
;=====================================================================================================================
Func _StringSize($sText, $iSize = 8.5, $iWeight = 400, $iAttrib = 0, $sName = "", $iMaxWidth = 0, $hWnd = 0)
; Set parameters passed as Default
If $iSize = Default Then $iSize = 8.5
If $iWeight = Default Then $iWeight = 400
If $iAttrib = Default Then $iAttrib = 0
If $sName = "" Or $sName = Default Then $sName = _StringSize_DefaultFontName()
; Check parameters are correct type
If Not IsString($sText) Then Return SetError(1, 1, 0)
If Not IsNumber($iSize) Then Return SetError(1, 2, 0)
If Not IsInt($iWeight) Then Return SetError(1, 3, 0)
If Not IsInt($iAttrib) Then Return SetError(1, 4, 0)
If Not IsString($sName) Then Return SetError(1, 5, 0)
If Not IsNumber($iMaxWidth) Then Return SetError(1, 6, 0)
If Not IsHwnd($hWnd) And $hWnd <> 0 Then Return SetError(1, 7, 0)
Local $aRet, $hDC, $hFont, $hLabel = 0, $hLabel_Handle
; Check for tab expansion flag
Local $iExpTab = BitAnd($iAttrib, 1)
; Remove possible tab expansion flag from font attribute value
$iAttrib = BitAnd($iAttrib, BitNot(1))
; If GUI handle was passed
If IsHWnd($hWnd) Then
; Create label outside GUI borders
$hLabel = GUICtrlCreateLabel("", -10, -10, 10, 10)
$hLabel_Handle = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
; Create DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hLabel_Handle)
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, 1, 0)
EndIf
$hDC = $aRet[0]
$aRet = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hLabel_Handle, "int", 0x0031, "wparam", 0, "lparam", 0) ; $WM_GetFont
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, _StringSize_Error_Close(2, $hDC), 0)
EndIf
$hFont = $aRet[0]
Else
; Get default DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
If @error Or $aRet[0] = 0 Then Return SetError(2, 1, 0)
$hDC = $aRet[0]
; Create required font
$aRet = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", 90) ; $LOGPIXELSY
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(3, $hDC), 0)
Local $iInfo = $aRet[0]
$aRet = DllCall("gdi32.dll", "handle", "CreateFontW", "int", -$iInfo * $iSize / 72, "int", 0, "int", 0, "int", 0, _
"int", $iWeight, "dword", BitAND($iAttrib, 2), "dword", BitAND($iAttrib, 4), "dword", BitAND($iAttrib, 8), "dword", 0, "dword", 0, _
"dword", 0, "dword", 5, "dword", 0, "wstr", $sName)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(4, $hDC), 0)
$hFont = $aRet[0]
EndIf
; Select font and store previous font
$aRet = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hFont)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(5, $hDC, $hFont, $hLabel), 0)
Local $hPrevFont = $aRet[0]
; Declare variables
Local $avSize_Info[4], $iLine_Length, $iLine_Height = 0, $iLine_Count = 0, $iLine_Width = 0, $iWrap_Count, $iLast_Word, $sTest_Line
; Declare and fill Size structure
Local $tSize = DllStructCreate("int X;int Y")
DllStructSetData($tSize, "X", 0)
DllStructSetData($tSize, "Y", 0)
; Ensure EoL is @CRLF and break text into lines
$sText = StringRegExpReplace($sText, "((?<!\x0d)\x0a|\x0d(?!\x0a))", @CRLF)
Local $asLines = StringSplit($sText, @CRLF, 1)
; For each line
For $i = 1 To $asLines[0]
; Expand tabs if required
If $iExpTab Then
$asLines[$i] = StringReplace($asLines[$i], @TAB, " XXXXXXXX")
EndIf
; Size line
$iLine_Length = StringLen($asLines[$i])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$i], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
If DllStructGetData($tSize, "X") > $iLine_Width Then $iLine_Width = DllStructGetData($tSize, "X")
If DllStructGetData($tSize, "Y") > $iLine_Height Then $iLine_Height = DllStructGetData($tSize, "Y")
Next
; Check if $iMaxWidth has been both set and exceeded
If $iMaxWidth <> 0 And $iLine_Width > $iMaxWidth Then ; Wrapping required
; For each Line
For $j = 1 To $asLines[0]
; Size line unwrapped
$iLine_Length = StringLen($asLines[$j])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$j], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
; Check wrap status
If DllStructGetData($tSize, "X") < $iMaxWidth - 4 Then
; No wrap needed so count line and store
$iLine_Count += 1
$avSize_Info[0] &= $asLines[$j] & @CRLF
Else
; Wrap needed so zero counter for wrapped lines
$iWrap_Count = 0
; Build line to max width
While 1
; Zero line width
$iLine_Width = 0
; Initialise pointer for end of word
$iLast_Word = 0
; Add characters until EOL or maximum width reached
For $i = 1 To StringLen($asLines[$j])
; Is this just past a word ending?
If StringMid($asLines[$j], $i, 1) = " " Then $iLast_Word = $i - 1
; Increase line by one character
$sTest_Line = StringMid($asLines[$j], 1, $i)
; Get line length
$iLine_Length = StringLen($sTest_Line)
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sTest_Line, "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
$iLine_Width = DllStructGetData($tSize, "X")
; If too long exit the loop
If $iLine_Width >= $iMaxWidth - 4 Then ExitLoop
Next
; End of the line of text?
If $i > StringLen($asLines[$j]) Then
; Yes, so add final line to count
$iWrap_Count += 1
; Store line
$avSize_Info[0] &= $sTest_Line & @CRLF
ExitLoop
Else
; No, but add line just completed to count
$iWrap_Count += 1
; Check at least 1 word completed or return error
If $iLast_Word = 0 Then Return SetError(3, _StringSize_Error_Close(0, $hDC, $hFont, $hLabel), 0)
; Store line up to end of last word
$avSize_Info[0] &= StringLeft($sTest_Line, $iLast_Word) & @CRLF
; Strip string to point reached
$asLines[$j] = StringTrimLeft($asLines[$j], $iLast_Word)
; Trim leading whitespace
$asLines[$j] = StringStripWS($asLines[$j], 1)
; Repeat with remaining characters in line
EndIf
WEnd
; Add the number of wrapped lines to the count
$iLine_Count += $iWrap_Count
EndIf
Next
; Reset any tab expansions
If $iExpTab Then
$avSize_Info[0] = StringRegExpReplace($avSize_Info[0], "\x20?XXXXXXXX", @TAB)
EndIf
; Complete return array
$avSize_Info[1] = $iLine_Height
$avSize_Info[2] = $iMaxWidth
; Convert lines to pixels and add drop margin
$avSize_Info[3] = ($iLine_Count * $iLine_Height) + 4
Else ; No wrapping required
; Create return array (add drop margin to height)
Local $avSize_Info[4] = [$sText, $iLine_Height, $iLine_Width, ($asLines[0] * $iLine_Height) + 4]
EndIf
; Clear up
DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hPrevFont)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $avSize_Info
EndFunc ;==>_StringSize
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_Error_Close
; Description ...: Releases DC and deleted font object if required after error
; Syntax ........: _StringSize_Error_Close ($iExtCode, $hDC, $hGUI)
; Parameters ....: $iExtCode - code to return
; $hDC, $hGUI - handles as set in _StringSize function
; Return value ..: $iExtCode as passed
; Author ........: Melba23
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_Error_Close($iExtCode, $hDC = 0, $hFont = 0, $hLabel = 0)
If $hFont <> 0 Then DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
If $hDC <> 0 Then DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $iExtCode
EndFunc ;=>_StringSize_Error_Close
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_DefaultFontName
; Description ...: Determines Windows default font
; Syntax ........: _StringSize_DefaultFontName()
; Parameters ....: None
; Return values .: Success - Returns name of system default font
; Failure - Returns "Tahoma"
; Author ........: Melba23, based on some original code by Larrydalooza
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_DefaultFontName()
; Get default system font data
Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]")
DLLStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS))
DLLCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0)
Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DLLStructGetPtr($tNONCLIENTMETRICS, 13))
If IsString(DllStructGetData($tLOGFONT, 14)) Then
Return DllStructGetData($tLOGFONT, 14)
Else
Return "Tahoma"
EndIf
EndFunc ;=>_StringSize_DefaultFontName

View file

@ -0,0 +1,80 @@
#include-once
; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
; #INDEX# =======================================================================================================================
; Title .........: _GUIDisable
; AutoIt Version : v3.2.2.0 or higher
; Language ......: English
; Description ...: Creates a dimming effect on the current/selected GUI.
; Note ..........:
; Author(s) .....: guinness
; Remarks .......: Thanks to supersonic for the idea of adjusting the UDF when using Classic themes in Windows Vista+.
; ===============================================================================================================================
; #INCLUDES# ====================================================================================================================
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
; #GLOBAL VARIABLES# ============================================================================================================
Global Enum $__hGUIDisableHWnd, $__hGUIDisableHWndPrevious, $__iGUIDisableMax
Global $__aGUIDisable[$__iGUIDisableMax]
Func _GUIDisable($hWnd, $iAnimate = Default, $iBrightness = Default, $bColor = 0x000000)
Local Const $AW_SLIDE_IN_TOP = 0x00040004, $AW_SLIDE_OUT_TOP = 0x00050008
If $iAnimate = Default Then
$iAnimate = 1
EndIf
If $iBrightness = Default Then
$iBrightness = 5
EndIf
If $hWnd = -1 And $__aGUIDisable[$__hGUIDisableHWnd] = 0 Then
Local $iLabel = GUICtrlCreateLabel('', -99, -99, 1, 1)
$hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iLabel))
If @error Then
Return SetError(1, 0 * GUICtrlDelete($iLabel), 0)
EndIf
GUICtrlDelete($iLabel)
EndIf
If IsHWnd($__aGUIDisable[$__hGUIDisableHWnd]) Then
GUIDelete($__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = 0
$__aGUIDisable[$__hGUIDisableHWndPrevious] = 0
Else
$__aGUIDisable[$__hGUIDisableHWndPrevious] = $hWnd
Local $iLeft = 0, $iTop = 0
Local $iStyle = GUIGetStyle($__aGUIDisable[$__hGUIDisableHWndPrevious])
Local $sCurrentTheme = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes', 'CurrentTheme')
Local $iIsClassicTheme = Number(StringInStr($sCurrentTheme, 'Basic.theme', 2) = 0 And StringInStr($sCurrentTheme, 'Ease of Access Themes', 2) > 0)
Local $aWinGetPos = WinGetClientSize($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = GUICreate('', $aWinGetPos[0], $aWinGetPos[1], $iLeft + 3, $iTop + 3, $WS_POPUP, $WS_EX_MDICHILD, $__aGUIDisable[$__hGUIDisableHWndPrevious])
GUISetBkColor($bColor, $__aGUIDisable[$__hGUIDisableHWnd])
WinSetTrans($__aGUIDisable[$__hGUIDisableHWnd], '', Round($iBrightness * (255 / 100)))
If not $iAnimate Then
GUISetState(@SW_SHOW, $__aGUIDisable[$__hGUIDisableHWnd])
EndIf
GUISetState(@SW_DISABLE, $__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
EndIf
Return $__aGUIDisable[$__hGUIDisableHWnd]
EndFunc ;==>_GUIDisable
; #INTERNAL_USE_ONLY#============================================================================================================
Func __GUIDisable_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $iHeight = _WinAPI_HiWord($ilParam)
Local $iWidth = _WinAPI_LoWord($ilParam)
If $hWnd = $__aGUIDisable[$__hGUIDisableHWndPrevious] Then
Local $iWinGetPos = WinGetPos($__aGUIDisable[$__hGUIDisableHWnd])
If @error = 0 Then
WinMove($__aGUIDisable[$__hGUIDisableHWnd], '', $iWinGetPos[0], $iWinGetPos[1], $iWidth, $iHeight)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>__GUIDisable_WM_SIZE

View file

@ -0,0 +1,13 @@
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: Tyleo
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)

View file

@ -0,0 +1,10 @@
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include <WindowsConstants.au3>
Func TyleoAbout($SoftName)
_Metro_MsgBox(8,"About / A propos",$SoftName & @CRLF & "Tyleo Softwares @ 2021" & @CRLF & " " & @CRLF & "BUILDING TOMORROW" & @CRLF & " " & @CRLF & "This Software is free and Open Source." & @CRLF & "tyleo.dev@outlook.com",400,15)
Return True
EndFunc

BIN
CNP.Exe Executable file

Binary file not shown.

BIN
CNP_32.Exe Executable file

Binary file not shown.

2
ChocoSetup/ChocoPackages.ini Executable file
View file

@ -0,0 +1,2 @@
[Packages]
PACKAGES=

17
ChocoSetup/ChocolateyCustom.au3 Executable file
View file

@ -0,0 +1,17 @@
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=SETUP_CUST.ico
#AutoIt3Wrapper_Outfile_x64=Releases\ChocolateyCustom.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
if not FileExists(@ScriptDir & "\ChocoPackages.ini") Then
IniWrite(@ScriptDir & "\ChocoPackages.ini","Packages","PACKAGES","")
Exit(1)
EndIf
$packages = IniRead(@ScriptDir & "\ChocoPackages.ini","Packages","PACKAGES","424242")
if $packages = "424242" Then
Exit(1)
EndIf
Run("choco feature enable -n=allowGlobalConfirmation")
Run("choco install " & $packages)

13
ChocoSetup/ChocolateySetup.au3 Executable file
View file

@ -0,0 +1,13 @@
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=SETUP.ico
#AutoIt3Wrapper_Outfile_x64=Releases\ChocoSetup.Exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$ChocoGlobal = "choco feature enable -n=allowGlobalConfirmation"
$ChocoCMD = "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"
Run("powershell" & " " & $ChocoCMD)
Run("cmd" & " /c " & $ChocoGlobal)
If FileExists(@ScriptDir & "\ChocolateyCustom.exe") Then
Run(@ScriptDir & "\ChocolateyCustom.exe")
EndIf

BIN
ChocoSetup/ChocolateySetup.exe Executable file

Binary file not shown.

View file

@ -0,0 +1,2 @@
[Packages]
PACKAGES=youtube-dl ffmpeg axel wget curl git

Binary file not shown.

Binary file not shown.

BIN
ChocoSetup/SETUP.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
ChocoSetup/SETUP_CUST.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

23
Chrome InApp/Chrome InApp.au3 Executable file
View file

@ -0,0 +1,23 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductVersion=1.0.0.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include "TyleoAboutMe.au3"
#cs
Tyleo Software Project Base v1
Created With CNP and DevTools Base Folder
All Softwares created with this base are Free and Open Sourced.
Join our Guilded Server ! https://www.guilded.gg/i/2DRlM7Mp
#ce

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
#include-once
#cs ----------------------------------------------------------------------------
Author: BB_19
Material Themes for MetroGUI UDF
If you want to create your own themes, check out flatcolors.net, you can find there many random material/flat colors :)
#ce ----------------------------------------------------------------------------
;#Set Default Theme
Global $GUIThemeColor = "0x13161C" ; GUI Background Color
Global $FontThemeColor = "0xFFFFFF" ; Font Color
Global $GUIBorderColor = "0x2D2D2D" ; GUI Border Color
Global $ButtonBKColor = "0x00796b" ; Metro Button BacKground Color
Global $ButtonTextColor = "0xFFFFFF" ; Metro Button Text Color
Global $CB_Radio_Color = "0xFFFFFF" ;Checkbox and Radio Color (Box/Circle)
Global $GUI_Theme_Name = "DarkTealV2" ;Theme Name (For internal usage)
Global $CB_Radio_Hover_Color = "0xD8D8D8" ; Checkbox and Radio Hover Color (Box/Circle)
Global $CB_Radio_CheckMark_Color = "0x1a1a1a" ; Checkbox and Radio checkmark color
Func _SetTheme($ThemeSelect = "DarkTeal")
$GUI_Theme_Name = $ThemeSelect
Switch ($ThemeSelect)
Case "LightTeal"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTeal"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkTealV2"
$GUIThemeColor = "0x13161C"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x35635B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkRuby"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x712043"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightTeal"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x336058"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightCyan"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x0D5C63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnightBlue"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x1A4F70"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkMidnight"
$GUIThemeColor = "0x0A0D16"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x3C4D66"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlue"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkBlueV2"
$GUIThemeColor = "0x040D11"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x303030"
$ButtonBKColor = "0x1E648C"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightBlue"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x244E80"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightCyan"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkCyan"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00838f"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGray"
$GUIThemeColor = "0xcccccc"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x3F5863"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightGreen"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x2E7D32"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreen"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGreenV2"
$GUIThemeColor = "0x061319"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x242B47"
$ButtonBKColor = "0x5E8763"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightRed"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xc62828"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkGray"
$GUIThemeColor = "0x1B2428"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x4F6772"
$ButtonBKColor = "0x607D8B"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkAmber"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xffa000"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightOrange"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xBC5E05"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkOrange"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0xC76810"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPurple"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "DarkPurple"
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x512DA8"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case "LightPink"
$GUIThemeColor = "0xD7D7D7"
$FontThemeColor = "0x000000"
$GUIBorderColor = "0xD8D8D8"
$ButtonBKColor = "0xE91E63"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xE8E8E8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
Case Else
ConsoleWrite("Metro-UDF-Error: Theme not found, using default theme." & @CRLF)
$GUIThemeColor = "0x191919"
$FontThemeColor = "0xFFFFFF"
$GUIBorderColor = "0x2D2D2D"
$ButtonBKColor = "0x00796b"
$ButtonTextColor = "0xFFFFFF"
$CB_Radio_Color = "0xFFFFFF"
$CB_Radio_Hover_Color = "0xD8D8D8"
$CB_Radio_CheckMark_Color = "0x1a1a1a"
$GUI_Theme_Name = "DarkTealV2"
EndSwitch
EndFunc ;==>_SetTheme

View file

@ -0,0 +1,495 @@
;======================================
;~ Author : binhnx
;~ Created : 2014/10/20
;======================================
;~ Modified : BB_19
;~ Last modified : 2017/10/07
;======================================
#include-once
#include <WinAPI.au3>
#include <WinAPIShellEx.au3>
Local $_cHvr_aData[0]
Local Const $_cHvr_HDLLCOMCTL32 = _WinAPI_LoadLibrary('comctl32.dll')
Assert($_cHvr_HDLLCOMCTL32 <> 0, 'This UDF requires comctl32.dll')
Local Const $_cHvr_PDEFSUBCLASSPROC = _WinAPI_GetProcAddress($_cHvr_HDLLCOMCTL32, 'DefSubclassProc')
Local Const $_cHvr_PINTERNALSUBCLASS_DLL = DllCallbackRegister('_cHvr_iProc', 'NONE', 'HWND;UINT;WPARAM;LPARAM;DWORD')
Local Const $_cHvr_PINTERNALSUBCLASS = DllCallbackGetPtr($_cHvr_PINTERNALSUBCLASS_DLL)
OnAutoItExitRegister("_cHvr_Finalize")
Local Const $_cHvr_TSUBCLASSEXE = Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86')
Local Const $_cHvr_HEXECUTABLEHEAP = DllCall('kernel32.dll', 'HANDLE', 'HeapCreate', 'DWORD', 0x00040000, 'ULONG_PTR', 0, 'ULONG_PTR', 0)[0]
Assert($_cHvr_HEXECUTABLEHEAP <> 0, 'Failed to create executable heap object')
Local Const $_cHvr_PSUBCLASSEXE = _cHvr_ExecutableFromStruct(Call(@AutoItX64 ? '_cHvr_CSCP_X64' : '_cHvr_CSCP_X86'))
Func _cHvr_Register($idCtrl, $fnHovOff = '', $fnHoverOn = '', $fnClick = '', $fnDblClk = '', $HoverData = 0,$ClickData = 0,$fnRightClick = '')
Local $hWnd = GUICtrlGetHandle($idCtrl)
If (Not (IsHWnd($hWnd))) Then Return SetError(1, 0, -1)
Local $nIndex = _cHvr_GetNewIndex($hWnd)
Local $aData[13]
$aData[0] = $hWnd;Control Hwnd
$aData[1] = $idCtrl; Control handle
$aData[3] = $fnHovOff;Hover Off func
$aData[4] = $HoverData;Hover Off Data
$aData[5] = $fnHoverOn;Hover ON func
$aData[6] = $HoverData;Hover ON Data
$aData[7] = $fnRightClick;RClick func
$aData[8] = $ClickData; click data
$aData[9] = $fnClick;Click func
$aData[10] = $ClickData; click data
$aData[11] = $fnDblClk;DB click func
$aData[12] = $ClickData;DB click data
$_cHvr_aData[$nIndex] = $aData
_WinAPI_SetWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd, $nIndex)
Return $nIndex
EndFunc ;==>_cHvr_Register
Func _cHvr_iProc($hWnd, $uMsg, $wParam, $lParam, $cIndex)
Switch $uMsg
Case 0x0200;Hover
GUISetCursor(2, 1)
_cHvr_cMove($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0201;Leftclick
_cHvr_cDown($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0202
_cHvr_cUp($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Return False
Case 0x0203;Doubleclick
_cHvr_cDblClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0204;Rightclick
_cHvr_cRightClk($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x02A3;Hover leave
_cHvr_cLeave($_cHvr_aData[$cIndex], $hWnd, $uMsg, $wParam, $lParam)
Case 0x0082;Deleted
_cHvr_UnRegisterInternal($cIndex, $hWnd)
EndSwitch
Return True
EndFunc ;==>_cHvr_iProc
Func _cHvr_cDown(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_WinAPI_SetCapture($hWnd)
_cHvr_CallFunc($aCtrlData, 9)
EndFunc ;==>_cHvr_cDown
Func _cHvr_cMove(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
Local $bIn = _cHvr_IsInClient($hWnd, $lParam)
If Not $aCtrlData[2] Then
If $bIn Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 9)
EndIf
Else
If Not $bIn Then
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndIf
EndIf
ElseIf Not $aCtrlData[2] Then
$aCtrlData[2] = 1
_cHvr_CallFunc($aCtrlData, 5)
Local $tTME = DllStructCreate('DWORD;DWORD;HWND;DWORD')
DllStructSetData($tTME, 1, DllStructGetSize($tTME))
DllStructSetData($tTME, 2, 2) ;$TME_LEAVE
DllStructSetData($tTME, 3, $hWnd)
DllCall('user32.dll', 'BOOL', 'TrackMouseEvent', 'STRUCT*', $tTME)
EndIf
EndFunc ;==>_cHvr_cMove
Func _cHvr_cUp(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
Local $lRet = _WinAPI_DefSubclassProc($hWnd, $uMsg, $wParam, $lParam)
If (_WinAPI_GetCapture() = $hWnd) Then
_WinAPI_ReleaseCapture()
If _cHvr_IsInClient($hWnd, $lParam) Then
_cHvr_CallFunc($aCtrlData, 9)
EndIf
EndIf
Return $lRet
EndFunc ;==>_cHvr_cUp
Func _cHvr_cDblClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 11)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cRightClk(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
_cHvr_CallFunc($aCtrlData, 7)
EndFunc ;==>_cHvr_cDblClk
Func _cHvr_cLeave(ByRef $aCtrlData, $hWnd, $uMsg, ByRef $wParam, ByRef $lParam)
$aCtrlData[2] = 0
_cHvr_CallFunc($aCtrlData, 3)
EndFunc ;==>_cHvr_cLeave
Func _cHvr_CallFunc(ByRef $aCtrlData, $iCallType)
Call($aCtrlData[$iCallType], $aCtrlData[1], $aCtrlData[$iCallType + 1])
EndFunc ;==>_cHvr_CallFunc
Func _cHvr_ArrayPush(ByRef $aStackArr, Const $vSrc1 = Default, Const $vSrc2 = Default, Const $vSrc3 = Default, Const $vSrc4 = Default, Const $vSrc5 = Default)
While (UBound($aStackArr) < ($aStackArr[0] + @NumParams))
ReDim $aStackArr[UBound($aStackArr) * 2]
WEnd
If Not ($vSrc1 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc1
EndIf
If Not ($vSrc2 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc2
EndIf
If Not ($vSrc3 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc3
EndIf
If Not ($vSrc4 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc4
EndIf
If Not ($vSrc5 = Default) Then
$aStackArr[0] += 1
$aStackArr[$aStackArr[0]] = $vSrc5
EndIf
EndFunc ;==>_cHvr_ArrayPush
Func _cHvr_IsInClient($hWnd, $lParam)
Local $iX = BitShift(BitShift($lParam, -16), 16)
Local $iY = BitShift($lParam, 16)
Local $aSize = WinGetClientSize($hWnd)
Return Not ($iX < 0 Or $iY < 0 Or $iX > $aSize[0] Or $iY > $aSize[1])
EndFunc ;==>_cHvr_IsInClient
Func _cHvr_CSCP_X86() ;Create Subclass Process x86
; $hWnd HWND size: 4 ESP+4 EBP+8
; $uMsg UINT size: 4 ESP+8 EBP+12
; $wParam WPARAM size: 4 ESP+12 EBP+16
; $lParam LPARAM size: 4 ESP+16 EBP+20
; $uIdSubclass UINT_PTR size: 4 ESP+20 EBP+24
; $dwRefData DWORD_PTR size: 4 ESP+24 EBP+28 Total: 24
; NERVER FORGET ADDING align 1 OR YOU WILL SPEND HOURS TO FIND WHAT CAUSE 0xC0000005 Access Violation
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; Func ; __stdcall
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x55) ;push ebp
_cHvr_ArrayPush($aOpCode, 0x8B, 0xEC) ;mov ebp, esp
; Save un-modified params to nv register
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+16]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x5D, 16) ;8b 5d 10
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;BYTE;BYTE;' ;mov esi, DWORD PTR [ebp+12]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x75, 12) ;8b 75 0c
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ebx, DWORD PTR [ebp+20]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x7D, 20) ;8b 7d 14
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x82) ;81 fe 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp esi, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFE, 0x2A3) ;81 fe a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;BYTE;' ;lea eax, DWORD PTR [esi-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x86, -0x200) ;8d 86 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
; :WndProcInternal (HWND, UINT, WPARAM, LPARAM, DWORD)
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov ecx, DWORD PTR [ebp+28]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x4D, 28) ;8b 4d 1c
$sExe &= 'BYTE;BYTE;BYTE;' ;mov edx, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x55, 8) ;8b 55 08
$sExe &= 'BYTE;' ;push ecx
_cHvr_ArrayPush($aOpCode, 0x51) ;51
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push edx
_cHvr_ArrayPush($aOpCode, 0x52) ;52
; Call
$sExe &= 'BYTE;PTR;' ;mov eax, _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PINTERNALSUBCLASS)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;' ;test eax, eax
_cHvr_ArrayPush($aOpCode, 0x85, 0xC0) ;85 c0
$sExe &= 'BYTE;BYTE;' ;jz short Return
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$aOpCode[$nElemOffset[2]] = $nAddrOffset[3] - $nAddrOffset[2]
; Prepare stack
$sExe &= 'BYTE;BYTE;BYTE;' ;mov eax, DWORD PTR [ebp+8]
_cHvr_ArrayPush($aOpCode, 0x8B, 0x45, 8)
$sExe &= 'BYTE;' ;push edi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
$sExe &= 'BYTE;' ;push ebx
_cHvr_ArrayPush($aOpCode, 0x53) ;53
$sExe &= 'BYTE;' ;push esi
_cHvr_ArrayPush($aOpCode, 0x56) ;56
$sExe &= 'BYTE;' ;push eax
_cHvr_ArrayPush($aOpCode, 0x50) ;50
;Call
$sExe &= 'BYTE;PTR;' ;mov eax,COMCTL32.DefSubclassProc
_cHvr_ArrayPush($aOpCode, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;' ;call near eax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff 75 8
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
; :Return
$aOpCode[$nElemOffset[3]] = $nAddrOffset[4] - $nAddrOffset[3]
; Restore nv-register
$sExe &= 'BYTE;BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0x5F) ;pop edi
_cHvr_ArrayPush($aOpCode, 0x5E) ;pop esi
_cHvr_ArrayPush($aOpCode, 0x5B) ;pop ebx
; EndFunc
$sExe &= 'BYTE;BYTE;BYTE;WORD'
_cHvr_ArrayPush($aOpCode, 0x5D) ;pop ebp
_cHvr_ArrayPush($aOpCode, 0xC2, 24) ;ret 24
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X86
Func _cHvr_CSCP_X64() ;Create Subclass Process x64
; First four INT and UINT has size = 8 instead of 4 because they are stored in RCX, RDX, R8, R9
; $hWnd HWND size: 8 RCX RSP+8
; $uMsg UINT size: 8 EDX RSP+16
; $wParam WPARAM size: 8 R8 RSP+24
; $lParam LPARAM size: 8 R9 RSP+32
; $uIdSubclass UINT_PTR size: 8 RSP+40
; $dwRefData DWORD_PTR size: 8 RSP+48 Total: 48
Local $sExe = 'align 1;'
Local $aOpCode[100]
$aOpCode[0] = 0
Local $nAddrOffset[5]
Local $nElemOffset[5]
; If ($uMsg = 0x0082) Then Goto WndProcInternal ;WM_NCDESTROY
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x82
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x82) ;81 fa 82 00 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[0] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[0] = $aOpCode[0]
; ElseIf ($uMsg = 0x02A3) Then Goto WndProcInternal ;WM_MOUSELEAVE
$sExe &= 'BYTE;BYTE;DWORD;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x81, 0xFA, 0x2A3) ;81 fa a3 02 00 00
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0) ;74 BYTE_OFFSET
$nAddrOffset[1] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[1] = $aOpCode[0]
; ElseIf ($uMsg < 0x200 Or $uMsg > 0x203) Then Goto DefaultWndProc
$sExe &= 'BYTE;BYTE;DWORD;' ;lea eax, DWORD PTR [rdx-0x200]
_cHvr_ArrayPush($aOpCode, 0x8D, 0x82, -0x200) ;8d 82 00 02 00 00
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp eax, 3
_cHvr_ArrayPush($aOpCode, 0x83, 0xF8, 3) ;83 f8 03
$sExe &= 'BYTE;BYTE;' ;ja short DefaultWndProc
_cHvr_ArrayPush($aOpCode, 0x77, 0) ;77 BYTE_OFFSET
$nAddrOffset[2] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[2] = $aOpCode[0]
$aOpCode[$nElemOffset[0]] = $nAddrOffset[2] - $nAddrOffset[0]
$aOpCode[$nElemOffset[1]] = $nAddrOffset[2] - $nAddrOffset[1]
; :WndProcInternal (HWND rsp+8, UINT +16, WPARAM +24, LPARAM +32, DWORD +40)
; $dwRefData = [ESP+48+48(sub rsp, 48)+8(push rdi)] = [ESP+104]
; Save base registers:
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+8], rbx
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x5C, 0x24, 8) ;48 89 5c 24 08
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+16], rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x6C, 0x24, 16) ;48 89 6c 24 10
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+24], rsi
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x74, 0x24, 24) ;48 89 74 24 18
$sExe &= 'BYTE;' ;push rdi
_cHvr_ArrayPush($aOpCode, 0x57) ;57
; Max sub-routine params = 5 (size = 5*8 = 40), + 8 bytes for return value = 48.
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;sub rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xEC, 48) ;48 83 ec 30
; rbx, rbp, rsi now at [ESP+8+56], [ESP+16+56], [ESP+24+56]
; Save the parameters:
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rdi, r9
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF9) ;49 8b f9
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rsi, r8
_cHvr_ArrayPush($aOpCode, 0x49, 0x8B, 0xF0) ;49 8b f0
$sExe &= 'BYTE;BYTE;' ;mov ebx, edx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xDA) ;8b da
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rbp, rcx
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xE9) ;48 8b e9
; Prepare additional parameter for internal WndProc
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rax, QWORD PTR [rsp+104]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x44, 0x24, 104) ;48 8b 44 24 68
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov QWORD PTR [rsp+32], Rax]
_cHvr_ArrayPush($aOpCode, 0x48, 0x89, 0x44, 0x24, 32) ;48 89 44 24 20
; Call internal WndProc
$sExe &= 'BYTE;BYTE;PTR;' ;mov rax, QWORD PTR _cHvr_iProc
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PINTERNALSUBCLASS)
;movabs rax, _cHvr_iProc ;48 b8 QWORD_PTR
$sExe &= 'BYTE;BYTE;' ;call rax
_cHvr_ArrayPush($aOpCode, 0xFF, 0xD0) ;ff d0
; If (WndProcInternal() = 0) Then Return
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[3] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[3] = $aOpCode[0]
; Restore parameters for DefSubclassProc call
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r9, rdi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xCF) ;4c 8b cf
$sExe &= 'BYTE;BYTE;BYTE;' ;mov r8, rsi
_cHvr_ArrayPush($aOpCode, 0x4C, 0x8B, 0xC6) ;4c 8b c6
$sExe &= 'BYTE;BYTE;' ;mov edx, ebx
_cHvr_ArrayPush($aOpCode, 0x8B, 0xD3) ;8b d3
$sExe &= 'BYTE;BYTE;BYTE;' ;mov rcx, rbp
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0xCD) ;48 8b cd
; Restore registers value
$aOpCode[$nElemOffset[3]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[3]
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbx, QWORD PTR [rsp+64]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x5C, 0x24, 64) ;48 8b 5c 24 40
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rbp, QWORD PTR [rsp+72]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x6C, 0x24, 72) ;48 8b 6c 24 48
$sExe &= 'BYTE;BYTE;BYTE;BYTE;BYTE;' ;mov rsi, QWORD PTR [rsp+80]
_cHvr_ArrayPush($aOpCode, 0x48, 0x8B, 0x74, 0x24, 80) ;48 8b 74 24 50
$sExe &= 'BYTE;BYTE;BYTE;BYTE;' ;add rsp, 48
_cHvr_ArrayPush($aOpCode, 0x48, 0x83, 0xc4, 48) ;48 83 c4 30
$sExe &= 'BYTE;' ;pop rdi
_cHvr_ArrayPush($aOpCode, 0x5F) ;5f
$sExe &= 'BYTE;BYTE;BYTE;' ;cmp edx, 0x2A3
_cHvr_ArrayPush($aOpCode, 0x48, 0x85, 0xC0) ;48 85 c0
$sExe &= 'BYTE;BYTE;' ;je short WndProcInternal
_cHvr_ArrayPush($aOpCode, 0x74, 0)
$nAddrOffset[4] = DllStructGetSize(DllStructCreate($sExe))
$nElemOffset[4] = $aOpCode[0]
$aOpCode[$nElemOffset[2]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[2]
; :DefaultWndProc (HWND, UINT, WPARAM, LPARAM)
$sExe &= 'BYTE;BYTE;PTR;'
_cHvr_ArrayPush($aOpCode, 0x48, 0xB8, $_cHvr_PDEFSUBCLASSPROC)
$sExe &= 'BYTE;BYTE;'
_cHvr_ArrayPush($aOpCode, 0xFF, 0xE0)
; :Return
$aOpCode[$nElemOffset[4]] = DllStructGetSize(DllStructCreate($sExe)) - $nAddrOffset[4]
$sExe &= 'BYTE;' ;ret 0
_cHvr_ArrayPush($aOpCode, 0xC3)
Return _cHvr_PopulateOpcode($sExe, $aOpCode)
EndFunc ;==>_cHvr_CSCP_X64
Func _cHvr_PopulateOpcode(ByRef $sExe, ByRef $aOpCode)
Local $tExe = DllStructCreate($sExe)
Assert(@error = 0, 'DllStrucCreate Failed With Error = ' & @error)
For $i = 1 To $aOpCode[0]
DllStructSetData($tExe, $i, $aOpCode[$i])
Next
Return $tExe
EndFunc ;==>_cHvr_PopulateOpcode
Func _cHvr_ExecutableFromStruct($tExe)
Local $pExe = DllCall('kernel32.dll', 'PTR', 'HeapAlloc', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 8, 'ULONG_PTR', DllStructGetSize($tExe))[0]
Assert($pExe <> 0, 'Allocate memory failed')
DllCall("kernel32.dll", "none", "RtlMoveMemory", "PTR", $pExe, "PTR", DllStructGetPtr($tExe), "ULONG_PTR", DllStructGetSize($tExe))
Assert(@error = 0, 'Failed to copy memory')
Return $pExe
EndFunc ;==>_cHvr_ExecutableFromStruct
Func _cHvr_UnRegisterInternal($cIndex, $hWnd)
_WinAPI_RemoveWindowSubclass($hWnd, $_cHvr_PSUBCLASSEXE, $hWnd)
Local $aData=$_cHvr_aData[$cIndex]
$_cHvr_aData[$cIndex] = 0
Call( "_iControlDelete",$aData[1])
EndFunc ;==>_cHvr_UnRegisterInternal
Func _cHvr_Finalize()
DllCallbackFree($_cHvr_PINTERNALSUBCLASS_DLL)
_WinAPI_FreeLibrary($_cHvr_HDLLCOMCTL32)
If ($_cHvr_HEXECUTABLEHEAP <> 0) Then
If ($_cHvr_PSUBCLASSEXE <> 0) Then
DllCall('kernel32.dll', 'BOOL', 'HeapFree', 'HANDLE', $_cHvr_HEXECUTABLEHEAP, 'DWORD', 0, 'PTR', $_cHvr_PSUBCLASSEXE)
EndIf
DllCall('kernel32.dll', 'BOOL', 'HeapDestroy', 'HANDLE', $_cHvr_HEXECUTABLEHEAP)
EndIf
EndFunc ;==>_cHvr_Finalize
Func Assert($bExpression, $sMsg = '', $sScript = @ScriptName, $sScriptPath = @ScriptFullPath, $iLine = @ScriptLineNumber, $iError = @error, $iExtend = @extended)
If (Not ($bExpression)) Then
MsgBox(BitOR(1, 0x10), 'Assertion Error!', _
@CRLF & 'Script' & @TAB & ': ' & $sScript _
& @CRLF & 'Path' & @TAB & ': ' & $sScriptPath _
& @CRLF & 'Line' & @TAB & ': ' & $iLine _
& @CRLF & 'Error' & @TAB & ': ' & ($iError > 0x7FFF ? Hex($iError) : $iError) _
& ($iExtend <> 0 ? ' (Extended : ' & ($iExtend > 0x7FFF ? Hex($iExtend) : $iExtend) & ')' : '') _
& @CRLF & 'Message' & @TAB & ': ' & $sMsg _
& @CRLF & @CRLF & 'OK: Exit Script' & @TAB & 'Cancel: Continue')
Exit
EndIf
EndFunc ;==>Assert
Func _cHvr_GetNewIndex($hWnd)
;Try to assign index from previously deleted control
For $i = 0 To UBound($_cHvr_aData) - 1 Step +1
If Not IsArray($_cHvr_aData[$i]) Then
Return $i
EndIf
Next
ReDim $_cHvr_aData[UBound($_cHvr_aData) + 1]
Return UBound($_cHvr_aData) - 1
EndFunc ;==>_cHvr_GetNewIndex
Func _WinAPI_GetCapture()
Return DllCall("user32.dll", "HWND", "GetCapture")[0]
EndFunc ;==>_WinAPI_GetCapture

View file

@ -0,0 +1,279 @@
#include-once
; #INDEX# ============================================================================================================
; Title .........: _StringSize
; AutoIt Version : v3.2.12.1 or higher
; Language ......: English
; Description ...: Returns size of rectangle required to display string - maximum width can be chosen
; Remarks .......:
; Note ..........:
; Author(s) .....: Melba23 - thanks to trancexx for the default DC code
; ====================================================================================================================
;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
; #CURRENT# ==========================================================================================================
; _StringSize: Returns size of rectangle required to display string - maximum width can be chosen
; ====================================================================================================================
; #INTERNAL_USE_ONLY#=================================================================================================
; _StringSize_Error_Close: Releases DC and deletes font object after error
; _StringSize_DefaultFontName: Determines Windows default font
; ====================================================================================================================
; #FUNCTION# =========================================================================================================
; Name...........: _StringSize
; Description ...: Returns size of rectangle required to display string - maximum permitted width can be chosen
; Syntax ........: _StringSize($sText[, $iSize[, $iWeight[, $iAttrib[, $sName[, $iWidth[, $hWnd]]]]]])
; Parameters ....: $sText - String to display
; $iSize - [optional] Font size in points - (default = 8.5)
; $iWeight - [optional] Font weight - (default = 400 = normal)
; $iAttrib - [optional] Font attribute (0-Normal (default), 2-Italic, 4-Underline, 8 Strike)
; + 1 if tabs are to be expanded before sizing
; $sName - [optional] Font name - (default = Tahoma)
; $iWidth - [optional] Max width for rectangle - (default = 0 => width of original string)
; $hWnd - [optional] GUI in which string will be displayed - (default 0 => normally not required)
; Requirement(s) : v3.2.12.1 or higher
; Return values .: Success - Returns 4-element array: ($iWidth set // $iWidth not set)
; |$array[0] = String reformatted with additonal @CRLF // Original string
; |$array[1] = Height of single line in selected font // idem
; |$array[2] = Width of rectangle required for reformatted // original string
; |$array[3] = Height of rectangle required for reformatted // original string
; Failure - Returns 0 and sets @error:
; |1 - Incorrect parameter type (@extended = parameter index)
; |2 - DLL call error - extended set as follows:
; |1 - GetDC failure
; |2 - SendMessage failure
; |3 - GetDeviceCaps failure
; |4 - CreateFont failure
; |5 - SelectObject failure
; |6 - GetTextExtentPoint32 failure
; |3 - Font too large for chosen max width - a word will not fit
; Author ........: Melba23 - thanks to trancexx for the default DC code
; Modified ......:
; Remarks .......: The use of the $hWnd parameter is not normally necessary - it is only required if the UDF does not
; return correct dimensions without it.
; Related .......:
; Link ..........:
; Example .......: Yes
;=====================================================================================================================
Func _StringSize($sText, $iSize = 8.5, $iWeight = 400, $iAttrib = 0, $sName = "", $iMaxWidth = 0, $hWnd = 0)
; Set parameters passed as Default
If $iSize = Default Then $iSize = 8.5
If $iWeight = Default Then $iWeight = 400
If $iAttrib = Default Then $iAttrib = 0
If $sName = "" Or $sName = Default Then $sName = _StringSize_DefaultFontName()
; Check parameters are correct type
If Not IsString($sText) Then Return SetError(1, 1, 0)
If Not IsNumber($iSize) Then Return SetError(1, 2, 0)
If Not IsInt($iWeight) Then Return SetError(1, 3, 0)
If Not IsInt($iAttrib) Then Return SetError(1, 4, 0)
If Not IsString($sName) Then Return SetError(1, 5, 0)
If Not IsNumber($iMaxWidth) Then Return SetError(1, 6, 0)
If Not IsHwnd($hWnd) And $hWnd <> 0 Then Return SetError(1, 7, 0)
Local $aRet, $hDC, $hFont, $hLabel = 0, $hLabel_Handle
; Check for tab expansion flag
Local $iExpTab = BitAnd($iAttrib, 1)
; Remove possible tab expansion flag from font attribute value
$iAttrib = BitAnd($iAttrib, BitNot(1))
; If GUI handle was passed
If IsHWnd($hWnd) Then
; Create label outside GUI borders
$hLabel = GUICtrlCreateLabel("", -10, -10, 10, 10)
$hLabel_Handle = GUICtrlGetHandle(-1)
GUICtrlSetFont(-1, $iSize, $iWeight, $iAttrib, $sName)
; Create DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hLabel_Handle)
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, 1, 0)
EndIf
$hDC = $aRet[0]
$aRet = DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hLabel_Handle, "int", 0x0031, "wparam", 0, "lparam", 0) ; $WM_GetFont
If @error Or $aRet[0] = 0 Then
GUICtrlDelete($hLabel)
Return SetError(2, _StringSize_Error_Close(2, $hDC), 0)
EndIf
$hFont = $aRet[0]
Else
; Get default DC
$aRet = DllCall("user32.dll", "handle", "GetDC", "hwnd", $hWnd)
If @error Or $aRet[0] = 0 Then Return SetError(2, 1, 0)
$hDC = $aRet[0]
; Create required font
$aRet = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", 90) ; $LOGPIXELSY
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(3, $hDC), 0)
Local $iInfo = $aRet[0]
$aRet = DllCall("gdi32.dll", "handle", "CreateFontW", "int", -$iInfo * $iSize / 72, "int", 0, "int", 0, "int", 0, _
"int", $iWeight, "dword", BitAND($iAttrib, 2), "dword", BitAND($iAttrib, 4), "dword", BitAND($iAttrib, 8), "dword", 0, "dword", 0, _
"dword", 0, "dword", 5, "dword", 0, "wstr", $sName)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(4, $hDC), 0)
$hFont = $aRet[0]
EndIf
; Select font and store previous font
$aRet = DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hFont)
If @error Or $aRet[0] = 0 Then Return SetError(2, _StringSize_Error_Close(5, $hDC, $hFont, $hLabel), 0)
Local $hPrevFont = $aRet[0]
; Declare variables
Local $avSize_Info[4], $iLine_Length, $iLine_Height = 0, $iLine_Count = 0, $iLine_Width = 0, $iWrap_Count, $iLast_Word, $sTest_Line
; Declare and fill Size structure
Local $tSize = DllStructCreate("int X;int Y")
DllStructSetData($tSize, "X", 0)
DllStructSetData($tSize, "Y", 0)
; Ensure EoL is @CRLF and break text into lines
$sText = StringRegExpReplace($sText, "((?<!\x0d)\x0a|\x0d(?!\x0a))", @CRLF)
Local $asLines = StringSplit($sText, @CRLF, 1)
; For each line
For $i = 1 To $asLines[0]
; Expand tabs if required
If $iExpTab Then
$asLines[$i] = StringReplace($asLines[$i], @TAB, " XXXXXXXX")
EndIf
; Size line
$iLine_Length = StringLen($asLines[$i])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$i], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
If DllStructGetData($tSize, "X") > $iLine_Width Then $iLine_Width = DllStructGetData($tSize, "X")
If DllStructGetData($tSize, "Y") > $iLine_Height Then $iLine_Height = DllStructGetData($tSize, "Y")
Next
; Check if $iMaxWidth has been both set and exceeded
If $iMaxWidth <> 0 And $iLine_Width > $iMaxWidth Then ; Wrapping required
; For each Line
For $j = 1 To $asLines[0]
; Size line unwrapped
$iLine_Length = StringLen($asLines[$j])
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $asLines[$j], "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
; Check wrap status
If DllStructGetData($tSize, "X") < $iMaxWidth - 4 Then
; No wrap needed so count line and store
$iLine_Count += 1
$avSize_Info[0] &= $asLines[$j] & @CRLF
Else
; Wrap needed so zero counter for wrapped lines
$iWrap_Count = 0
; Build line to max width
While 1
; Zero line width
$iLine_Width = 0
; Initialise pointer for end of word
$iLast_Word = 0
; Add characters until EOL or maximum width reached
For $i = 1 To StringLen($asLines[$j])
; Is this just past a word ending?
If StringMid($asLines[$j], $i, 1) = " " Then $iLast_Word = $i - 1
; Increase line by one character
$sTest_Line = StringMid($asLines[$j], 1, $i)
; Get line length
$iLine_Length = StringLen($sTest_Line)
DllCall("gdi32.dll", "bool", "GetTextExtentPoint32W", "handle", $hDC, "wstr", $sTest_Line, "int", $iLine_Length, "ptr", DllStructGetPtr($tSize))
If @error Then Return SetError(2, _StringSize_Error_Close(6, $hDC, $hFont, $hLabel), 0)
$iLine_Width = DllStructGetData($tSize, "X")
; If too long exit the loop
If $iLine_Width >= $iMaxWidth - 4 Then ExitLoop
Next
; End of the line of text?
If $i > StringLen($asLines[$j]) Then
; Yes, so add final line to count
$iWrap_Count += 1
; Store line
$avSize_Info[0] &= $sTest_Line & @CRLF
ExitLoop
Else
; No, but add line just completed to count
$iWrap_Count += 1
; Check at least 1 word completed or return error
If $iLast_Word = 0 Then Return SetError(3, _StringSize_Error_Close(0, $hDC, $hFont, $hLabel), 0)
; Store line up to end of last word
$avSize_Info[0] &= StringLeft($sTest_Line, $iLast_Word) & @CRLF
; Strip string to point reached
$asLines[$j] = StringTrimLeft($asLines[$j], $iLast_Word)
; Trim leading whitespace
$asLines[$j] = StringStripWS($asLines[$j], 1)
; Repeat with remaining characters in line
EndIf
WEnd
; Add the number of wrapped lines to the count
$iLine_Count += $iWrap_Count
EndIf
Next
; Reset any tab expansions
If $iExpTab Then
$avSize_Info[0] = StringRegExpReplace($avSize_Info[0], "\x20?XXXXXXXX", @TAB)
EndIf
; Complete return array
$avSize_Info[1] = $iLine_Height
$avSize_Info[2] = $iMaxWidth
; Convert lines to pixels and add drop margin
$avSize_Info[3] = ($iLine_Count * $iLine_Height) + 4
Else ; No wrapping required
; Create return array (add drop margin to height)
Local $avSize_Info[4] = [$sText, $iLine_Height, $iLine_Width, ($asLines[0] * $iLine_Height) + 4]
EndIf
; Clear up
DllCall("gdi32.dll", "handle", "SelectObject", "handle", $hDC, "handle", $hPrevFont)
DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $avSize_Info
EndFunc ;==>_StringSize
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_Error_Close
; Description ...: Releases DC and deleted font object if required after error
; Syntax ........: _StringSize_Error_Close ($iExtCode, $hDC, $hGUI)
; Parameters ....: $iExtCode - code to return
; $hDC, $hGUI - handles as set in _StringSize function
; Return value ..: $iExtCode as passed
; Author ........: Melba23
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_Error_Close($iExtCode, $hDC = 0, $hFont = 0, $hLabel = 0)
If $hFont <> 0 Then DllCall("gdi32.dll", "bool", "DeleteObject", "handle", $hFont)
If $hDC <> 0 Then DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "handle", $hDC)
If $hLabel Then GUICtrlDelete($hLabel)
Return $iExtCode
EndFunc ;=>_StringSize_Error_Close
; #INTERNAL_USE_ONLY#============================================================================================================
; Name...........: _StringSize_DefaultFontName
; Description ...: Determines Windows default font
; Syntax ........: _StringSize_DefaultFontName()
; Parameters ....: None
; Return values .: Success - Returns name of system default font
; Failure - Returns "Tahoma"
; Author ........: Melba23, based on some original code by Larrydalooza
; Modified.......:
; Remarks .......: This function is used internally by _StringSize
; ===============================================================================================================================
Func _StringSize_DefaultFontName()
; Get default system font data
Local $tNONCLIENTMETRICS = DllStructCreate("uint;int;int;int;int;int;byte[60];int;int;byte[60];int;int;byte[60];byte[60];byte[60]")
DLLStructSetData($tNONCLIENTMETRICS, 1, DllStructGetSize($tNONCLIENTMETRICS))
DLLCall("user32.dll", "int", "SystemParametersInfo", "int", 41, "int", DllStructGetSize($tNONCLIENTMETRICS), "ptr", DllStructGetPtr($tNONCLIENTMETRICS), "int", 0)
Local $tLOGFONT = DllStructCreate("long;long;long;long;long;byte;byte;byte;byte;byte;byte;byte;byte;char[32]", DLLStructGetPtr($tNONCLIENTMETRICS, 13))
If IsString(DllStructGetData($tLOGFONT, 14)) Then
Return DllStructGetData($tLOGFONT, 14)
Else
Return "Tahoma"
EndIf
EndFunc ;=>_StringSize_DefaultFontName

View file

@ -0,0 +1,80 @@
#include-once
; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
; #INDEX# =======================================================================================================================
; Title .........: _GUIDisable
; AutoIt Version : v3.2.2.0 or higher
; Language ......: English
; Description ...: Creates a dimming effect on the current/selected GUI.
; Note ..........:
; Author(s) .....: guinness
; Remarks .......: Thanks to supersonic for the idea of adjusting the UDF when using Classic themes in Windows Vista+.
; ===============================================================================================================================
; #INCLUDES# ====================================================================================================================
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
; #GLOBAL VARIABLES# ============================================================================================================
Global Enum $__hGUIDisableHWnd, $__hGUIDisableHWndPrevious, $__iGUIDisableMax
Global $__aGUIDisable[$__iGUIDisableMax]
Func _GUIDisable($hWnd, $iAnimate = Default, $iBrightness = Default, $bColor = 0x000000)
Local Const $AW_SLIDE_IN_TOP = 0x00040004, $AW_SLIDE_OUT_TOP = 0x00050008
If $iAnimate = Default Then
$iAnimate = 1
EndIf
If $iBrightness = Default Then
$iBrightness = 5
EndIf
If $hWnd = -1 And $__aGUIDisable[$__hGUIDisableHWnd] = 0 Then
Local $iLabel = GUICtrlCreateLabel('', -99, -99, 1, 1)
$hWnd = _WinAPI_GetParent(GUICtrlGetHandle($iLabel))
If @error Then
Return SetError(1, 0 * GUICtrlDelete($iLabel), 0)
EndIf
GUICtrlDelete($iLabel)
EndIf
If IsHWnd($__aGUIDisable[$__hGUIDisableHWnd]) Then
GUIDelete($__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = 0
$__aGUIDisable[$__hGUIDisableHWndPrevious] = 0
Else
$__aGUIDisable[$__hGUIDisableHWndPrevious] = $hWnd
Local $iLeft = 0, $iTop = 0
Local $iStyle = GUIGetStyle($__aGUIDisable[$__hGUIDisableHWndPrevious])
Local $sCurrentTheme = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes', 'CurrentTheme')
Local $iIsClassicTheme = Number(StringInStr($sCurrentTheme, 'Basic.theme', 2) = 0 And StringInStr($sCurrentTheme, 'Ease of Access Themes', 2) > 0)
Local $aWinGetPos = WinGetClientSize($__aGUIDisable[$__hGUIDisableHWndPrevious])
$__aGUIDisable[$__hGUIDisableHWnd] = GUICreate('', $aWinGetPos[0], $aWinGetPos[1], $iLeft + 3, $iTop + 3, $WS_POPUP, $WS_EX_MDICHILD, $__aGUIDisable[$__hGUIDisableHWndPrevious])
GUISetBkColor($bColor, $__aGUIDisable[$__hGUIDisableHWnd])
WinSetTrans($__aGUIDisable[$__hGUIDisableHWnd], '', Round($iBrightness * (255 / 100)))
If not $iAnimate Then
GUISetState(@SW_SHOW, $__aGUIDisable[$__hGUIDisableHWnd])
EndIf
GUISetState(@SW_DISABLE, $__aGUIDisable[$__hGUIDisableHWnd])
GUISwitch($__aGUIDisable[$__hGUIDisableHWndPrevious])
EndIf
Return $__aGUIDisable[$__hGUIDisableHWnd]
EndFunc ;==>_GUIDisable
; #INTERNAL_USE_ONLY#============================================================================================================
Func __GUIDisable_WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $iHeight = _WinAPI_HiWord($ilParam)
Local $iWidth = _WinAPI_LoWord($ilParam)
If $hWnd = $__aGUIDisable[$__hGUIDisableHWndPrevious] Then
Local $iWinGetPos = WinGetPos($__aGUIDisable[$__hGUIDisableHWnd])
If @error = 0 Then
WinMove($__aGUIDisable[$__hGUIDisableHWnd], '', $iWinGetPos[0], $iWinGetPos[1], $iWidth, $iHeight)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>__GUIDisable_WM_SIZE

13
Chrome InApp/Releases/.media Executable file
View file

@ -0,0 +1,13 @@
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: Tyleo
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous.
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)

10
Chrome InApp/TyleoAboutMe.au3 Executable file
View file

@ -0,0 +1,10 @@
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include "MetroGUI-UDF\MetroGUI_UDF.au3"
#include <WindowsConstants.au3>
Func TyleoAbout($SoftName)
_Metro_MsgBox(8,"About / A propos",$SoftName & @CRLF & "Tyleo Softwares @ 2021" & @CRLF & " " & @CRLF & "BUILDING TOMORROW" & @CRLF & " " & @CRLF & "This Software is free and Open Source." & @CRLF & "tyleo.dev@outlook.com",400,15)
Return True
EndFunc

BIN
Color Picker/Aslinks Ico.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

View file

@ -0,0 +1 @@
0x2FE19A

View file

@ -0,0 +1,386 @@
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Aslinks Ico.ico
#AutoIt3Wrapper_Outfile=..\..\Logiciels\HEXColorPicker_Unified_x32-x86.exe
#AutoIt3Wrapper_Outfile_x64=..\..\Logiciels\HEXColorPicker_Unified_x64.exe
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_Res_Comment=HEX Color Picker Unified
#AutoIt3Wrapper_Res_Description=HEX Color Picker Unified
#AutoIt3Wrapper_Res_Fileversion=2.0.4.3
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_ProductName=HEX Color Picker Unified
#AutoIt3Wrapper_Res_ProductVersion=2.0.4.0
#AutoIt3Wrapper_Res_CompanyName=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalCopyright=Tyleo Softwares
#AutoIt3Wrapper_Res_LegalTradeMarks=Tyleo Softwares
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include "TyleoAboutMe.au3"
; Fixed Color Vars
$FullWhite = "FFFFFF"
$FullBlack = "000000"
$MatrixGreen = "0DFF06"
$MatrixDarkBlue = "040033"
$DiscordDark = "2C2F33"
$Ice = "4ACBE1"
$GoogleGreen = "34A853"
$GoogleDark = "202124"
$GoogleBlue = "4285F4"
$GoogleRed = "EA4335"
$GoogleYellow = "FBBC05"
$Sand = "E3CCBA"
$Buttercup = "e49326"
$MicrosoftYellow = "FEF000"
$BrightPink = "FF06FF"
$Espresso = "784018"
$DiscordGray = "99AAB5"
$DiscordBluev1 = "5865F2"
$DiscordBluev2 = "404EED"
$FacebookClassic = "4267B2"
$FacebookBlue = "1877F2"
$Mint = "ACCCAC"
$MaterialBlue = "0080FF"
$Win11Blue = "0067B8"
$Magenta = "C219BF"
$AltColor1 = "CC0000"
$AltColor2 = "9400EC"
$CodeName = "ASLINKS"
$CurrentVer = FileGetVersion(@AutoItExe) & " " & $CodeName
$Prog = "Color Picker for AutoIT " & $CurrentVer
#Region ### START Koda GUI section ### Form=
Global $GUI = GUICreate($Prog, 460, 125, 295, 325)
Global $PickColor = GUICtrlCreateButton("Pick Color", 8, 55, 209, 41)
GUICtrlSetFont(-1, 12, 400, 0, "Segoe UI")
GUICtrlSetColor(-1,0x000000)
GUICtrlSetBkColor(-1,0xFFFFFF)
Global $HEX = GUICtrlCreateInput("", 8, 8, 209, 41, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$WS_EX_WINDOWEDGE))
GUICtrlSetFont(-1, 20, 400, 0, "Segoe UI")
GUICtrlSetColor(-1,0x000000)
GUICtrlSetBkColor(-1,0xFFFFFF)
Global $GUI_Menu_File = GUICtrlCreateMenu("File")
Global $GUI_Menu_File_Save = GUICtrlCreateMenuItem("Save Color to Base",$GUI_Menu_File)
Global $GUI_Menu_File_OpenBase = GUICtrlCreateMenuItem("Open Color Base",$GUI_Menu_File)
Global $GUI_Menu_File_Refresh = GUICtrlCreateMenuItem("Refresh Color List",$GUI_Menu_File)
GUICtrlCreateMenuItem("",$GUI_Menu_File)
Global $GUI_Menu_File_Remove = GUICtrlCreateMenuItem("Delete this color",$GUI_Menu_File)
Global $GUI_Menu_Color = GUICtrlCreateMenu("Color")
Global $GUI_Menu_Color_ExportNoAutoIT = GUICtrlCreateMenuItem("Copy Non AutoIT Color Code (Without '0x')",$GUI_Menu_Color)
Global $GUI_Menu_Options = GUICtrlCreateMenu("Options")
Global $GUI_Menu_Options_EditCfg = GUICtrlCreateMenuItem("Edit Color Base Location",$GUI_Menu_Options)
Global $GUI_Menu_About = GUICtrlCreateMenu("About")
Global $GUI_Menu_About_Dev = GUICtrlCreateMenuItem("Developers",$GUI_Menu_About)
Global $GUI_Menu_About_Ver = GUICtrlCreateMenuItem("Color Picker " & $CurrentVer,$GUI_Menu_About)
GUICtrlSetState($GUI_Menu_About_Ver,$GUI_DISABLE)
; Color Fixed Set
Global $CFS_1 = GUICtrlCreateButton("", 380, 7, 15, 15)
DefineBkFromHex(-1, $GoogleDark)
GUICtrlSetTip(-1, "Google Dark")
GUICtrlSetCursor(-1, 0)
Global $CFS_2 = GUICtrlCreateButton("", 395, 7, 15, 15)
DefineBkFromHex(-1, $GoogleGreen)
GUICtrlSetTip(-1, "Google Green")
GUICtrlSetCursor(-1, 0)
Global $CFS_3 = GUICtrlCreateButton("", 410, 7, 15, 15)
DefineBkFromHex(-1, $GoogleRed)
GUICtrlSetTip(-1, "Google Red")
GUICtrlSetCursor(-1, 0)
Global $CFS_4 = GUICtrlCreateButton("", 425, 7, 15, 15)
DefineBkFromHex(-1, $GoogleYellow)
GUICtrlSetTip(-1, "Google Yellow")
GUICtrlSetCursor(-1, 0)
Global $CFS_5 = GUICtrlCreateButton("", 440, 7, 15, 15)
DefineBkFromHex(-1, $FacebookBlue)
GUICtrlSetTip(-1, "Facebook Blue")
GUICtrlSetCursor(-1, 0)
Global $CFS_6 = GUICtrlCreateButton("", 380, 25, 15, 15)
DefineBkFromHex(-1, $FacebookClassic)
GUICtrlSetTip(-1, "Facebook Classic Blue")
GUICtrlSetCursor(-1, 0)
Global $CFS_7 = GUICtrlCreateButton("", 395, 25, 15, 15)
DefineBkFromHex(-1, $DiscordBluev1)
GUICtrlSetTip(-1, "Discord Blue v1")
GUICtrlSetCursor(-1, 0)
Global $CFS_8 = GUICtrlCreateButton("", 410, 25, 15, 15)
DefineBkFromHex(-1, $DiscordBluev2)
GUICtrlSetTip(-1, "Discord Blue v2")
GUICtrlSetCursor(-1, 0)
Global $CFS_9 = GUICtrlCreateButton("", 425, 25, 15, 15)
DefineBkFromHex(-1, $DiscordDark)
GUICtrlSetTip(-1, "Discord Dark")
GUICtrlSetCursor(-1, 0)
Global $CFS_10 = GUICtrlCreateButton("", 440, 25, 15, 15)
DefineBkFromHex(-1, $DiscordGray)
GUICtrlSetTip(-1, "Discord Gray")
GUICtrlSetCursor(-1, 0)
Global $CFS_11 = GUICtrlCreateButton("", 380, 25 + 18, 15, 15)
DefineBkFromHex(-1, $Buttercup)
GUICtrlSetTip(-1, "Buttercup")
GUICtrlSetCursor(-1, 0)
Global $CFS_12 = GUICtrlCreateButton("", 395, 25 + 18, 15, 15)
DefineBkFromHex(-1, $Ice)
GUICtrlSetTip(-1, "Ice")
GUICtrlSetCursor(-1, 0)
Global $CFS_13 = GUICtrlCreateButton("", 410, 25 + 18, 15, 15)
DefineBkFromHex(-1, $MaterialBlue)
GUICtrlSetTip(-1, "Material Blue")
GUICtrlSetCursor(-1, 0)
Global $CFS_14 = GUICtrlCreateButton("", 425, 25 + 18, 15, 15)
DefineBkFromHex(-1, $Win11Blue)
GUICtrlSetTip(-1, "Windows 11 Blue")
GUICtrlSetCursor(-1, 0)
Global $CFS_15 = GUICtrlCreateButton("", 440, 25 + 18, 15, 15)
DefineBkFromHex(-1, $MatrixGreen)
GUICtrlSetTip(-1, "MATRIX Green")
GUICtrlSetCursor(-1, 0)
Global $CFS_16 = GUICtrlCreateButton("", 380, 25 + 36, 15, 15)
DefineBkFromHex(-1, $MatrixDarkBlue)
GUICtrlSetTip(-1, "MATRIX Dark Blue")
GUICtrlSetCursor(-1, 0)
Global $CFS_17 = GUICtrlCreateButton("", 395, 25 + 36, 15, 15)
DefineBkFromHex(-1, $Espresso)
GUICtrlSetTip(-1, "Espresso What Else")
GUICtrlSetCursor(-1, 0)
Global $CFS_18 = GUICtrlCreateButton("", 410, 25 + 36, 15, 15)
DefineBkFromHex(-1, $Sand)
GUICtrlSetTip(-1, "Sand")
GUICtrlSetCursor(-1, 0)
Global $CFS_19 = GUICtrlCreateButton("", 425, 25 + 36, 15, 15)
DefineBkFromHex(-1, $Mint)
GUICtrlSetTip(-1, "Mint")
GUICtrlSetCursor(-1, 0)
Global $CFS_20 = GUICtrlCreateButton("", 440, 25 + 36, 15, 15)
DefineBkFromHex(-1, $Magenta)
GUICtrlSetTip(-1, "Magenta")
GUICtrlSetCursor(-1, 0)
Global $CFS_21 = GUICtrlCreateButton("", 380, 25 + 54, 15, 15)
DefineBkFromHex(-1, $BrightPink)
GUICtrlSetTip(-1, "Bright Pink")
GUICtrlSetCursor(-1, 0)
Global $CFS_22 = GUICtrlCreateButton("", 395, 25 + 54, 15, 15)
DefineBkFromHex(-1, $AltColor1)
GUICtrlSetTip(-1, "Dev Choice #1")
GUICtrlSetCursor(-1, 0)
Global $CFS_23 = GUICtrlCreateButton("", 410, 25 + 54, 15, 15)
DefineBkFromHex(-1, $AltColor2)
GUICtrlSetTip(-1, "Dev Choice #2")
GUICtrlSetCursor(-1, 0)
Global $CFS_24 = GUICtrlCreateButton("", 425, 25 + 54, 15, 15)
DefineBkFromHex(-1, $FullBlack)
GUICtrlSetTip(-1, "Perfect Black (PitchBlack)")
GUICtrlSetCursor(-1, 0)
Global $CFS_25 = GUICtrlCreateButton("", 440, 25 + 54, 15, 15)
DefineBkFromHex(-1, $FullWhite)
GUICtrlSetTip(-1, "Perfect White (FluxWhite)")
GUICtrlSetCursor(-1, 0)
; File List
Global $GUI_ColorBase_List = GUICtrlCreateList("0x000000",220,8,155,97, -1, $WS_EX_WINDOWEDGE)
GUICtrlSetFont(-1,8,900,"","Segoe UI")
GUICtrlSetData($GUI_ColorBase_List,"0xFFFFFF")
;
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
if Not FileExists(@ScriptDir & "\ColorsLocation_AutoIT.ini") Then
IniWrite(@ScriptDir & "\ColorsLocation_AutoIT.ini","Colors Location","Dir",@ScriptDir & "\Color Base (AutoIT Version)")
EndIf
$ColorBase = IniRead(@ScriptDir & "\ColorsLocation_AutoIT.ini","Colors Location","Dir",@ScriptDir & "\Color Base (AutoIT Version)")
if Not FileExists($ColorBase) Then
DirCreate($ColorBase)
EndIf
ColorBaseRefresh()
$NextLiveColor = GUICtrlRead($HEX)
if StringInStr($NextLiveColor,"0x","",1) Then
GUICtrlSetColor($HEX,$NextLiveColor)
GUISetBkColor($NextLiveColor)
EndIf
While 1
$nMsg = GUIGetMsg()
LiveColor()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $CFS_1
GUICtrlSetData($HEX, "0x" & $GoogleDark)
Case $CFS_2
GUICtrlSetData($HEX, "0x" & $GoogleGreen)
Case $CFS_3
GUICtrlSetData($HEX, "0x" & $GoogleRed)
Case $CFS_4
GUICtrlSetData($HEX, "0x" & $GoogleYellow)
Case $CFS_5
GUICtrlSetData($HEX, "0x" & $FacebookBlue)
Case $CFS_6
GUICtrlSetData($HEX, "0x" & $FacebookClassic)
Case $CFS_7
GUICtrlSetData($HEX, "0x" & $DiscordBluev1)
Case $CFS_8
GUICtrlSetData($HEX, "0x" & $DiscordBluev2)
Case $CFS_9
GUICtrlSetData($HEX, "0x" & $DiscordDark)
Case $CFS_10
GUICtrlSetData($HEX, "0x" & $DiscordGray)
Case $CFS_11
GUICtrlSetData($HEX, "0x" & $Buttercup)
Case $CFS_12
GUICtrlSetData($HEX, "0x" & $Ice)
Case $CFS_13
GUICtrlSetData($HEX, "0x" & $MaterialBlue)
Case $CFS_14
GUICtrlSetData($HEX, "0x" & $Win11Blue)
Case $CFS_15
GUICtrlSetData($HEX, "0x" & $MatrixGreen)
Case $CFS_16
GUICtrlSetData($HEX, "0x" & $MatrixDarkBlue)
Case $CFS_17
GUICtrlSetData($HEX, "0x" & $Espresso)
Case $CFS_18
GUICtrlSetData($HEX, "0x" & $Sand)
Case $CFS_19
GUICtrlSetData($HEX, "0x" & $Mint)
Case $CFS_20
GUICtrlSetData($HEX, "0x" & $Magenta)
Case $CFS_21
GUICtrlSetData($HEX, "0x" & $BrightPink)
Case $CFS_22
GUICtrlSetData($HEX, "0x" & $AltColor1)
Case $CFS_23
GUICtrlSetData($HEX, "0x" & $AltColor2)
Case $CFS_24
GUICtrlSetData($HEX, "0x" & $FullBlack)
Case $CFS_25
GUICtrlSetData($HEX, "0x" & $FullWhite)
Case $GUI_Menu_Options_EditCfg
$nLocation = FileSelectFolder("Select a new location for your Color Base",$ColorBase)
if $nLocation = "" Then
ColorBaseRefresh()
Else
IniWrite(@ScriptDir & "\ColorsLocation_AutoIT.ini","Colors Location","Dir",$nLocation)
$ColorBase = $nLocation
ColorBaseRefresh()
EndIf
Case $GUI_Menu_File_Remove
$tFile = GUICtrlRead($GUI_ColorBase_List)
if $tFile = "" Then
; Nothing
Else
$confirm = InputBox("Confirmation Dialog","Please confirm the deletion of this color" & @CRLF & "Target : " & $tFile & @CRLF & "Enter 'YES' to confirm and enter !","","","",150)
if $confirm = "YES" Then
FileDelete($ColorBase & "\" & $tFile)
ColorBaseRefresh()
EndIf
EndIf
Case $GUI_Menu_File_Refresh
ColorBaseRefresh()
Case $GUI_Menu_About_Dev
TyleoAbout($Prog & " Unified Edition")
Case $GUI_Menu_Color_ExportNoAutoIT
$NoITClip = GUICtrlRead($HEX)
$NoITClip = StringTrimLeft($NoITClip,2)
ClipPut($NoITClip)
Case $PickColor
$hColor = _ChooseColor(2)
if $hColor = "-1" Then
; Nothing
Else
GUISetBkColor($hColor)
GUICtrlSetBkColor($HEX,$hColor)
GUICtrlSetBkColor($GUI_ColorBase_List,$hColor)
GUICtrlSetBkColor($PickColor,$hColor)
GUICtrlSetData($HEX,$hColor)
ClipPut($hColor)
EndIf
Case $GUI_ColorBase_List
$iFileColor = GUICtrlRead($GUI_ColorBase_List)
$oFileOpen = FileOpen($ColorBase & "\" & $iFileColor & ".aucolor")
$iColor = FileRead($oFileOpen)
FileClose($oFileOpen)
GUISetBkColor($iColor)
GUICtrlSetBkColor($HEX,$iColor)
GUICtrlSetColor($HEX,0xFFFFFF)
GUICtrlSetBkColor($GUI_ColorBase_List,$iColor)
GUICtrlSetBkColor($PickColor,$iColor)
GUICtrlSetData($HEX,$iColor)
ClipPut($iColor)
Case $GUI_Menu_File_Save
$sName = InputBox("Color Human Readable Name","Enter the name of your color, You can" & @CRLF & "Choose anything.","","","",140)
$sColor = GUICtrlRead($HEX)
if $sName = "" Then
$sFileName = $sColor & ".aucolor"
Else
$sFileName = $sName & "-" & $sColor & ".aucolor"
EndIf
$sFileOpen = FileOpen($ColorBase & "\" & $sFileName,2)
FileWrite($sFileOpen,$sColor)
FileClose($sFileOpen)
ColorBaseRefresh()
Case $GUI_Menu_File_OpenBase
ShellExecute($ColorBase)
EndSwitch
WEnd
Func ColorBaseRefresh()
GUICtrlSetData($GUI_ColorBase_List,"")
$cColorFiles = _FileListToArray($ColorBase,"*.aucolor",$FLTA_FILES,False)
_ArrayDelete($cColorFiles, 0)
_ArrayTrim($cColorFiles,8,1)
$cFiles = _ArrayToString($cColorFiles)
GUICtrlSetData($GUI_ColorBase_List,$cFiles)
$cCheck = GUICtrlRead($GUI_ColorBase_List)
if $cCheck = "-1" Then
GUICtrlSetData($GUI_ColorBase_List,"")
EndIf
EndFunc
Func LiveColor()
$LiveColor = GUICtrlRead($HEX)
if $LiveColor = $NextLiveColor Then
; Nothing
Else
$NextLiveColor = GUICtrlRead($HEX)
if StringInStr($NextLiveColor,"0x","",1) Then
GUICtrlSetBkColor($HEX,$NextLiveColor)
GUICtrlSetBkColor($GUI_ColorBase_List,$NextLiveColor)
GUICtrlSetBkColor($PickColor,$NextLiveColor)
GUISetBkColor($NextLiveColor)
EndIf
EndIf
EndFunc
Func DefineBkFromHex($Target, $ColorCode)
$ColorCode = "0x" & $ColorCode
GUICtrlSetBkColor($Target, $ColorCode)
EndFunc

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Some files were not shown because too many files have changed in this diff Show more