Что нового

Эмуляция нажатий клавиш и мыши.

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Здравствуйте, я в последнее время заметил что даже самые простые онлайн игры стали невосприимчивы к эмуляции клавиш:
Код:
Send()
MouseClick()

Есть ли способы заставить работать эмуляцию? Может как-то через драйвер или еще как-то.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
У меня боты как работали, так и работают.
На чём основаны утверждения о неработоспособности указанных команд?
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
C2H5OH
Большинство онлайн игры перестали реагировать на эмуляцию клавиш.
Поэтому нужно найти другой способ.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ganibal95
Какие игры то? Ни одной не знаю.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Belfigor
CrimeCraft, PointBlank, CrossFire.
И не в одной не работают. :(
 

Spyhunter

Знающий
Сообщения
56
Репутация
13
Может быть
Код:
Send("{кнопка down}")

или
Код:
Opt ("SendKeyDownDelay", время)
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Spyhunter
Лол!


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

Есть ли возможность эмулировать клик мышки? НЕ стандартными способами.
 

nowost

Знающий
Сообщения
178
Репутация
17
Копай в сторону Dllcall если уж совсем чтото нестандарное хочешь, поиск по форуму поможет много тем есть с обсуждением.
а вообще
ControlSend ( "title", "text", controlID, "string" [, flag] )
Код:
$hWnd=WinGetHandle('Точное название заголовка');Хендл окна
$class='[class:КЛАСС ОКНА]';Либо через класс окна
Opt("SendKeyDelay",150)
ControlSend($hWnd,'','','{SPACE}',0)
ControlSend($class,'','','{SPACE}',0)



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

вот тоже интересное решение http://autoit-script.ru/index.php/topic,8460.0.html
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
WinAPI не помогает?
Код:
#include <WinAPIEx.au3>
_WinAPI_Keybd_Event($vKey, $iFlags, $iScanCode = 0, $iExtraInfo = 0)
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Эта функция подобие _IsPressed() она не эмулирует нажатие помоему.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Viktor1703
+1


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

Жду других способов. :smile:
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Ну вы хоть попробуйте, что ли...
Код:
Функция keybd_event синтезирует нажатие клавиши. Система может использовать такое синтезируемое нажатие клавиши, чтобы создать сообщение WM_KEYUP или WM_KEYDOWN. Вызывает функцию keybd_event программа обработки прерываний драйвера клавиатуры.
Windows NT/2000/XP: Эта функция была заменена. Используйте SendInput вместо нее.
Код:
Функция SendInput синтезирует нажатия клавиши, движения  и щелчки кнопкой мыши.


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

Viktor1703 [?]
Эта функция подобие _IsPressed() она не эмулирует нажатие помоему.
Пример эмуляции:
Код:
#include <WinAPIEx.au3>
#include <APIConstants.au3>

Run("notepad.exe")
$wnd = WinWaitActive("Безымянный")
_WinAPI_Keybd_Event($VK_T, 0, 0, 0)
_WinAPI_Keybd_Event($VK_E, 0, 0, 0)
_WinAPI_Keybd_Event($VK_S, 0, 0, 0)
_WinAPI_Keybd_Event($VK_T, 0, 0, 0)
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
InnI
В SCITE работает, в играх не работают :(
Код:
#include <WinAPIEx.au3>
#include <APIConstants.au3>

HotKeySet('{F1}','_F1')

While 1
	Sleep(100)
WEnd

Func _F1()
_WinAPI_Keybd_Event($VK_T, 0, 0, 0)
_WinAPI_Keybd_Event($VK_E, 0, 0, 0)
_WinAPI_Keybd_Event($VK_S, 0, 0, 0)
_WinAPI_Keybd_Event($VK_T, 0, 0, 0)
EndFunc
 

Mexanik

Новичок
Сообщения
10
Репутация
0
Тема очень актуальна. Взять тот же WOT. Написал модуль входа, выхода, движения. А вот прицел не могу навести. Точнее там очень хитро. Попробую объяснить. Движение мыши не проходит. Обычные клавиши проходят. Но движения мыши не проходят, и не только мышь. Клавишами вверх, влево, вправо, вниз, его тоже можно двигать. Но и эти клавиши заблокированы. Заметил такую штуку, достаточно, немного шевелить мышь рукой. И движение идет. Пробал передвигать несколькими способами
1.
Код:
Opt("MouseCoordMode",2)				; Установка системы координат внутри окна для мыши 1024/768
Opt("PixelCoordMode",2)			; Установка системы коордитна внутри окна для цвета 1024/768
WinWaitActive("W.o.T. Client") 		; ожидаем появление окна W.O.T.
sleep (5000)
MouseMove(588, 254) ; перемещает курсор - Команда не проходит.
Попытка задействовать клавиши ответственные за прицел не проходит
Send("{{UP} down}") ;Держать клавишу Ц
   Sleep (3000)
    
Send("{{UP} up}") ;Освободить клавишу Ц

Вторая идея была заюзать

MouseClickDrag("left", 502, 409, 711, 504,100 )
и просто клик со средней клавишей мыши. Не проходит.

Поехали дальше.
Скачал простую сохранялку для движения мыши. Попробовал применить с игрой. Мысль была такая. Если от макроса будет пахать, то используя его библиотеки протолку движения мыши в игру. Фиг там, игра сразу вылетает. В общем, дайте какие нить идеи, а я попробую реализовать.
Мысли остались две. Имитировать не только ввод, но и движение самой мыши. Вот только тонкости не знаю, то ли игра считывает сам порт, то ли какой то регистр. В общем ребята, давайте разломаем этот орешек. Насчет win api, я так понял библиотека autoit это оно и есть? Значит по идее, и чистая виндовская не пройдет. Может как нить через DirectX. В общем дайте идею. А то обидно. Все сделал, мелочь осталась ;))


