Snarg

Random clicks in a box

9 posts in this topic

#1 ·  Posted (edited)

Hello,

 

I am attempting to build a script that will click randomly inside of a box. The box dimensions, number of clicks, and the delay between the clicks is passed to a function. I feel a am very close to finishing this script, but could use a bit of help.

 

I am passing the function four different boxes, two of them to be clicked 18 times, one of them twice and one of them three times. This is repeated four times. The problem I am having is with the first box. It only clicks that box 17 times. It then completes the next three boxes. Once the last box is complete, it does the last click on the first box.

 

I have worked this problem for the past two days now and can not see where I have gone wrong. Any help anyone would be able to provide with this issue would be greatly appreciated. Thank you for your time. The code is below:

 

Opt ("MouseCoordMode", 2)
Opt ("MouseClickDelay", 0)

HotKeySet ("{ESC}", "Terminate")
HotKeySet ("+{F9}", "SelectBox")

While 1
   Sleep (100)
WEnd

Func SelectBox ()

   ;Stuff happens here
      ClickBox ()
   ;Stuff happens here

EndFunc   ;==>SelectBox

Func ClickBox ()

   _MouseClick (431, 271, 477, 311, 18, 50, 100) ;Cick 18 times

   _MouseClick (317, 272, 385, 306, 18, 50, 100) ;Cick 18 times

   _MouseClick (683, 267, 749, 306, 2, 50, 100) ;Cick 2 times

   _MouseClick (504, 267, 568, 306, 3, 50, 100) ;Cick 3 times

EndFunc   ;==>ClickBox

;$tlx - top left x
;$tly - top left y
;$blx - bottom right x
;$bly - bottom right y
;Numclicks - number of clicks
;$sl1 - sleep low delay
;$sl2 - sleep high delay
Func _MouseClick ($tlx, $tly, $brx, $bry, $Numclicks, $sl1, $sl2)
   Dim $box[4] = [$tlx, $tly, $brx, $bry]
   For $Count = 1 to $Numclicks
      MouseMove(Random($box[0], $box[2]), Random($box[1], $box[3]), 0)
      MouseClick ("left")
      _Sleep ($sl1, $sl2)
   Next
EndFunc ;==>_MouseClick

Func _Sleep ($min, $max)
   Sleep (Random ($min, $max, 1))
EndFunc ;==>_Sleep

Func Terminate()
   Exit
EndFunc   ;==>Terminate

 

Edited by Snarg

A little reading goes a long way. Post count means nothing.

Share this post


Link to post
Share on other sites



Does not look like there is anything wrong.

what is output?

Func _MouseClick ($tlx, $tly, $brx, $bry, $Numclicks, $sl1, $sl2)
   Dim $box[4] = [$tlx, $tly, $brx, $bry]
   ConsoleWrite("Clicking " & $Numclicks & " times" & @LF)
   For $Count = 1 to $Numclicks
      MouseMove(Random($box[0], $box[2]), Random($box[1], $box[3]), 0)
      MouseClick ("left")
      ConsoleWrite($Count & " ")
      _Sleep ($sl1, $sl2)
   Next
   ConsoleWrite(@LF)
EndFunc ;==>_MouseClick

 


AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Share this post


Link to post
Share on other sites

Thank you JohnOne for trying to help. For whatever reason the console window does not open when the script runs. I must be doing something wrong.


A little reading goes a long way. Post count means nothing.

Share this post


Link to post
Share on other sites

JohnOne means the Sciteconsole. F8 toggle status of the Sciteconsole Show<=>Hide. 

18 minutes ago, Snarg said:

I must be doing something wrong.

Show complete script.

Share this post


Link to post
Share on other sites

AutoBert, thank you for the reply. I have opened the console window in Scite, but don't really understand how to pipe the output to that.

 

That pretty much is the full script. I'm trying to get that section to work before I do anything else with it.


A little reading goes a long way. Post count means nothing.

