Sign in to follow this  
Followers 0
increasemousespeed

HELP ME INCREASE THE MOUSE SPEED PLEASE!!

5 posts in this topic

#1 ·  Posted (edited)

Okay, so I stumbled upon this drawing script... it's a great script. However, it draws EXTREMELY slow! Where on the script can I change the mouse speed?

#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <Color.au3>
#include <WinAPI.au3>

Global $threshold
Global $image
Global $width
Global $height
Global $pixels
Global $pathString = "12345678"
Global $scramble = False
Global $rotate = 0
Global $speed


;; Check hotkeys ;;
If (Not HotKeySet ("{F9}", "Nothing")) Then
    MsgBox (16, "Error", "Could not register the F9 hotkey.")
    Exit
EndIf
If (Not HotKeySet ("{F10}", "Nothing")) Then
    MsgBox (16, "Erro", "Could not register the F10 hotkey.")
    Exit
EndIf


;; Image dialog ;;
$imageFile = FileOpenDialog ("Open image", @WorkingDir, "Images (*.jpg;*.jpeg;*.gif;*.png;*.bmp)", 1)
If (@error) Then Exit


;; Options dialog ;;
$optGUI = GUICreate ("Settings", 160, 270, -1, -1, $WS_CAPTION, BitOr ($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW))
GUICtrlCreateGroup ("Image processing", 5, 5, 150, 85)
GUICtrlCreateLabel ("Sensitivity (0~255):", 10, 28, 110, 15)
$thresholdInput = GUICtrlCreateInput ("100", 125, 25, 25, 20, $ES_NUMBER)
GUICtrlCreateLabel ("Width (px):", 10, 48, 110, 15)
$widthInput = GUICtrlCreateInput ("100", 125, 45, 25, 20, $ES_NUMBER)
GUICtrlCreateLabel ("Height (px):", 10, 68, 110, 15)
$heightInput = GUICtrlCreateInput ("100", 125, 65, 25, 20, $ES_NUMBER)
GUICtrlCreateGroup ("Drawing pattern", 5, 95, 150, 140)
$horizontalRadio = GUICtrlCreateRadio ("Horizontal", 10, 115, 110, 15)
$verticalRadio = GUICtrlCreateRadio ("Vertical", 10, 135, 110, 15)
$diagonalRadio = GUICtrlCreateRadio ("Diagonal", 10, 155, 110, 15)
$rotateRadio = GUICtrlCreateRadio ("Spiral", 10, 175, 110, 15)
$scrambleRadio = GUICtrlCreateRadio ("Random", 10, 195, 110, 15)
GUICtrlSetState ($diagonalRadio, $GUI_CHECKED)
GUICtrlCreateLabel ("Mouse speed (0~100):", 10, 213, 110, 15)
$speedInput = GUICtrlCreateInput ("0", 125, 210, 25, 20, $ES_NUMBER)
$okBtn = GUICtrlCreateButton ("Ok", 30, 245, 40, 20)
$cancelBtn = GUICtrlCreateButton ("Cancel", 80, 245, 50, 20)
GUISetState ()

While 1
    Switch (GUIGetMsg ())
        Case $GUI_EVENT_CLOSE
            Exit
        Case $cancelBtn
            Exit
        Case $okBtn
            $threshold = GUICtrlRead ($thresholdInput)
            $width = GUICtrlRead ($widthInput)
            $height = GUICtrlRead ($heightInput)
            $speed = GUICtrlRead ($speedInput)
            If  (GUICtrlRead ($horizontalRadio) == $GUI_CHECKED) Then
                $pathString = "45273618"
            ElseIf (GUICtrlRead ($verticalRadio) == $GUI_CHECKED) Then
                $pathString = "27453618"
            ElseIf (GUICtrlRead ($diagonalRadio) == $GUI_CHECKED) Then
                $pathString = "36184527"
            ElseIf (GUICtrlRead ($rotateRadio) == $GUI_CHECKED) Then
                $pathString = "14678532"
                $rotate = 1
            ElseIf (GUICtrlRead ($scrambleRadio) == $GUI_CHECKED) Then
                $scramble = True
            EndIf

            GUIDelete ($optGUI)
            ExitLoop
    EndSwitch
WEnd


;; Processing dialog ;;
$GUI = GUICreate ("Processing image...", $width, $height + 20, -1, -1, $WS_CAPTION, BitOr ($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW))
GUISetBkColor (0xffffff)
$imageBox = GUICtrlCreatePic ($imageFile, 0, 0, $width, $height)
$progress = GUICtrlCreateProgress (0, $height, $width, 20)
GUISetState ()

