Что нового

[Мышь, клавиатура] Как зажать пробел?

Фазинур

Новичок
Сообщения
52
Репутация
0
Короче при создании бота я наткнулся на такую проблему как отсутствие какого либо инфы в справке насчет зажимания пробела. Друзья помогите. Бесконечный цикл с отправкой SPACE не подойдет, так как игра запалит бот.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Фазинур [?]
как отсутствие какого либо инфы в справке насчет зажимания
9b138f26c0.png
 
Автор
Ф

Фазинур

Новичок
Сообщения
52
Репутация
0
Ну так, Зажимаение клавиш есть а таких клавиш как пробел, интер нету.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Код:
Send("{SPACE DOWN}")

А так? Не пойдёт?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Можно попробовать
Код:
Opt("SendKeyDownDelay", 1)     ;1 миллисекунда

меняя задержку. Но это будет относится ко всем отправляемым Send.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
У меня вообще то и вот так не зажимает
Код:
Send("{a down}")
Sleep(5000)
Send("{a up}")


Вы уверены что проблема именно в пробеле?


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

И вот так тоже не зажимает...
Код:
PressVK(0x41)
Sleep(5000)

Func PressVK($vcode)
    DllCall("user32.dll","int","keybd_event","int",$vcode,"int",0,"long",0,"long",0) ; нажать
    ;DllCall("user32.dll","int","keybd_event","int",$vcode,"int",0,"long",2,"long",0) ; отпустить
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
InnI
ну, классно.
Но проведённый эксперимент просто показывает что текстовый редактор не подходит для опытов.
А на чём тогда из стандартных заманух Windows можно тренироваться?
(вариант поставить игрушку какую-нибудь не подходит)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
C2H5OH [?]
из стандартных заманух Windows
Не знаю, не интересовался.

Фазинур [?]
цикл с отправкой SPACE не подойдет
Когда вы "зажимаете" на клавиатуре клавишу, контроллер клавиатуры каждые 30мс генерирует нажатие-отпускание этой клавиши. Это то же самое, как эту клавишу в цикле отправлять.
 
Автор
Ф

Фазинур

Новичок
Сообщения
52
Репутация
0
А в бесконечном цикле тоже задержка между посылкой команды дает 30мс? И вообще у каждой клавы 30мс? Или у всех по разному?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Фазинур [?]
задержка между посылкой команды
В цикле вы сами можете регулировать различные задержки. К вашим услугам
Код:
Opt("SendKeyDelay", nn)
Opt("SendKeyDownDelay", nn)
Sleep(nn)


Данная настройка прописывается в реестре "HKEY_CURRENT_USER\Control Panel\Keyboard", параметр "KeyboardSpeed".
 
Автор
Ф

Фазинур

Новичок
Сообщения
52
Репутация
0
InnI сказал(а):
Фазинур [?]
задержка между посылкой команды
В цикле вы сами можете регулировать различные задержки. К вашим услугам
Код:
Opt("SendKeyDelay", nn)
Opt("SendKeyDownDelay", nn)
Sleep(nn)


Данная настройка прописывается в реестре "HKEY_CURRENT_USER\Control Panel\Keyboard", параметр "KeyboardSpeed".
Так бот не спалится?
Код:
while 1=1
sleep(30)
send("{SPACE}")
wend
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Фазинур сказал(а):
Так бот не спалится?

Делайте рандомные задержки, как-то так:

Код:
#Include <WinAPIEx.au3>

...

While 1
	_WinAPI_Keybd_Event(0x20, 0x00) ; Нажать пробел
	_Delay(Random(20, 40, 1)) ; Задержка 20-40 мс
	_WinAPI_Keybd_Event(0x20, 0x02) ; Отжать пробел
	_Delay(Random(20, 40, 1)) ; Задержка 20-40 мс
WEnd

Func _Delay($iDelay)
	Local $Timer = TimerInit()
	While TimerDiff($Timer) <= $iDelay
		; Nothing
	WEnd
EndFunc   ;==>_Delay
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Или так:
Код:
While 1
 Sleep(Random(30, 90, 1)) ; задержка от 30 до 90 мс
 Send("{SPACE}")
WEnd
 
Верх