#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=ieframe20.ico #AutoIt3Wrapper_Outfile=MouseTail.exe #AutoIt3Wrapper_Outfile_x64=MouseTail.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_UseUpx=y #AutoIt3Wrapper_UseX64=y #AutoIt3Wrapper_Res_Description=Mouse Tail #AutoIt3Wrapper_Res_Fileversion=1.0.0.4 #AutoIt3Wrapper_Res_ProductVersion=1.0.0.4 #AutoIt3Wrapper_Res_Field=Credits|Based on a Paulie and Manadar script (https://www.autoitscript.com/forum/topic/32889-mouse-Tail/page/2/#findComment-238023) and modified by wakillon #AutoIt3Wrapper_Res_Field=Compiled with | AutoIt Version 3.3.18.0 #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer% #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time% #AutoIt3Wrapper_Run_Tidy=y #AutoIt3Wrapper_Run_After=del '%scriptfile%_stripped.au3' #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe /rm #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #Region ;************ Includes ************ #include #include #include #include #include #include #include #EndRegion ;************ Includes ************ Opt('MustDeclareVars', 1) Opt('TrayMenuMode', 3) #Region ------ Global Variables ------------------------------ Global $hGui, $idComboSymbol, $idButtonSave, $idColorButton, $idLabelTxt, $idLabelCurrentColor, $idComboSymbolCount, $idCheckTrans, $idCheckMulticolors Global $idSettings, $idAbout, $idPause, $idExit Global $Color = 0xFF0000, $iCount, $sText, $bPause = False, $iTrans = 1, $iMulticolors = 0 Global $hGdiDll, $sComboData, $iSymbolIndex, $iSymbolCount Global $sIniFilePath = @TempDir & '\MouseTail.ini' Global $sDefaultFont = 'Segoe UI Symbol', $iGuiSize = 48, $UpdateTime = 100 Global $aHWindow[1], $aHRegion[1], $aPos[1][2], $aWinSize[1], $aLetters Global $aSymbols[10] = [ChrW(57509), _ ; heart ChrW(57474), _ ; star ChrW(57882), _ ; circle ChrW(10020), _ ; clover ChrW(11201), _ ; diamond ChrW(57737), _ ; notes ChrW(57996), _ ; quarter moon ChrW(10041), _ ; sun ChrW(10047), _ ; flower ChrW(11042)] ; hexagon #EndRegion ------ Global Variables ------------------------------ #Region ------ Init ------------------------------ If Not _Singleton(@ScriptName, 0) Then Exit $hGdiDll = DllOpen('gdi32.dll') _ConfigLoad() _GuiConfig() _GuiMouseTailCreate() AdlibRegister('_GuiMouseTailMove', $UpdateTime) Sleep(250) _GuiMouseTailShow() #EndRegion ------ Init ------------------------------ #Region ------ Main Loop ------------------------------ While 1 If Not _WindowIsVisible($hGui) Then Switch TrayGetMsg() Case $idAbout AdlibUnRegister('_GuiMouseTailMove') _GuiMouseTailDelete() MsgBox(262144 + 64, 'About', _ 'MouseTail v1.0.0.4' & @CRLF & _ 'AutoIt Version : ' & @AutoItVersion & @CRLF & _ 'Based on a Paulie and Manadar script' & @CRLF & _ 'Modified by wakillon (2026)' & @CRLF & _ 'Have Fun !', _ 8) _GuiMouseTailCreate() AdlibRegister('_GuiMouseTailMove', $UpdateTime) Sleep(250) If TrayItemGetText($idPause) = 'pause' Then _GuiMouseTailShow() Case $idSettings _ConfigLoad() AdlibUnRegister('_GuiMouseTailMove') _GuiMouseTailDelete() GUISetState(@SW_SHOWNORMAL, $hGui) GUICtrlSetColor($idComboSymbol, $Color) Case $idPause $bPause = Not $bPause If $bPause Then TrayItemSetText($idPause, 'Run') GUISetState(@SW_HIDE, $hGui) AdlibUnRegister('_GuiMouseTailMove') _GuiMouseTailDelete() Else _GuiMouseTailDelete() TrayItemSetText($idPause, 'Pause') $sText = StringTrimLeft(GUICtrlRead($idComboSymbol), 2) GUISetState(@SW_HIDE, $hGui) _GuiMouseTailCreate() AdlibRegister('_GuiMouseTailMove', $UpdateTime) Sleep(250) _GuiMouseTailShow() EndIf Case $idExit _Exit() EndSwitch Else While 1 Switch GUIGetMsg() Case $idCheckTrans $iTrans = Int(_GuiCtrlIsChecked($idCheckTrans)) Case $idCheckMulticolors $iMulticolors = Int(_GuiCtrlIsChecked($idCheckMulticolors)) Case $idComboSymbol GUICtrlSetState($idComboSymbolCount, $GUI_FOCUS) $iSymbolIndex = StringMid(GUICtrlRead($idComboSymbol), 1, 1) Case $idComboSymbolCount $iSymbolIndex = StringMid(GUICtrlRead($idComboSymbol), 1, 1) GUICtrlSetData($idComboSymbol, '') $sComboData = '' For $i = 0 To UBound($aSymbols) - 1 $sComboData &= $i & ' ' & _StringRepeat($aSymbols[$i], GUICtrlRead($idComboSymbolCount)) & '|' Next GUICtrlSetData($idComboSymbol, StringTrimRight($sComboData, 1), $iSymbolIndex & ' ' & _StringRepeat($aSymbols[$iSymbolIndex], GUICtrlRead($idComboSymbolCount))) GUICtrlSetColor($idComboSymbol, $Color) Case $GUI_EVENT_CLOSE, $idButtonSave $sText = StringTrimLeft(GUICtrlRead($idComboSymbol), 2) _ConfigSave() GUISetState(@SW_HIDE, $hGui) _GuiMouseTailCreate() AdlibRegister('_GuiMouseTailMove', $UpdateTime) Sleep(900) If TrayItemGetText($idPause) = 'pause' Then _GuiMouseTailShow() ExitLoop Case $idColorButton $Color = _ChooseColor(2, 0xFF0000) If Not @error Then GUICtrlSetBkColor($idLabelCurrentColor, $Color) GUICtrlSetColor($idComboSymbol, $Color) GUISetState(@SW_SHOWNORMAL, $hGui) GUICtrlSetState($idCheckMulticolors, $GUI_UNCHECKED) $iMulticolors = 0 EndIf EndSwitch Sleep(30) WEnd EndIf Sleep(30) WEnd #EndRegion ------ Main Loop ------------------------------ Func _ConfigLoad() $Color = '0x' & Hex(IniRead($sIniFilePath, 'Config', 'Color', 0xFF0000), 6) $iTrans = Int(IniRead($sIniFilePath, 'Config', 'Tranparency', 1)) $iMulticolors = Int(IniRead($sIniFilePath, 'Config', 'Multicolors', 0)) $iSymbolIndex = Int(IniRead($sIniFilePath, 'Config', 'Symbol', 0)) If $iSymbolIndex > UBound($aSymbols) - 1 Then $iSymbolIndex = UBound($aSymbols) - 1 $iSymbolCount = Int(IniRead($sIniFilePath, 'Config', 'SymbolCount', 8)) EndFunc ;==>_ConfigLoad Func _ConfigSave() IniWrite($sIniFilePath, 'Config', 'Color', $Color) IniWrite($sIniFilePath, 'Config', 'Tranparency', $iTrans) IniWrite($sIniFilePath, 'Config', 'Multicolors', $iMulticolors) IniWrite($sIniFilePath, 'Config', 'Symbol', Int($iSymbolIndex)) IniWrite($sIniFilePath, 'Config', 'SymbolCount', Int(GUICtrlRead($idComboSymbolCount))) EndFunc ;==>_ConfigSave Func _Exit() AdlibUnRegister('_GuiMouseTailMove') _ConfigSave() _GuiMouseTailDelete() GUIDelete($hGui) DllClose($hGdiDll) Exit EndFunc ;==>_Exit Func _GuiConfig() $hGui = GUICreate(' MouseTail v1.0.0.4 Config', 360, 200, -1, -1, -1, _ BitOR($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE, $WS_EX_TOPMOST)) GUISetFont(9, 700, 0, $sDefaultFont) $idLabelTxt = GUICtrlCreateLabel('Symbol to display', 30, 10, 140, 20) $idComboSymbol = GUICtrlCreateCombo($iSymbolIndex & ' ' & _StringRepeat($aSymbols[$iSymbolIndex], $iSymbolCount), 30, 30, 220, 20) Local $sComboData = '' For $i = 0 To UBound($aSymbols) - 1 $sComboData &= $i & ' ' & _StringRepeat($aSymbols[$i], $iSymbolCount) & '|' Next GUICtrlSetData(-1, StringTrimRight($sComboData, 1), $iSymbolIndex & ' ' & _StringRepeat($aSymbols[$iSymbolIndex], $iSymbolCount)) GUICtrlSetColor(-1, $Color) GUICtrlCreateLabel('Symbols Count', 245, 10, 140, 20) $idComboSymbolCount = GUICtrlCreateCombo($iSymbolCount, 270, 30, 50, 20) GUICtrlSetData(-1, '6|7|8|9|10|11', $iSymbolCount) GUICtrlSetState(-1, $GUI_FOCUS) $idCheckTrans = GUICtrlCreateCheckbox('', 30, 62, 25, 25) If $iTrans Then GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlCreateLabel('Allow Tranparency', 55, 67, 140, 20) $idCheckMulticolors = GUICtrlCreateCheckbox('', 200, 62, 25, 25) If $iMulticolors Then GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlCreateLabel('Allow Multicolors', 225, 67, 140, 20) $idColorButton = GUICtrlCreateButton('Select Color', 30, 100, 100, 30, $BS_CENTER) $idLabelCurrentColor = GUICtrlCreateButton('', 150, 101, 28, 28) GUICtrlSetBkColor(-1, $Color) GUICtrlSetState(-1, $GUI_DISABLE) $idButtonSave = GUICtrlCreateButton('Save and hide', 30, 150, 300, 30, BitOR($BS_DEFPUSHBUTTON, $BS_CENTER)) ; Tray Items TrayCreateItem('MouseTail v1.0.0.4') TrayCreateItem('') $idSettings = TrayCreateItem('Settings') TrayCreateItem('') $idPause = TrayCreateItem('Pause') TrayCreateItem('') $idAbout = TrayCreateItem('About') TrayCreateItem('') $idExit = TrayCreateItem('Exit') TraySetToolTip('MouseTail 2026' & @CRLF & ' v1.0.0.4' & @CRLF & ' by wakillon') TraySetState($TRAY_ICONSTATE_FLASH) EndFunc ;==>_GuiConfig Func _GuiCtrlIsChecked($idCtrl) Return BitAND(GUICtrlRead($idCtrl), $GUI_CHECKED) = $GUI_CHECKED EndFunc ;==>_GuiCtrlIsChecked Func _GuiMouseTailCreate() $sText = StringTrimLeft(GUICtrlRead($idComboSymbol), 2) $iCount = StringLen($sText) ReDim $aHWindow[$iCount + 1] ReDim $aHRegion[$iCount + 1] ReDim $aPos[$iCount + 1][2] ReDim $aWinSize[$iCount + 1] $iTrans = Int(_GuiCtrlIsChecked($idCheckTrans)) $aLetters = StringSplit($sText, '') Local $aMousePos For $i = 1 To $iCount $aMousePos = MouseGetPos() $aHWindow[$i] = GUICreate($i, _ $iGuiSize - $i * 4, _ $iGuiSize - $i * 4, _ $aMousePos[0] + (($iGuiSize - $i * 4) * $i), _ $aMousePos[1] + (($iGuiSize - $i * 4) * $i), _ $WS_POPUP, _ BitOR($WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT, $WS_EX_TOPMOST), _ $hGui) $aWinSize[$i] = $iGuiSize - $i * 4 GUISetBkColor($Color) If $iTrans Then WinSetTrans($aHWindow[$i], '', 220 - $i * (20 - $iCount)) $aHRegion[$i] = CreateTextRgn($aHWindow[$i], _ $aLetters[$i], _ $aWinSize[$i], _ $sDefaultFont, _ 500) _WinAPI_SetWindowRgn($aHWindow[$i], $aHRegion[$i], True) GUISetState() WinSetOnTop($aHWindow[$i], '', 1) Next EndFunc ;==>_GuiMouseTailCreate Func _GuiMouseTailDelete() For $i = 1 To UBound($aHWindow) - 1 GUIDelete($aHWindow[$i]) Next EndFunc ;==>_GuiMouseTailDelete Func _GuiMouseTailMove() Local $Random For $x = $aLetters[0] To 1 Step -1 $aPos[$x][0] = $aPos[$x - 1][0] $aPos[$x][1] = $aPos[$x - 1][1] Next $aPos[0][0] = MouseGetPos(0) + 2 $aPos[0][1] = MouseGetPos(1) + 2 For $x = 1 To $aLetters[0] If $iMulticolors Then $Random = Random('0x000000', '0xFFFFFF') GUISetBkColor($Random, $aHWindow[$x]) EndIf WinMove($aHWindow[$x], '', $aPos[$x][0] + ($iGuiSize - $aWinSize[$x]) / 2, $aPos[$x][1] + ($iGuiSize - $aWinSize[$x]) / 2) WinSetOnTop($aHWindow[$x], '', 1) Next EndFunc ;==>_GuiMouseTailMove Func _GuiMouseTailShow() For $i = 1 To $iCount GUISetState(@SW_SHOW, $aHWindow[$i]) WinSetOnTop($aHWindow[$i], '', 1) Next EndFunc ;==>_GuiMouseTailShow Func _WinAPI_CreateFontA($iHeight, $iWidth, $iEscape = 0, $iOrientn = 0, $iWeight = $__WINAPICONSTANT_FW_NORMAL, $bItalic = False, $bUnderline = False, $bStrikeout = False, _ $iCharset = $__WINAPICONSTANT_DEFAULT_CHARSET, $iOutputPrec = $__WINAPICONSTANT_OUT_DEFAULT_PRECIS, $iClipPrec = $__WINAPICONSTANT_CLIP_DEFAULT_PRECIS, _ $iQuality = $__WINAPICONSTANT_DEFAULT_QUALITY, $iPitch = $__WINAPICONSTANT_FF_DONTCARE, $sFace = 'Arial') Local $aCall = DllCall($hGdiDll, 'handle', 'CreateFontA', 'int', $iHeight, 'int', $iWidth, 'int', $iEscape, 'int', $iOrientn, _ 'int', $iWeight, 'dword', $bItalic, 'dword', $bUnderline, 'dword', $bStrikeout, 'dword', $iCharset, 'dword', $iOutputPrec, _ 'dword', $iClipPrec, 'dword', $iQuality, 'dword', $iPitch, 'str', $sFace) If @error Then Return SetError(@error, @extended, 0) Return $aCall[0] EndFunc ;==>_WinAPI_CreateFontA Func _WindowIsVisible($hWnd) Return BitAND(WinGetState($hWnd), $WIN_STATE_VISIBLE) = $WIN_STATE_VISIBLE EndFunc ;==>_WindowIsVisible Func CreateTextRgn(ByRef $CTR_hwnd, $CTR_Text, $CTR_height, $CTR_font = $sDefaultFont, $CTR_weight = 1000) Local $CTR_hDC = _WinAPI_GetDC($CTR_hwnd) Local $CTR_hMyFont = _WinAPI_CreateFontA($CTR_height, _ 0, _ 0, _ 0, _ $CTR_weight, _ 0, _ 0, _ 0, _ $ANSI_CHARSET, _ $OUT_CHARACTER_PRECIS, _ $CLIP_DEFAULT_PRECIS, _ $PROOF_QUALITY, _ $FIXED_PITCH, _ $CTR_font) Local $CTR_hOldFont = _WinAPI_SelectObject($CTR_hDC, $CTR_hMyFont) _WinAPI_BeginPath($CTR_hDC) _WinAPI_TextOut($CTR_hDC, 0, 0, $CTR_Text) _WinAPI_EndPath($CTR_hDC) Local $CTR_hRgn1 = _WinAPI_PathToRegion($CTR_hDC) Local $CTR_rc = DllStructCreate('int;int;int;int') _WinAPI_GetRgnBox($CTR_hRgn1, $CTR_rc) Local $CTR_hRgn2 = _WinAPI_CreateRectRgnIndirect($CTR_rc) _WinAPI_CombineRgn($CTR_hRgn2, $CTR_hRgn2, $CTR_hRgn1, $RGN_XOR) _WinAPI_DeleteObject($CTR_hRgn1) _WinAPI_ReleaseDC($CTR_hwnd, $CTR_hDC) _WinAPI_SelectObject($CTR_hDC, $CTR_hOldFont) Return $CTR_hRgn2 EndFunc ;==>CreateTextRgn