;; Get image pixels ;;
$dc = _WinAPI_GetDC ($GUI)
$memDc = _WinAPI_CreateCompatibleDC ($dc)
$bitmap = _WinAPI_CreateCompatibleBitmap ($dc, $width, $height)
_WinAPI_SelectObject ($memDc, $bitmap)
_WinAPI_BitBlt ($memDc, 0, 0, $width, $height, $dc, 0, 0, $SRCCOPY)
$bits = DllStructCreate ("dword[" & ($width * $height) & "]")
DllCall ("gdi32", "int", "GetBitmapBits", "ptr", $bitmap, "int", ($width * $height * 4), "ptr", DllStructGetPtr ($bits))
GUICtrlDelete ($imageBox)

;; Process the pixels ;;
Dim $pixels[$width][$height]
For $y = 0 To ($height - 1)
    For $x = 0 To ($width - 1)
        $index = ($y * $width) + $x
        $color = DllStructGetData ($bits, 1, $index)

        $red = _ColorGetBlue ($color)
        $green = _ColorGetGreen ($color)
        $blue = _ColorGetRed ($color)
        $shade = ($red + $green + $blue) / 3
        If ($shade > $threshold) Then
            $color = 0xffffff
            $pixels[$x][$y] = 0
        Else
            $color = 0
            $pixels[$x][$y] = 1
        EndIf

        DllStructSetData ($bits, 1, $color, $index)
    Next

    DllCall ("gdi32", "int", "SetBitmapBits", "ptr", $bitmap, "int", ($width * $height * 4), "ptr", DllStructGetPtr ($bits))
    _WinAPI_BitBlt ($dc, 0, 0, $width, $height, $memDc, 0, 0, $SRCCOPY)
    GUICtrlSetData ($progress, ($y * 100) / $height)
Next

_WinAPI_ReleaseDC ($GUI, $dc)
GUIRegisterMsg ($WM_PAINT, "OnPaint")


;; Ready to draw ;;
TrayTip ("Pronto!", "Press F9 para draw. You can press F10 anytime to exit.", 10)
HotKeySet ("{F9}", "Draw")
HotKeySet ("{F10}", "Quit")

While 1
    Sleep (60000)
WEnd


Func OnPaint ($hwndGUI, $msgID, $wParam, $lParam)
    Local $paintStruct = DllStructCreate ("hwnd hdc;int fErase;dword rcPaint[4];int fRestore;int fIncUpdate;byte rgbReserved[32]")

    $dc = DllCall ("user32", "hwnd", "BeginPaint", "hwnd", $hwndGUI, "ptr", DllStructGetPtr ($paintStruct))
    $dc = $dc[0]

    _WinAPI_BitBlt ($dc, 0, 0, $width, $height, $memDc, 0, 0, $SRCCOPY)

    DllCall ("user32", "hwnd", "EndPaint", "hwnd", $hwndGUI, "ptr", DllStructGetPtr ($paintStruct))
    Return $GUI_RUNDEFMSG
EndFunc


Func Draw ()
    $mouseCenter = MouseGetPos ()
    $x0 = $mouseCenter[0] - ($width / 2)
    $y0 = $mouseCenter[1] - ($height / 2)

    ;; Move the mouse around the drawing perimeter ;;
    MouseMove ($x0, $y0)
    MouseMove ($x0 + $width, $y0)
    MouseMove ($x0 + $width, $y0 + $height)
    MouseMove ($x0, $y0 + $height)
    MouseMove ($x0, $y0)

    ;; Draw all the areas ;;
    $stack = CreateStack (1000)
    For $y = 0 To ($height - 1)
        For $x = 0 To ($width - 1)
            If ($pixels[$x][$y] == 1) Then
                MouseMove ($x + $x0, $y + $y0, $speed)
                MouseDown ("primary")
                DrawArea ($stack, $x, $y, $x0, $y0)
                MouseUp ("primary")
            Else
            EndIf
        Next
    Next

    ;; Reset the pixels statuses ;;
    For $y = 0 To ($height - 1) Step 1
        For $x = 0 To ($width - 1) Step 1
            If ($pixels[$x][$y] == 2) Then
                $pixels[$x][$y] = 1
            EndIf
        Next
    Next
EndFunc


