increasemousespeed Posted April 9, 2012 Posted April 9, 2012 (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? expandcollapse popup#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 April 9, 2012 by Jos added code tags
water Posted April 9, 2012 Posted April 9, 2012 (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 April 9, 2012 by water My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
increasemousespeed Posted April 9, 2012 Author Posted April 9, 2012 (edited) Thanks man! I thought 100 was the fastest... Edited April 9, 2012 by increasemousespeed
Newb Posted April 9, 2012 Posted April 9, 2012 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.
water Posted April 9, 2012 Posted April 9, 2012 My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
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