Перейти к содержанию

C# навигационный бот или привет математикам...


Рекомендуемые сообщения

Походу я не загружаю API нужную. Ибо все у меня красное =\.

Можно как нибудь кратно, без лишней воды, но так, что бы было доходчиво, объяснить как эмулировать нажатие клавиши в фоновом приложении, без перенесения на него фокуса.

В гугле доходчивых и полноценных примеров нет. Одни куски, которые ни чему умному научить не могут.

Нажатие в окне на котором фокус, у меня получилось и то, только с бубном в виде InputSimulator

private void button15_Click(object sender, EventArgs e)
        {
            inputSimulator.Keyboard.KeyPress(VirtualKeyCode.VK_R);
        }

Но мне нужно, что бы клавиши клацались в окне без фокуса! Что бы свернул и ушел, а оно работает.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, pachela сказал:

Но мне нужно, что бы клавиши клацались в окне без фокуса!

Давно бы уже сделал управление, через память, т.е при нажатии клавиши в памяти изменяются значения, типа 256 нажата клавиша, а 0 опущена, тогда все равно игра в фокусе или нет.

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, kiwipapayamongoose сказал:

Давно бы уже сделал управление, через память, т.е при нажатии клавиши в памяти изменяются значения, типа 256 нажата клавиша, а 0 опущена, тогда все равно игра в фокусе или нет.

Я об этом думал, но как найти значение клавиш в памяти?

Ссылка на комментарий
Поделиться на другие сайты

На просторах интернет вычитал, что если игра защищена чем то вроде "фемиды", то эмуляция клавиш в фоновом режиме ей до одного места. А точнее речь идет не столько о самой фемиде, а о том, что современные ММО ставят проверку на фокус окна?

Т.е. если я пробую тем же AHK или AutoIT и у меня в активном окне кликер работает, а в свернутом нет, то дальше и не мучить яйца, кота, мозги и Шарп, в попытках заставить слать клики в свернутое приложение?

P.s. Пардоньте за кашу, на ногах уже кучу времени, голова стремительно клонится к подушке.

Ссылка на комментарий
Поделиться на другие сайты

Собственно, если так уж необходимо держать окно в фокусе, никто не может помешать запустить игру с минимальными настройками в виртуалке, и кликер в ней же. И саму виртуалку хоть вообще в headless режиме запускать (только настроить все на автозагрузку).

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, Xipho сказал:

Собственно, если так уж необходимо держать окно в фокусе, никто не может помешать запустить игру с минимальными настройками в виртуалке, и кликер в ней же. И саму виртуалку хоть вообще в headless режиме запускать (только настроить все на автозагрузку).

Даже в режиме оптимизации игра тянет слишком много ресурсов. Но ни это главное.

Я тут вспомнил, Что совсем недавно видел уже видео с подобным ботом, там вот китаец реализовал то, что я хочу. Даже в свернутой игре, бот выполняет все поставленные задачи. Возможно он через драйвер это решил?

Ссылка на комментарий
Поделиться на другие сайты

Думаю, фишка может быть в том, что свернутое окно принимает от системы только определенный набор сообщений. Делается это для того, чтобы ты случайно не понажимал не те кнопки в свернутых приложениях. Каким образом это обойти через драйвер - не знаю. Есть вариант - разворачивать окно, посылать ему сигнал ввода и снова тут же сворачивать. На практике это может происходить настолько быстро, что окно будет казаться всегда свернутым.

Ссылка на комментарий
Поделиться на другие сайты

А как это на работе пользователя повлияет? Будет ли мешать мне, к примеру работать в VS или лазить в браузере по ютубам и вконтактам?

Приблизительно это будет так:

API FindWindow, GetForegroundWindow, SetForegroundWindow.

Узнаем дескриптор уже активного окна, узнаем дескриптор окна мишени, устанавливаем фокус на окно мишень, эмулируем нажатие клавиш и возвращаем фокус на прошлое активное окно. Правильно?

