Что нового

Клики мыши в случайном порядке

Nissa

Новичок
Сообщения
5
Репутация
0
Имеется функция, состоящая из нескольких кликов мыши в различные точки экрана. Как можно сделать, чтобы эти клики происходили не по очереди, а в случайном порядке? Если можно подскажите на примере.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
чтобы эти клики происходили не по очереди, а в случайном порядке?
Как это в случайном порядке? Не очень понятно.
Может быть по времени (5 сек, 3 сек, 4 сек, 2 сек, 6 сек, 5...) Или нет??
 
Автор
N

Nissa

Новичок
Сообщения
5
Репутация
0
Нет. Чтобы шел не первый клик, потом второй, потом третий. А рандомно.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я всё равно не понимаю :D :smile:
 
Автор
N

Nissa

Новичок
Сообщения
5
Репутация
0
Это я наверное не по-русски объясняю)) В общем, в функции несколько действий. И мне надо, чтобы они шли не в том порядке, в котором указаны, а в произвольном. Думаю, что это надо делать с помощью Random, но не могу сообразить как.
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Я бы так сделал
Код:
HotKeySet("{Esc}", "_Exit")
HotKeySet("q", "_StartClick")

Global $aCoords[3][2] ; 3 clicks
;1st 40,50
$aCoords[0][0] = 100
$aCoords[0][1] = 150

;2nd 100,150
$aCoords[1][0] = 200
$aCoords[1][1] = 250

;3rd 300,500
$aCoords[2][0] = 300
$aCoords[2][1] = 350

While 1
	Sleep(1000)
WEnd

Func _StartClick()
	_ArrayRandomize($aCoords)
	For $i = 0 To UBound($aCoords) - 1
		MouseMove($aCoords[$i][0], $aCoords[$i][1])
		ConsoleWrite('Click'&$i+1 &": "&$aCoords[$i][0] &":"&$aCoords[$i][1]&@CRLF)
	Next
	ConsoleWrite('->' & @CRLF)
EndFunc

; #FUNCTION# ====================================================================================================================
; Name...........: _ArrayRandomize
; Description ...: Randomize the row order of (part of) a 1D or 2D array.
; Syntax.........: _ArrayRandomize(ByRef $avArray, $iStart = 0, $iEnd = 0)
; Parameters ....: $avArray     - Array to randomize
;                  $iStart      - [optional] Index of array to start at
;                  $iEnd        - [optional] Index of array to stop at
; Return values .: Success - 1
;                  Failure - 0, sets @error:
;                  |1 - $avArray is not an array
;                  |2 - $iStart is greater than $iEnd
; Author ........: Tom Vernooij
; Modified.......:
; Remarks .......: Based on Yashied's method
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================

Func _ArrayRandomize(ByRef $avArray, $iStart = 0, $iEnd = 0)
	If Not IsArray($avArray) Then Return SetError(1, 0, 0)
	
	Local $iRow, $iCol, $rRow, $Temp, $numCols = UBound($avArray, 2), $Ubound = UBound($avArray) - 1
	
	; Bounds checking
	If $iEnd < 1 Or $iEnd > $UBound Then $iEnd = $UBound
	If $iStart < 0 Then $iStart = 0
	If $iStart > $iEnd Then Return SetError(2, 0, 0)
	
	;	for 2 dimentional arrays:
	If $numCols Then
		For $iRow = $iStart To $iEnd ;for each row...
			$rRow = Random($iStart, $iEnd, 1) ;...select a random row
			For $iCol = 0 To $numCols - 1 ;swich the values for each cell in the rows
				$Temp = $avArray[$iRow][$iCol]
				$avArray[$iRow][$iCol] = $avArray[$rRow][$iCol]
				$avArray[$rRow][$iCol] = $Temp
			Next
		Next
		
		;	for 1 dimentional arrays:
	Else
		For $iRow = $iStart To $iEnd ;for each cell...
			$rRow = Random($iStart, $iEnd, 1) ;...select a random cell
			$Temp = $avArray[$iRow] ;switch the values in the cells
			$avArray[$iRow] = $avArray[$rRow]
			$avArray[$rRow] = $Temp
		Next
	EndIf
	Return 1
EndFunc ;==>_ArrayRandomize

Func _Exit()
	Exit
EndFunc
 

inx

Знающий
Сообщения
43
Репутация
12
Я так понимаю требуется что-то простое вроде:
(вызов функций заменен на MsgBox для наглядности)

Код:
clicking()
Func clicking()
	For $i = 0 To 10
	Switch Random( 1, 5, 1)
		Case 1
			MsgBox("Title", "Кликаем в 1", 10)
		Case 2
			MsgBox("Title", "Кликаем в 2", 20)
		Case 3
			MsgBox("Title", "Кликаем в 3", 30)
		Case 4
			MsgBox("Title", "Кликаем в 4", 40)
		Case 5
			MsgBox("Title", "Кликаем в 5", 50)
	EndSwitch
	Next
EndFunc


Или так:

Код:
RandomClick()

Func RandomClick()
	For $i = 0 To 10
		Local $s = Random( 1, 4, 1)
		Local $func = "clicking_" & $s
		Call($func)
	Next
EndFunc

Func clicking_1()
	MsgBox("Title", "Кликаем в 1", 10)
EndFunc

Func clicking_2()
	MsgBox("Title", "Кликаем в 2", 20)
EndFunc

Func clicking_3()
	MsgBox("Title", "Кликаем в 3", 30)
EndFunc

Func clicking_4()
	MsgBox("Title", "Кликаем в 4", 40)
EndFunc
 
Автор
N

Nissa

Новичок
Сообщения
5
Репутация
0
Всем большое спасибо за помощь! Получилось)
 
Верх