Что нового

Cлучайный выбор с фиксированным шагом в функции Send

dr.room

Новичок
Сообщения
283
Репутация
0
Всем дорого времени суток
Не подскажете как можно объединить функции Send и Random в примере
Код:
Send("^{TAB 24}")

с некоторыми дополнениями
  • диапазон: от 21 к 30
  • и шаг +3
Примерный конечный вариант:
Код:
Send("^{TAB 24}")
Send("^{TAB 30}")
Send("^{TAB 27}")
Send("^{TAB 21}")


Спасибо
Ps
Этот Send - находится в цикле, может лучше присвоить 4-ём переменным значения Send и случайным образом выбирать эти переменные ? :stars: Совсем запутался...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Garrett сказал(а):

Я опирался в своём предположении что шаг (Step) возможен исходя из примера из справки о циклах
Код:
For $i = 5 To 1 Step -1
    MsgBox(4096, "Тик так!", $i)
Next
MsgBox(4096, "", "Ба-бах!!")
Для меня это:
- предполагаемая возможность ограничить простой перебор от 21 до 30 т.е. нажатие не 9 раз а только 3 раза. т.е.
21+3, 24+3, 27 + 3
Но у меня не выходит
И еще как сделать, чтобы случайный выбор был только 1 раз - а потом, с прохождением цикла повторно еще раз... и так далее, пока не завершится цикл.
Спасибо
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
Run("notepad.exe")

$hWnd = WinWait("[CLASS:Notepad]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf

For $i = 1 To 9 Step 3
	$N = Random(21, 30, 1)
	MsgBox(4096, "Random!", $N)
	Send("^{TAB "& $N &"}")
	MsgBox(4096, "Тик так!", $i)
Next

MsgBox(4096, "", "Ба-бах!!")
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Garrett
Cпасибо за помощь.
Я только вчера познакомился с циклами, поэтому не мог даже точно сформулировать условия задачи.
Вот вариант, после внесения правок
Код:
MsgBox(64,"Сообщение","Старт проходов ")
For $i = 1 To 5 ;Цель цикла открыть 5 раз notepad - единственно что нужно изменить в нём - это значение TAB
	Run("notepad.exe")
$hWnd = WinWait("[CLASS:Notepad]", "", 5)

If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf
		$Send = Random(21+3,30+3); цель отправить  notepad.exe 1 раз (!):  Send("+{TAB* ")  ,где * диапазон от 21 до 30.Но есть еще условие
; Задача  выбирать не  любую цифру из диапазона (21-30) а  одну: или 21+3 или 24+3 или 27+3 и т.д. т.е.  только 1 раз выбрать за 1 цикл
		Send("+{TAB "& $Send &"}")	;На текущий момент - Send отправляется много раз кряду за каждым циклом: это просто прототип :)

MsgBox(4096, "Счетчик", "Проход № :  " & $i)
Next

MsgBox(64,"Сообщение 2 ","Завершение 5 -ти проходов")
Мне не удаётся TAB выполнить в соответствии с уловиями
 
A

Alofa

Гость
dr.room сказал(а):
Примерный конечный вариант:
Код:
Send("^{TAB 24}")
Send("^{TAB 30}")
Send("^{TAB 27}")
Send("^{TAB 21}")

Так до конца и не понятна задача. Может вы хотели так?
Код:
HotKeySet('{ESC}', '_Exit')

While Sleep(500) ; Цикл случайного выбора одного из четырех чисел (21, 24, 27, 30) в заданном диапазоне
	Switch Random(21, 30, 1)
		Case 21
			$iNumber = 21
		Case 22 To 24
			$iNumber = 24
		Case 25 To 27
			$iNumber = 27
		Case 28 To 30
			$iNumber = 30
	EndSwitch
;	Send('^{TAB ' & $iNumber & '}')
	MsgBox(0, 'Случайный выбор:', '$iNumber = ' & $iNumber, 1)
WEnd

Func _Exit()
	Exit
EndFunc

dr.room а вообще может вам стоит рассказать чего вы хотите добиться нажимая 20 с лишним раз "TAB".
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
MsgBox(64,"Сообщение","Старт проходов ")

$oSC = ObjCreate("MSScriptControl.ScriptControl")
$oSC.Language = "JavaScript"

Local $aSend[3] = [24, 27, 30]

For $i = 1 To 5 ;Цель цикла открыть 5 раз notepad - единственно что нужно изменить в нём - это значение TAB
	Run("notepad.exe")
	$hWnd = WinWait("[CLASS:Notepad]")

	If Not $hWnd Then
		MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
		Exit
	EndIf

	$Send = $aSend[$oSC.Eval("Math.random() * 3;")]
	;$Send = $aSend[Random(0,2)] ; цель отправить  notepad.exe 1 раз (!):  Send("+{TAB* ")  ,где * диапазон от 21 до 30.Но есть еще условие
                               ; Задача  выбирать не  любую цифру из диапазона (21-30) а  одну: или 21+3 или 24+3 или 27+3 и т.д. т.е.
                               ; только 1 раз выбрать за 1 цикл
	Send("+{TAB "& $Send &"}")  ;На текущий момент - Send отправляется много раз кряду за каждым циклом: это просто прототип :)

	MsgBox(4096, "Счетчик", StringFormat("Проход № : %d\r\n Send('+{TAB %d})", $i, $Send), 2)
Next
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
dr.room
Честно говоря, меня уже напрягает исправлять за вас сообщения!
К чему пустые цитаты и незакрытые теги?
 
Автор
D

dr.room

Новичок
Сообщения
283
Репутация
0
Garrett сказал(а):
Исправить - это можно.


Добавлено:
Сообщение автоматически объединено:

ps
Последнее что хотел попросить - можно ли немного поправить порядок выбора ? Я просто упустил это из внимания.
Если, скажем, выпало один раз 24, то чтобы в последующем скрипт не учитывал это число при рандомном выборе, исключая его дублирование.
Некая слабая аналогия с лото – выпавший шар, не принимает в дальнейшем участия в розыгрыше.
 
Верх