Func DrawArea (ByRef $stack, $x, $y, $x0, $y0)
    Local $path[8]
    Local $continue

    $path = MakePath ($pathString)

    While 1
        MouseMove ($x + $x0, $y + $y0, $speed)
        $pixels[$x][$y] = 2

        If ($scramble) Then ScramblePath ($path)
        If ($rotate > 0) Then RotatePath ($path, $rotate)

        ;;;;;;;;;;;;;;;;;;;
        ;; +---+---+---+ ;;
        ;; | 1 | 2 | 3 | ;;
        ;; +---+---+---+ ;;
        ;; | 4 |   | 5 | ;;
        ;; +---+---+---+ ;;
        ;; | 6 | 7 | 8 | ;;
        ;; +---+---+---+ ;;
        ;;;;;;;;;;;;;;;;;;;

        $continue = False
        For $i = 0 To 7
            Switch ($path[$i])
                Case 1
                    If (($x > 0) And ($y > 0)) Then
                        If ($pixels[$x - 1][$y - 1] == 1) Then
                            Push ($stack, $x, $y)
                            $x -= 1
                            $y -= 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf

                Case 2
                    If ($y > 0) Then
                        If ($pixels[$x][$y - 1] == 1) Then
                            Push ($stack, $x, $y)
                            $y -= 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf

                Case 3
                    If (($x > 0) And ($y < 0)) Then
                        If ($pixels[$x + 1][$y - 1] == 1) Then
                            Push ($stack, $x, $y)
                            $x += 1
                            $y -= 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf

                Case 4
                    If ($x > 0) Then
                        If ($pixels[$x - 1][$y] == 1) Then
                            Push ($stack, $x, $y)
                            $x -= 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf

                Case 5
                    If ($x < ($width - 1)) Then
                        If ($pixels[$x + 1][$y] == 1) Then
                            Push ($stack, $x, $y)
                            $x += 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf

                Case 6
                    If (($x < 0) And ($y > 0)) Then
                        If ($pixels[$x - 1][$y + 1] == 1) Then
                            Push ($stack, $x, $y)
                            $x -= 1
                            $y += 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf

                Case 7
                    If ($y < ($height - 1)) Then
                        If ($pixels[$x][$y + 1] == 1) Then
                            Push ($stack, $x, $y)
                            $y += 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf

                Case 8
                    If (($x < ($width - 1)) And ($y < ($height - 1))) Then
                        If ($pixels[$x + 1][$y + 1] == 1) Then
                            Push ($stack, $x, $y)
                            $x += 1
                            $y += 1
                            $continue = True
                            ExitLoop
                        EndIf
                    EndIf
            EndSwitch
        Next
        If ($continue) Then ContinueLoop

        If (Not Pop ($stack, $x, $y)) Then ExitLoop
    WEnd
EndFunc



Func MakePath ($string)
    Return StringSplit ($string, "")
EndFunc


Func ScramblePath (ByRef $path)
    Local $table = "12345678"
    Local $newPath[8]

    For $i = 8 To 1 Step -1
        $next = StringMid ($table, Random (1, $i, 1), 1)
        $newPath[$i - 1] = Number ($next)
        $table = StringReplace ($table, $next, "")
    Next

    $path = $newPath
EndFunc


Func RotatePath (Byref $path, $places)
    If ($places == 0) Then
        Return $path
    Else
        For $i = 1 To Abs ($places)
            $temp = $path[7]
            $path[7] = $path[6]
            $path[6] = $path[5]
            $path[5] = $path[4]
            $path[4] = $path[3]
            $path[3] = $path[2]
            $path[2] = $path[1]
            $path[1] = $path[0]
            $path[0] = $temp
        Next
    EndIf
EndFunc



Func CreateStack ($size)
    Dim $stack[$size + 1][2]
    $stack[0][0] = 0
    $stack[0][1] = $size
    Return $stack
EndFunc


Func Push (ByRef $stack, $x, $y)
    $stack[0][0] += 1
    If ($stack[0][0] > $stack[0][1]) Then
        $stack[0][1] += 1000
        ReDim $stack[$stack[0][1] + 1][2]
    EndIf

    $stack[$stack[0][0]][0] = $x
    $stack[$stack[0][0]][1] = $y
EndFunc


Func Pop (ByRef $stack, ByRef $x, ByRef $y)
    If ($stack[0][0] < 1) Then
        Return False
    EndIf

    $x = $stack[$stack[0][0]][0]
    $y = $stack[$stack[0][0]][1]

    $stack[0][0] -= 1
    Return True
EndFunc


Func Nothing ()
EndFunc

Func Quit ()
    MouseUp ("primary")
    Exit
EndFunc
Edited by Jos
added code tags

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

It looks like you enter the mouse speed in your GUI. But you don't use it on all MouseMove statements.

I don't know the values you use for mouse speed but 1 is fastest and 100 is slowest (default = 10)

BTW: Please use [autoit][/autoit] tags to enclose code.

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Thanks man!

I thought 100 was the fastest...

Edited by increasemousespeed

Share this post


Link to post
Share on other sites

lol look at the nickname


I'm a compulsive poster. When I post something, come to read it at least 5 minutes later after the posting, because I will edit it. I edited even this signature a few minutes later after I wrote it.

Share this post


Link to post
Share on other sites
;)

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


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
Sign in to follow this  
Followers 0