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

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

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

 

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×

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

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