Share this post


Link to post
Share on other sites

Here is the output:

 

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Clicking 2 times
1 2

Clicking 3 times
1 2 3

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Clicking 2 times
1 2
Clicking 3 times
1 2 3

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Clicking 2 times
1 2
Clicking 3 times
1 2 3

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Clicking 18 times
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Clicking 2 times
1 2
Clicking 3 times
1 2 3


A little reading goes a long way. Post count means nothing.

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

It's clicking the correct number of times. How would I go about getting it to display the coordinates it is clicking?

Edited by Snarg

A little reading goes a long way. Post count means nothing.

Share this post


Link to post
Share on other sites
Func _MouseClick ($tlx, $tly, $brx, $bry, $Numclicks, $sl1, $sl2)
   Dim $box[4] = [$tlx, $tly, $brx, $bry]
   ConsoleWrite("Clicking " & $Numclicks & " times" & @LF)
   For $Count = 1 to $Numclicks
      $RandomMousePosX = Random($box[0], $box[2])
      $RandomMousePosY = Random($box[1], $box[3])
      MouseMove($RandomMousePosX, $RandomMousePosY, 0)
      MouseClick ("left")
      ConsoleWrite("Click number: " & $Count & " | Mouse PosX: " & $RandomMousePosX & " | Mouse PosY: " & $RandomMousePosY & @CRLF)
      _Sleep ($sl1, $sl2)
   Next
   ConsoleWrite(@LF)
EndFunc ;==>_MouseClick