Ссылка на комментарий
Поделиться на другие сайты

pachela, да, только размер игры сделай маленький, и в угол помести чтоб случайно не нажать.

 

Вот API для размышления FindWindow, MapVirtualKey, PostMessage, PostThreadMessage, SendMessage, GetWindowThreadProcessId, keybd_event, SetForegroundWindow, SendInput, AttachThreadInput.   Spy++ узнаать, что присылает wParam и lParam в PostMessage и SendMessage для удачного нажатие.

И не забывай, что может быть проверка, на эмуляцию клавиш.

Ссылка на комментарий
Поделиться на другие сайты

2zolo2, сколько я не читал, везде пишут, что для DiretX игр PostMessage и SendMessage не подходят. Сам проверить не могу, так как толком не могу разобраться с ними и с Spy++. Пытаюсь отловить, сообщения, но окно остается пустым, может какая защита не дает словить сообщения?

Ссылка на комментарий
Поделиться на другие сайты

22 часа назад, pachela сказал:

Возможно он через драйвер это решил?

Причем тут драйвер вообще. Если игра принимает сообщения через DI хоть драйвер, хоть пассажир ей до лампочки.

Как варианты:

1. Запускать игру 100х100px и сворачивать / разворачивать, как @Xipho писал

2.

postmessage(hwnd, WM_IME_KEYDOWN, VK_R,0 );

3. SendInput

Ссылка на комментарий
Поделиться на другие сайты

Такс. Вылез косяк, раньше для записи точек, по которым должен двигаться бот, использовал горячие клавиши. Сейчас решил освободить клавиатуру и перенести горячую клавишу с букв, на цифры и вылез косяк.

Для того, что бы прикрутить перехват горячих клавиш, я использовал API

Спойлер

[DllImport("User32.dll")]   //Для хоткея 2 строки
        private static extern short GetAsyncKeyState(Keys vKey);

int arch_1 = Convert.ToInt32(GetAsyncKeyState(Keys.MButton).ToString());
                    if (arch_1 != 0)
                        {
                            Kliker_Hunter();
                        }

 

Но вот беда, когда я пытаюсь убрать к примеру MButton и вписать туда, к примеру цифру 3 (НЕ ЦИФРОВАЯ КЛАВИАТУРА СБОРКУ!!!), то в выпадающем списке нет цифр. Ну думаю прикручу виртуальный код, и тут я немного не пойму как сделать.

И может кто подсказать, что это за клавиши в выпадающем списке? b9774be317dfcd5ff1c1f5010892ec66.png

Ссылка на комментарий
Поделиться на другие сайты

23 часа назад, pachela сказал:

сколько я не читал, везде пишут, что для DiretX игр PostMessage и SendMessage не подходят. Сам проверить не могу, так как толком не могу разобраться с ними и с Spy++

Если эти не могут, то попробуй другие, в интернете куча статей про нажатие в неактивном и свернутом окне приложений и игр.  Если не можешь, то попробуй на блокноте или простой игре.

 

23 часа назад, pachela сказал:

Пытаюсь отловить, сообщения, но окно остается пустым, может какая защита не дает словить сообщения?

Какое сообщение, как отловить, и где, в программе, игре?  Можешь назовешь игру или программу для начала, чтоб точно сказать есть защита или нет?

 

Справку по API GetAsyncKeyState посмотри в там все коды должны быть описаны в разделе vKey (The virtual-key code. For more information, see Virtual Key Codes.)

Попробуй написать число в HEX 0x63 (VK_NUMPAD3)

3 часа назад, pachela сказал:

Но вот беда, когда я пытаюсь убрать к примеру MButton и вписать туда, к примеру цифру 3 (НЕ ЦИФРОВАЯ КЛАВИАТУРА СБОРКУ!!!), то в выпадающем списке нет цифр. Ну думаю прикручу виртуальный код, и тут я немного не пойму как сделать.

И может кто подсказать, что это за клавиши в выпадающем списке? 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.