Gianni Posted January 8, 2023 Posted January 8, 2023 This simple code snippet simulates a writing hand as you type into any input field (hand follows caret) P.S. I don't know what it's for, but I'll post it anyway. .... One possible use would be to draw attention to a message. (such as what I posted here: https://www.autoitscript.com/forum/topic/209396-3202-sraey-wen-yppah/?do=findComment&comment=1510993) Have fun expandcollapse popup#include <GUIConstants.au3> #include <GDIPlus.au3> Global $iWidth = 100, $iHeight = 70, $iPosX = -1, $iPosY = -1, $aCaretPos, $msg Global $iHandMoves = 2, $iAmplitude = 5, $iHideHidleDelay = 1000, $iFlag = True, $iTimer Global Const $hGUI = GUICreate('', $iWidth, $iHeight, $iPosX, $iPosY, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_NOACTIVATE)) Global Const $idLogo = GUICtrlCreatePic("", 0, 0, $iWidth, $iHeight) _GDIPlus_Startup() Global $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(_WritingHand(), True) _WinAPI_DeleteObject(GUICtrlSendMsg($idLogo, $STM_SETIMAGE, $IMAGE_BITMAP, $Bmp_Logo)) $Bmp_Logo = '' _GDIPlus_Shutdown() While True $aCaretPos = _WinGetCaretPos() If @extended Then $iTimer = TimerInit() $iFlag = True If Not @error Then GUISetState(@SW_SHOWNOACTIVATE, $hGUI) _MoveHand($aCaretPos) EndIf EndIf If $iFlag And (TimerDiff($iTimer) > $iHideHidleDelay) Then GUISetState(@SW_HIDE, $hGUI) $iFlag = False EndIf Sleep(250) WEnd Func _MoveHand($aCaretPos) For $i = 1 To $iHandMoves WinMove($hGUI, '', $aCaretPos[0] + Random(-$iAmplitude, $iAmplitude, 1), $aCaretPos[1] + Random(-$iAmplitude, $iAmplitude, 1), Default, Default, 1) Next WinMove($hGUI, '', $aCaretPos[0], $aCaretPos[1]) EndFunc ;==>_MoveHand ; A more reliable method to retrieve the caret coordinates in MDI Func _WinGetCaretPos() Local Static $iXAdjust = -5, $iYAdjust = -5, $aPrevPos[2] = [0, 0] Local $iOpt = Opt("CaretCoordMode", 0) ; Set "CaretCoordMode" to relative mode and store the previous option. Local $aGetCaretPos = WinGetCaretPos() ; Retrieve the relative caret coordinates. Local $aGetPos = WinGetPos("[ACTIVE]") ; Retrieve the position as well as height and width of the active window. Local $sControl = ControlGetFocus("[ACTIVE]") ; Retrieve the control name that has keyboard focus. Local $aControlPos = ControlGetPos("[ACTIVE]", "", $sControl) ; Retrieve the position as well as the size of the control. $iOpt = Opt("CaretCoordMode", $iOpt) ; Reset "CaretCoordMode" to the previous option. Local $aReturn[2] = [0, 0] ; Create an array to store the x, y position. If IsArray($aGetCaretPos) And IsArray($aGetPos) And IsArray($aControlPos) Then $aReturn[0] = $aGetCaretPos[0] + $aGetPos[0] + $aControlPos[0] + $iXAdjust $aReturn[1] = $aGetCaretPos[1] + $aGetPos[1] + $aControlPos[1] + $iYAdjust ; Check if caret has moved If ($aReturn[0] <> $aPrevPos[0]) Or ($aReturn[1] <> $aPrevPos[1]) Then $aPrevPos[0] = $aReturn[0] $aPrevPos[1] = $aReturn[1] SetError(0, 1) ; if caret has moved set @Extended EndIf Return $aReturn ; Return the array Else Return SetError(1, 0, $aReturn) ; Return the array and set @error to 1. EndIf EndFunc ;==>_WinGetCaretPos ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05 Func _WritingHand($bSaveBinary = False, $sSavePath = @ScriptDir) Local $WritingHand $WritingHand &= 'R0lGODlhZABGAHAAACH5BAEAAP8ALAAAAABkAEYAhwAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBVZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDVmQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMrzDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YrAGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaqM2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmAmZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9VM/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q' $WritingHand &= '///VAP/VM//VZv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAAAj/APcJHEiwoMGDCBMqXMiwocOH7doNk/iwosWLGBPSk8iuF7uJE4W5y0iypMl9GyNO7CVsmLlhLImdnElTYcqJ7YS1OycxZ85h9GoKrRkxmcSXPHW6HHZOWFOgQ6NmVLmTl9WeVEMybUmMnj5lxIZJEjNJqtmCPYdZ5VWL18SOEdMOmztM2CRJaNBMQhNDjLKzZjcOY8fLHC9bixbZKrz151xJY8VITiNZjKQYNwBLpTfRnC1btRaFLpR4rVWYYcSEGYMmDRrJNzAzKqt5aMpzvBIvKlRICxUtpCUxwoxDjF7KOMLEWB5ji6TaUidarVWI0G8qVbRs2SJmWCaylMXg/8C8fHuYRYx4QR/qrmpoPzGobFFxg8sNMZnofcexJfaW5tmdx0hijAyzHk0bCQNaISvAsJxkaLBm2TCTKNdcGOfpRppokiyi3oEnhXQYGCvc95oYsT0oCS+S9LJiepLY0iGBHC5iIIgl0eOOYO3wIsZ/MajQlySTCNPLMMpIpJYwvDDJ4i6MRBKljH/heBGRw8yjY09MMoLhjQcRA5daa8UYiS1SfmilQ8qIJ0lXG7UnUVOHKXTUYEtaJYmUu0AG5po2KUNZfu10hZVTTP5Z0FIvvVSXVYtJUkt6gFqk4zwSydljUu0gxNFcHzXlYiTCRcKiopUupI87OK30k6OK9v/oFk8gPWoaepKgmmpCrbbzETtNnTNYWkpGpJNSH/WiJ58rqrmrTU1l9dKdL32Uk6hOgdQOS07qiauuzxLU42LG0uoTS9tea2RH1rZkJIvwerjic+EmNG4ttYCkE1Wf0vkSLz6t1K1VZ56Za70HuaNgLYuhxC9WPbnV5Kx4roUJvCzW0myVCA/UjmGLgXlTXDhtS1ijLeXEkmm87PKknx0TJB3ABSkjGKbtcMbOumpJl6eywjQL6WGYyBSz' $WritingHand &= 'QO1pNA8xWAn7kkdqnZsoyy+7dbRD9GzEWU4AA7yURyuTSTVbK4J7tUFJzslztXX12GOepq2osdVnM4SpdCqr3JGROo3/7XKfetbdEI+gHum2RyozOXCztuxii9mCD7Q1SB85muzABE8nCeB0R65RVkqyuxTVaJrmcpOeK5S2tkqB3a2pHsY+NuSRjyzw22MXfBjnawljdOo1gw7qYMryUnDpxrPspO/Aoz1530zZyjKUpmGOevMEzcOqROi2RGfm6elZ/cRr0X42PfMMHzXfVJ8+sdhUm381Z3O5Vbjiyl/V5Mril4+95FkRGNDI55Z19c4qLhPaMH6Hvcl9in1NChb+xoaxJjEQe0maS08Mtz9EsWRlQWOZqcr2v4I8722J41/+ygS4g5VQIOir1VLY1UECzktPGpub/M7Xqrp80CrdkgT+/xL4pClF4kgvREkGHygxZcHvhhlbkalItcP51eqDimsW/OC1okV0iBG7KE0Vj0Y4vmGRixWU2+bMNCAXltCBMGFfnpzUrHlpbBFQAtwYO5Y1GbYEi5OQWAhZyMZaSMmNDdwa91oisSUN8IZSzI2kDMa8/6EPjvbzISPhxsU8Rik0JMTeMrRnFMp9UJMrU6EUwRglSfZpLs3LWs7k4pie8aIXF8NYHdHES/TocI+AggZnFKktltjSlhibIhg71CdTLRN4WSMl02qlpEYCEV4yIpiMPOnMWBJDe+mTi/3M+C4m1bGIm0uPqSyZPneUklh0sWYQiVi1RZRQGUtrxxLngoQoVPKiSGXq3w1feMksaUuDx2QSS87ZP6sk8ZusgiNMPmLLcgZUfPQi6DySlEF9Hcl+WHTixJbnrHvOMhmsoqYmbZkJq+ASaMpKouRQypm7geRIyUIlI/d3PZkqMWffVGkc4/jDivbCpwPRxzALFU6E1oWfxhQiFpEqOY5mSqjGPKU1AwIAOw==' Local $bString = _WinAPI_Base64Decode($WritingHand) If @error Then Return SetError(1, 0, 0) Return Binary($bString) EndFunc ;==>_WritingHand Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode noellarkin, Dan_555, kurtykurtyboy and 1 other 4 Chimp small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....
taurus905 Posted January 11, 2023 Posted January 11, 2023 @Gianni You write some interesting stuff. And that's why I follow you. taurus905 "Never mistake kindness for weakness."-- Author Unknown --"The highest point to which a weak but experienced mind can rise is detecting the weakness of better men."-- Georg Lichtenberg --Simple Obfuscator (Beta not needed.), Random names for Vars and Funcs
Gianni Posted January 15, 2023 Author Posted January 15, 2023 On 1/11/2023 at 2:56 AM, taurus905 said: @Gianni You write some interesting stuff. And that's why I follow you. taurus905 thanks mate Chimp small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....
kurtykurtyboy Posted March 17, 2023 Posted March 17, 2023 On 1/8/2023 at 1:23 PM, Gianni said: I don't know what it's for, but I'll post it anyway. I don't know either, but I think it's great! Gianni 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now