#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.3 #AutoIt3Wrapper_Res_ProductVersion=1.0.0.3 #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_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, $idButtonStart, $idColorButton, $idLabelTxt, $idLabelCurrentColor, $idComboSymbolCount, $idCheckTrans, $idCheckMulticolors Global $idSettings, $idAbout, $idPause, $idExit Global $Color=0xFF0000, $iCount, $sText, $bPause=False, $bTrans=1, $bMulticolors= 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 1 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() _GuiMain() _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.3' & @CRLF & _ 'AutoIt Version : ' & @AutoItVersion & @CRLF & _ 'Based on a Paulie and Manadar script' & @CRLF & _ 'Modified by wakillon (2025)' & @CRLF & _ 'Have Fun !', _ 8) _GuiMouseTailCreate() AdlibRegister('_GuiMouseTailMove', $UpdateTime) Sleep(250) _GuiMouseTailShow() Case $idSettings 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 TrayItemSetText($idPause, 'Pause') $sText = StringTrimLeft(GUICtrlRead($idComboSymbol), 2) GUISetState(@SW_HIDE, $hGui) _GuiMouseTailCreate() AdlibRegister('_GuiMouseTailMove', $UpdateTime) Sleep(250) _GuiMouseTailShow() EndIf Case $idExit AdlibUnRegister('_GuiMouseTailMove') _ConfigSave() _GuiMouseTailDelete() GUIDelete($hGui) DLLClose($hGdiDll) Exit EndSwitch Else While 1 Switch GUIGetMsg() Case $idCheckTrans $bTrans = Int(_GuiCtrlIsChecked($idCheckTrans)) Case $idCheckMulticolors $bMulticolors = 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 $idButtonStart $sText = StringTrimLeft(GUICtrlRead($idComboSymbol), 2) GUISetState(@SW_HIDE, $hGui) _GuiMouseTailCreate() AdlibRegister('_GuiMouseTailMove', $UpdateTime) Sleep(900) _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) $bMulticolors = 0 EndIf Case $GUI_EVENT_CLOSE AdlibUnRegister('_GuiMouseTailMove') _ConfigSave() _GuiMouseTailDelete() GUIDelete($hGui) DLLClose($hGdiDll) Exit EndSwitch Sleep(10) WEnd EndIf Sleep(10) WEnd #EndRegion --- Main Loop ------------------------------ Func _ConfigLoad() $Color = '0x' & Hex(IniRead($sIniFilePath, 'Config', 'Color', 0xFF0000), 6) $bTrans = Int(IniRead($sIniFilePath, 'Config', 'Tranparency', 1)) $bMulticolors = 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', $bTrans) IniWrite($sIniFilePath, 'Config', 'Multicolors', $bMulticolors) IniWrite($sIniFilePath, 'Config', 'Symbol', Int($iSymbolIndex)) IniWrite($sIniFilePath, 'Config', 'SymbolCount', Int(GUICtrlRead($idComboSymbolCount))) EndFunc ;==> _ConfigSave() Func _GuiCtrlIsChecked($idCtrl) Return BitAND(GUICtrlRead($idCtrl), $GUI_CHECKED)=$GUI_CHECKED EndFunc ;==> _GuiCtrlIsChecked() Func _GuiMain() $hGui = GUICreate(' MouseTail v1.0.0.3 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 $bTrans Then GUICtrlSetState(-1, $GUI_CHECKED) GUICtrlCreateLabel('Allow Tranparency', 55, 67, 140, 20) $idCheckMulticolors = GUICtrlCreateCheckbox( '', 200, 62, 25, 25) If $bMulticolors 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) $idButtonStart = GUICtrlCreateButton('Start', 30, 150, 300, 30, BitOR($BS_DEFPUSHBUTTON,$BS_CENTER)) ; Tray Items TrayCreateItem('MouseTail v1.0.0.3') TrayCreateItem('') $idSettings = TrayCreateItem('Settings') TrayCreateItem('') $idPause = TrayCreateItem('Pause') TrayCreateItem('') $idAbout = TrayCreateItem('About') TrayCreateItem('') $idExit = TrayCreateItem('Exit') TraySetState($TRAY_ICONSTATE_FLASH) EndFunc ;==> _GuiMain() 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] $bTrans = 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 $bTrans 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) 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 $bMulticolors 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) Next EndFunc ;==> _GuiMouseTailMove() Func _GuiMouseTailShow() For $i = 1 To $iCount GuiSetState(@SW_SHOW, $aHWindow[$i]) Next EndFunc ;==> _GuiMouseTailShow() 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() 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()