Что нового

[Автоматизация] Зажатие клавиши на клавиатуре

Ksaan

Знающий
Сообщения
207
Репутация
15
Всем задрасте.
Столкнулся с такой проблемкой, для одной игры нужно зажатие( не нажатие) клавиши "P" на клавиатуре через кнопку мыши( для удобства).
Попробовал выкрутится так

Код:
#include <MouseOnEvent.au3>

Global $Paused = True

_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "Down")
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, "Up")

HotKeySet('{DELETE}', '_Exit')

While 1
  If Not $Paused Then
    Send("p")
 Else
    Sleep(1)
  EndIf
WEnd

Func Down()
  $Paused = False
EndFunc

Func Up()
  $Paused = True
EndFunc

Func _Exit()
  Exit
EndFunc


Но всё равно это не то, происходит 1-но нажатие и сразу отжатие клавиши, а мне нужно именно нажатие и через (прим. 1 секунду) отжатие.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
Ksaan,
1.
Код:
Send('{p down}')
Sleep(1000)
Send('{p up}')

2.
Код:
$iOpt = Opt('SendKeyDownDelay', 1000)
Send('p')
Opt('SendKeyDownDelay', $iOpt)
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
о спс быстро и оперативно
 

InnI

AutoIT Гуру
Сообщения
4 483
Репутация
1 216
Поправочка. Опция "SendKeyDelay" регулирует паузу перед нажатием следующей клавиши. А между нажатием и отпусканием одной клавиши нужно использовать "SendKeyDownDelay". Но она работает только в играх.
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
Интересно а можно принудительно остановить выполнение процесса зажатия клавиши
Код:
$pos = MouseGetPos()
Send('{з down}')
 Sleep(90)
MouseMove($pos[0] - 3 , $pos[1] + 6, 0)
 Sleep(90)
MouseMove($pos[0] - 5 , $pos[1] + 11, 0)
 Sleep(90)
MouseMove($pos[0] - 4 , $pos[1] + 30, 0)
 Send('{з up}')

то есть я отпущу кнопку мыши и он остановит выполнение команды мгновенно не дожидаясь завершения кода??
 

InnI

AutoIT Гуру
Сообщения
4 483
Репутация
1 216
Ksaan [?]
остановит выполнение команды мгновенно
Нет. Когда вы отпустите кнопку мыши - изменится переменная $Paused. Но цикл будет продолжен до следующей проверки $Paused, т.е. до конца.
Если вам нужно прерывать цикл, то в каждой строке (или через одну) проверяйте переменную $Paused и делайте какие-то действия.
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
InnI
то в каждой строке (или через одну) проверяйте переменную $Paused и делайте какие-то действия.
если можно в примере ?
 

InnI

AutoIT Гуру
Сообщения
4 483
Репутация
1 216
Ksaan [?]
Код:
#include <MouseOnEvent.au3>

Global $Paused = True

_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "Down")
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, "Up")

HotKeySet('{DELETE}', '_Exit')

While 1
  If Not $Paused Then
    $pos = MouseGetPos()
    Send('{з down}')
    Sleep(90)
    If $Paused Then
      Send('{з up}')
      ContinueLoop
    EndIf
    MouseMove($pos[0] - 3 , $pos[1] + 6, 0)
    Sleep(90)
    If $Paused Then
      Send('{з up}')
      ContinueLoop
    EndIf
    MouseMove($pos[0] - 5 , $pos[1] + 11, 0)
    Sleep(90)
    If $Paused Then
      Send('{з up}')
      ContinueLoop
    EndIf
    MouseMove($pos[0] - 4 , $pos[1] + 30, 0)
    Send('{з up}')
 Else
    Sleep(1)
  EndIf
WEnd

Func Down()
  $Paused = False
EndFunc

Func Up()
  $Paused = True
EndFunc

Func _Exit()
  Exit
EndFunc
 
Верх