Jump to content

Recommended Posts

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

#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

 

 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Link to post
Share on other sites

@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

Link to post
Share on other sites
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 :)

 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...