Not tested. Why not MouseClick("left", $RandomMousePosX, $RandomMousePosY, 1, 0)?

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

  • Similar Content

    • JustinZandee
      By JustinZandee
      I need a random string generator which creates 15 letters/numbers.
      How can I make that?
    • Anas
      By Anas
      Hi,
      I've this script (removed unrelated parts) that generate a set of random chars for a password. It gets launched from a network share by Task Scheduler at a specific time for all PC's, then it relaunches itself from the local drive.
       
      Global $LocalToolsDir = @ProgramFilesDir & '\Tools' Start() Func Start() If Not StringInStr(@ScriptFullPath, $LocalToolsDir, 2) Then Exit RunLocaly() Sleep(Random(1, 1800, 1) * 1000) $NewPass = GeneratePass() EndFunc Func GeneratePass() Local $Pass For $i = 1 to 8 $R = Random(0,1.5) If $R > 1 Then $Chr = Random(0,9,1) ElseIf $R < 0.5 Then $Chr = Chr(Random(Asc("A"), Asc("Z"), 1)) Else $Chr = Chr(Random(Asc("a"), Asc("z"), 1)) Endif $Pass &= $Chr Next Return $Pass EndFunc Func RunLocaly() Local $Run = 1, $LocalApp = $LocalToolsDir & '\' & @ScriptName If Not FileExists($LocalApp) Then $Run = FileCopy(@ScriptFullPath, $LocalToolsDir, 1 + 8) If $Run Then Run($LocalApp, $LocalToolsDir) EndFunc  
      The problem is that many PC's ends up with the same password(s).
      e.g. 10 PC's have (abc123) as a Password, and another 10 have this (def456)
      Any idea why?
    • Dequality
      By Dequality
      Got a simple question is it possible to have lets say 10 functions and use the random function to randomly pick one of them? If so could anyone please make a tiny example?
       
      Tyvm in advance 
      -Dequality
    • CarlD
      By CarlD
      I'm a command-line kind of guy, and I write scripts primarily for myself.  Since many websites nowadays require strong passwords, I thought I'd write a simple password generator in AutoIt. I know that AutoIt mavens have written more elaborate pw generators; I offer mine for what it's worth. The compiled script, GenPass.exe, can be downloaded here. See below for Help text and source. Enjoy!
      Updates:
      2017-05-06: Default password changed to variable length of 13-22 characters; argument "1" no longer supported
                            When compiled as GenPW.exe, password is sent directly to the clipboard, no message box unless password generation fails.
      2017-05-05: Correction to bypass password generation if argument is ?|H|h
      2017-05-03: Added special argument 1 to generate a password of variable length (10-18 characters) including two (2) separator characters
      2017-05-02: Added option /S to set a (persistent) randomization seed
      Help:
      GenPass.exe|GenPW.exe -- CLD rev. 2017-05-06
      Generate a strong password and save it to the Windows clipboard
      Note: GenPW.exe has the same functionality as GenPass.exe, but
            sends the generated password directly to the clipboard.
            No message box is displayed (unless password generation fails).
        
      "Strong" means that the password contains random combinations of
      alphnumeric characters, including at least one uppercase letter
      (A-N,P-Z), one lowercase letter (a-k,m-z), and one number (0-9).
      (Generated passwords do not use uppercase O or lowercase l as
      these characters are easily confused with the numbers 0 and 1.)
      The length of the password is up to you (see Usage, below),
      but needless to say, the longer, the stronger.
      By default, GenPass generates a strong password of between 13
      and 22 characters that includes two of the following separator
      characters: $%&()*+,-./:;@[]_. Alternatively, you can supply a
      command-line argument in which any number n from 1 to 9 stands
      for a random sequence of alphanumeric characters of length
      n, and any other character stands for itself. Thus, you can
      include fixed words and other characters, such as separators,
      in the generated password. Spaces in the argument are converted
      to underscores. Here are some examples:
      Usage             Sample output
      -----             -------------
      GenPass           MqU26A*6dS-53r8
      GenPass 9         frdhPYDs9
      GenPass 58        weoXYHKxDI1uQ
      GenPass 5.5       UfA6j.43VBB
      GenPass 3-4-3     0I0-6gq4-njc
      GenPass 5,3.7     I2FSR,tRZ.fjeIsFy
      GenPass 3)5(3     UMf)m8513(CBq
      GenPass 3[haha]3  yLa[haha]P3y
      GenPass Yes way5  Yes_way1BsUh
      Seed Option (/S)
      ----------------
      Adding switch /S to the command-line argument causes GenPass to
      set a seed for the random generation of password characters. A
      bare /S sets a randomized seed which is written to disk in a file
      named GenPass.rnd; this seed is used for all subsequent launches
      of GenPass with the bare /S option. Alternatively, you can specify
      a seed (range -2^31 to 2^31-1) on the command line with /S [seed].
      Here are some examples:
      GenPass /S
      GenPass /S 33.3333
      GenPass 5,5,5 /S
      GenPass 5,5,5 /S 33.3333
      Note that any subsequent launch of GenPass without the /S option
      will cause GenPass.rnd to be deleted.
      Source:
      #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile=GenPass.exe #AutoIt3Wrapper_UseUpx=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #cs GENPASS.AU3 -- AutoIt v3 CLD rev.2017-05-05 ------------------ Generate a strong password and save it to the clipboard >> Command GenPass ? for detailed help << ------------------------------------------------------- #ce #include <Clipboard.au3> #include <FileConstants.au3> #include <MsgBoxConstants.au3> #include <StringConstants.au3> AutoItSetOption("WinTitleMatchMode", -4) FileInstall ("d:\path\GenPass.htm", @ScriptDir & "\GenPass.htm", $FC_OVERWRITE) ; Template/Seed Local $sTemp = "" Local $bSeed = False, $fSeed=False If $CmdLine[0] Then $sTemp = $CmdLineRaw If $CmdLine[$CmdLine[0]] = "/s" Then $bSeed = True $sTemp = StringTrimRight($sTemp, 2) $sTemp = StringStripWS($sTemp, $STR_STRIPTRAILING) EndIf If $CmdLine[$CmdLine[0] - 1] = "/s" Then $bSeed = True $fSeed = $CmdLine[$CmdLine[0]] $sTemp = StringTrimRight($sTemp, 3 + StringLen($fSeed)) $sTemp = StringStripWS($sTemp, $STR_STRIPTRAILING) EndIf EndIf If Not $sTemp Then $sTemp = "8" If $sTemp = "1" Then $aSeps = StringSplit("#$%&()*+,-./:;@[]_", "") $sTemp = String(Random(3,6,1)) & $aSeps[Random(1,$aSeps[0],1)] & _ String(Random(2,4,1)) & $aSeps[Random(1,$aSeps[0],1)] & _ String(Random(3,6,1)) EndIf $sFn = @ScriptDir&"\GenPass.rnd" If $bSeed Then If Not $fSeed Then If Not FileExists($sFn) Then $fSeed = Random(-1.999^31,1.999^31,0) $h=FileOpen($sFn,2) If $h > -1 Then FileWrite($h,$fSeed) FileClose($h) Else Exit MsgBox($MB_ICONWARNING, @ScriptName, "Error opening " & $sFn) EndIf Else $h=FileOpen($sFn) If $h > -1 Then $fSeed=FileRead($h) FileClose($h) Else Exit MsgBox($MB_ICONWARNING, @ScriptName, "Error opening " & $sFn) EndIf EndIf EndIf SRandom($fSeed) Else If FileExists($sFn) Then FileDelete($sFn) EndIf ; Show help If StringInStr("?Hh", $sTemp) Then If WinExists("[REGEXPTITLE:GenPass.exe:.*]") Then WinActivate("[REGEXPTITLE:GenPass.exe:.*]") Else ShellExecute(@ScriptDir & "\GenPass.htm") EndIf Exit EndIf ; Main $sTemp = StringReplace($sTemp, " ", "_") $iC = 1 While $iC < 10001 $sPW = GenPW($sTemp) If $sPW Then ClipPut($sPW) If Not StringInStr (@ScriptName, "GenPW") Then _ MsgBox($MB_ICONINFORMATION, @ScriptName, $sPW & _ " saved to clipboard" & @CRLF & @CRLF & _ @ScriptName & " ? shows detailed help") Exit Else $iC += 1 EndIf WEnd Exit MsgBox($MB_ICONWARNING, @ScriptName, "Password generation failed!") ;------------------------------- Func GenPw($sTemplate) Local $aIn = StringSplit($sTemplate,"") Local $sOut = "" Local $sABC = _ "0123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz0123456789" Local $aAB = StringSplit($sABC, "") Local $bUC = 0, $bLC = 0, $bNR = 0 For $i = 1 To $aIn[0] If Int($aIn[$i]) Then $iK = $aIn[$i] For $j = 1 To $iK $iR = Random(1, $aAB[0],1) Select Case StringInStr("0123456789", $aAB[$iR]) $bNR = 1 Case StringInStr("ABCDEFGHIJKLMNPQRSTUVWXYZ", _ $aAB[$iR], $STR_CASESENSE) $bUC = 1 Case StringInStr("abcdefghijklmnpqrstuvwxyz", _ $aAB[$iR], $STR_CASESENSE) $bLC = 1 EndSelect $sOut &= $aAB[$iR] Next Else $sOut &= $aIn[$i] EndIf Next If ($bUC And $bLC And $bNR) Then Return $sOut Else Return 0 EndIf EndFunc  
    • hcI
      By hcI
      Hello everyone !
      I've made a little function who return random characters for everyone who would need it.. It's my first function so please have some mercy.
      And if you have some suggestions.. don't hesitate !
      and I made a AutoIt HelpFile that looks like others helpfiles, I hope you'll enjoy !
      The function :  RandomLetter.au3
      The helpfile : RandomLetter.html  (in HTML please !)
      Et pour les anglophobes, voilà l'aide en français : RandomLetter.fr.html (French version of the helpfile)
      Thanks, hcI