Что нового

[Мышь, клавиатура] Движение и клики по координатам через указанный промежуток времени

adkomissarov

Новичок
Сообщения
15
Репутация
0
Версия AutoIt: 3.3.12.0

Описание: Доброго времени суток, необходим скрипт, который будет выглядеть так: окно с выпадающим меню и кнопкой старт... В выпадающем меню цифры от одного до 60 - это минуты. Алгоритм работы таков: я выбираю из выпадающего меню например 17 и жму кнопку "Старт" и через 17 минут курсор мышки начинает бегать по заданным координатам и совершать левый клик. Координаты пропишу сам, в зависимости от моих потребностей. Трудность именно в этом выпадающем меню.

Примечания: Выпадающее меню можно заменить хоть окном в 60 точек (забыл как их обозвать :shok: :-[), хоть просто полем в которое я руками буду вводить минуты, но суть должна сохраниться. Я запускаю скрипт и через указанное мной время он жмёт туда, куда я ему пропишу.

P.S.: В AutoIt'e я 0, ну просто никогда не сталкивался. Пару дней осваиваю всего...месаджбоксы, клики по координатам, остановки/приостановки скриптов хоткеями......грубо говоря такие мелочи для полного чайника. Поэтому помогите пожалуйста с максимальными подробностями, как человеку, который впервые видит AutoIt (ну хотя по факту оно так и получается). Я постараюсь нашарить инфу и осуществить сей скрипт, просто с моими познаниями это на долго, а очень хотелось бы скорее, по возможности. Заранее огромное спасибо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
adkomissarov,
Зачем нужна эта портянка - меню на 60 пунктов? ИМХО, в Вашем случае самый оптимальный вариант
Код:
GUICtrlCreateUpdown()
 
Автор
A

adkomissarov

Новичок
Сообщения
15
Репутация
0
madmasles сказал(а):
adkomissarov,
Зачем нужна эта портянка - меню на 60 пунктов? ИМХО, в Вашем случае самый оптимальный вариант
Код:
GUICtrlCreateUpdown()
Может это и оптимальный вариант, только я ничего не понял.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
adkomissarov
Alt+Q отображает/скрывает GUI, в заголовок выводится оставшееся время, каждое нажатие Start перезапускает таймер на указанное значение. Действия прописываются в функции DoActions().
Код:
HotKeySet("!q", "GuiShowHide")

$gui = GUICreate("", 130, 45, -1, -1, -1, 0x80) ; $WS_EX_TOOLWINDOW
$input = GUICtrlCreateInput("1", 10, 10, 50, 25, 0x2000) ; $ES_NUMBER
GUICtrlSetFont(-1, 12)
GUICtrlCreateUpdown($input)
GUICtrlSetLimit(-1, 60, 1)
$button = GUICtrlCreateButton("Start", 70, 10, 50, 25)
GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $button
      GUISetState(@SW_HIDE)
      $Value = GUICtrlRead($input)
      $Delay = $Value
      WinSetTitle($gui, "", "Осталось : " & $Delay)
      AdlibRegister("StartTimer", 1000 * 60 * 1)
  EndSwitch
Until 0

Func StartTimer()
  $Delay -= 1
  WinSetTitle($gui, "", "Осталось : " & $Delay)
  If Not $Delay Then
    AdlibUnRegister("StartTimer")
    DoActions()
    $Delay = $Value
    WinSetTitle($gui, "", "Осталось : " & $Delay)
    AdlibRegister("StartTimer", 1000 * 60 * 1)
  EndIf
EndFunc

Func DoActions()
  MouseClick("left", 100, 100)
  Sleep(100)
  MouseClick("left", 200, 200)
  Sleep(100)
  MouseClick("left", 300, 300)
EndFunc

Func GuiShowHide()
  If BitAND(WinGetState($gui), 2) Then
    GUISetState(@SW_HIDE)
  Else
    GUISetState(@SW_SHOW)
  EndIf
EndFunc
 
Автор
A

adkomissarov

Новичок
Сообщения
15
Репутация
0
InnI сказал(а):
adkomissarov
Alt+Q отображает/скрывает GUI, в заголовок выводится оставшееся время, каждое нажатие Start перезапускает таймер на указанное значение. Действия прописываются в функции DoActions().
Код:
HotKeySet("!q", "GuiShowHide")

$gui = GUICreate("", 130, 45, -1, -1, -1, 0x80) ; $WS_EX_TOOLWINDOW
$input = GUICtrlCreateInput("1", 10, 10, 50, 25, 0x2000) ; $ES_NUMBER
GUICtrlSetFont(-1, 12)
GUICtrlCreateUpdown($input)
GUICtrlSetLimit(-1, 60, 1)
$button = GUICtrlCreateButton("Start", 70, 10, 50, 25)
GUISetState()

Do
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $button
      GUISetState(@SW_HIDE)
      $Value = GUICtrlRead($input)
      $Delay = $Value
      WinSetTitle($gui, "", "Осталось : " & $Delay)
      AdlibRegister("StartTimer", 1000 * 60 * 1)
  EndSwitch
Until 0

Func StartTimer()
  $Delay -= 1
  WinSetTitle($gui, "", "Осталось : " & $Delay)
  If Not $Delay Then
    AdlibUnRegister("StartTimer")
    DoActions()
    $Delay = $Value
    WinSetTitle($gui, "", "Осталось : " & $Delay)
    AdlibRegister("StartTimer", 1000 * 60 * 1)
  EndIf
EndFunc

Func DoActions()
  MouseClick("left", 100, 100)
  Sleep(100)
  MouseClick("left", 200, 200)
  Sleep(100)
  MouseClick("left", 300, 300)
EndFunc

Func GuiShowHide()
  If BitAND(WinGetState($gui), 2) Then
    GUISetState(@SW_HIDE)
  Else
    GUISetState(@SW_SHOW)
  EndIf
EndFunc
Спасибо огромное, а можно сделать так, чтобы оставшееся отображалось в минутах и секундах? И существует ли какая-нибудь координатная сетка, что бы определить нужные мне координаты, а то так угадывать довольно долго получается.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
adkomissarov [?]
а можно сделать так, чтобы оставшееся отображалось в минутах и секундах?
Можно. Но мне уже лень переделывать, тем более, что в задании этого и не было.

угадывать довольно долго получается
Если я правильно понял, то вам нужны координаты курсора мыши? Если да, то запускаете Au3Info.exe, переходите на вкладку Mouse, перетаскиваете Finder Tool в нужную вам точку, смотрите координаты (Position).
 
Автор
A

adkomissarov

Новичок
Сообщения
15
Репутация
0
InnI сказал(а):
Можно. Но мне уже лень переделывать, тем более, что в задании этого и не было.
Я просто не ожидал такого мощного результата, а теперь захотелось модернизировать его, для полго комфорта. Но ладно, так тоже очень круто. А можно хотябы убрать такой момент, чтобы после нажатия старт действие происходило 1 раз? А то получается, что указываю 2 минуты, и он каждые 2 минуты выполняет действия.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
adkomissarov [?]
чтобы после нажатия старт действие происходило 1 раз
Код:
Func StartTimer()
  $Delay -= 1
  WinSetTitle($gui, "", "Осталось : " & $Delay)
  If Not $Delay Then
    AdlibUnRegister("StartTimer")
    WinSetTitle($gui, "", "")
    DoActions()
  EndIf
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
adkomissarov,
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 
Верх