Ну и третье можно писать координаты мыши напрямую в память, но где находится эти адреса я не смог вычислить. Третий способ точно пройдет.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Mexanik [?]
можно писать координаты мыши напрямую в память
Все-же лучше найти способ эмуляции мышки и клавы.

Может там используется DirectInput ? Это лишь какие-то догадки... :smile:
 

Mexanik

Новичок
Сообщения
10
Репутация
0
Чего то я процитировать не могу. Ну да бог с ним.
К несчастью проблема не в том что мы даем команды не в том интерпретаторе. А в том, что там стоит именно блокировка. Команды и эмуляция проходят, это видно по прерываниям. Стоит шевельнуть мышь, и действие идет. Надо понять, по чем идет отлов настоящего движения. Это или регистр или порт. Других вариантов там нет.

Все таки я склоняюсь к записи данных напрямую в память. Но в данном случае, будет работать в текущем запуске. Потом каждый раз приходится узнавать адресное пространство.

Нам нужен специалист по драйверам.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Mexanik [?]
записи данных напрямую в память
Будет действовать только на одну игру, и во 2х не все игры дают в себя залезть...


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

Mexanik
OffTopic:

Эм...
А так не пробовал? :smile:
Код:
Send("{UP down}") ;Держать клавишу Ц
   Sleep (3000)
    
Send("{UP up}") ;Освободить клавишу Ц

 

Mexanik

Новичок
Сообщения
10
Репутация
0
В общем ситуация следующая. При эмуляции мыши и клавиатуры. Система ставит флаг LLMHF_INJECTED. Этот флаг передается соответственно в WH_KEYBOARD_LL или WH_MOUSE_LL.
Надо сделать свой хук, и убрать этот флаг. SendInput и Mouse_Event помещают данные в очередь RIT. Вроде бы так.
Моего уровня пока не хватает для решения этой задачи. Может есть на форуме люди которые могут помочь. Я же пока буду изучать. И пытаться написать код.


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

Неужели некому помочь. :( Нужен хук на перехват флага. И отправка уже чистого пакета.
 
Автор
Ganibal95

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Может это как-то может помочь?
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644970(v=vs.85).aspx


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

Заметил следующие при включении игры PointBlank.
Код:
Send()

И
Код:
_WinAPI_Keybd_Event($VK_T, 0, 0, _WinAPI_GetMessageExtraInfo())
_WinAPI_Keybd_Event($VK_E, 0, 0, _WinAPI_GetMessageExtraInfo())
_WinAPI_Keybd_Event($VK_S, 0, 0, _WinAPI_GetMessageExtraInfo())
_WinAPI_Keybd_Event($VK_T, 0, 0, _WinAPI_GetMessageExtraInfo())

При нажитие на кнопку 1 или F1 НЕ печатает даже если я не в игре, а в простом SciTe.
 

Arei

Скриптер
Сообщения
938
Репутация
115
Наверное как писали выше, при запуске он блокирует клавиатуру, кроме активного окна игры.
 
Верх