Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.07.2021
Сообщений: 3

SendMessage для эмуляции нажатия клавиш в играх

22.11.2022, 10:13. Показов 1087. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите пожалуйста, я раньше пробовал сделать для одной игры бота для одной игры(Gta 5 RP) Писал на питоне и эмуляция клавиш работала, но сейчас для себя решил на C# написать такой же только для другой игры (DayZ). Почему-то работает только для чата в самой игре. Я заранее открываю чат и запускаю программу, он набирает текст и на Enter отправляет его, но вне чата ни одна клавиша не работает. Эта проблема у меня была и в Gta 5 RP когда на питоне писал, но потом я ее как-то решил. В C# долго думал в чем же проблема, решил попробовать на питоне на старых наработках переделать под DayZ, выяснил, что на питоне тоже передается эмуляция только в чат. Подскажите пожалуйста почему так может быть и какие могут быть варианты решения? Я слышал, что есть и эмуляция нажатия не в окно игры, просто эмуляция нажатия, но мне такой вариант не подходит. Хочется отправлять непосредственно в саму игру, чтоб парралельно я мог заниматься на втором мониторе своими делами и бот мне не печатал в окно браузера всякое. Спасибо!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 private void button1_Click(object sender, EventArgs e)
        {
            var key = new Dictionary<string, int>()
            {
                { "VK_F10", 0x79},
                { "VK_I", 0x49},
                { "VK_ESCAPE", 0x1B}
            };
            Process[] p = Process.GetProcessesByName("DayZ_x64");
 
            try
            {
                string windowName = (p[0].MainWindowTitle);
                IntPtr hwnd = FindWindow(IntPtr.Zero, windowName);
                MessageBox.Show($"Окно '{windowName}' найдено! {hwnd}");
 
 
                Press_Key(hwnd, key["VK_ESCAPE"]);                
                SendMessage(hwnd, WM_ACTIVATE, 0, 0);                
            }
            catch (Exception)
            {
                MessageBox.Show($"Окно не найдено!");
            }
            
        }
 
 
private void Press_Key(IntPtr hwnd, int key)
        {
            SendMessage(hwnd, WM_ACTIVATE, 0, 0);
            SendMessage(hwnd, WM_KEYDOWN, key, 0);
            SendMessage(hwnd, WM_KEYUP, key, 0);
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2022, 10:13
Ответы с готовыми решениями:

WINAPI для эмуляции нажатия клавиш
Здравствуйте, подскажите функцию WINAPI необходимую для нажатия клавиши, например &quot;G&quot;. Гуглил, но не нашел.

Не регистрируются нажатия клавиш в играх; pyautogui
B играх при использовании pyautogui.keydown(), keyup(), press(), не регистрируется нажатие клавиш по условию, если открывать чат(в игре),...

Приложение с входящим параметром для эмуляции нажатия кнопки
Надобно приложение, в которое можно подать параметр, и которое после этого нажмёт нужную кнопку(глобально). Например вот таким...

5
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,748
Записей в блоге: 1
22.11.2022, 12:03
Скорее всего обе игры обрабатывают нажатия клавиш обращаясь непосредственно к драйверу клавиатуры. В этом случае сообщения ОС просто игнорируются. Относительно недавно была подобная тема поищите на форуме, там разбирались с этим.
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
22.11.2022, 12:27
elagor1996, раньше игры брали события нажатия клавиш из событий windows, но винда может быть занята чем то и эти сообщения могут прийти с запозданием, так же при этом нужно для разных платформ писать разный код, для универсально и уменьшения лагов современные игры опрашивают устройства ввода самостоятельно, таким образом нажатия обрабатываются сразу как пришли от драйвера. Это так же защищает игру от всяких кликеров и читов. Конечно это не ограждает игру от физических кликеров, но это добавляет сложности для распространения и разработки таких программ или комплексов
1
0 / 0 / 0
Регистрация: 14.07.2021
Сообщений: 3
22.11.2022, 23:40  [ТС]
Сообщения PostMessage и SendMessage не доходят до окна
вы про эту тему?
0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,748
Записей в блоге: 1
23.11.2022, 08:11
Да вроде бы эта тема, там и доп материалы приведены.
1
0 / 0 / 0
Регистрация: 14.07.2021
Сообщений: 3
23.11.2022, 16:33  [ТС]
Цитата Сообщение от Uswer Посмотреть сообщение
Да вроде бы эта тема, там и доп материалы приведены.
Спасибо! Я попробую разобраться, мб что-то да и получиться. А если нет, придется писать для активного окна...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2022, 16:33
Помогаю со студенческими работами здесь

Эмуляция нажатия клавиш для неактивных WPF приложений или эмуляция глобальных горячих клавиш
Столкнулся с тем, что следующий код (нажатия опредлённых клавиш) не работает для такой программы как Snagit, и даже не похоже, что фокус...

Программа для нажатия клавиш
Есть ли программа которая бы зажала кнопку контр и держала в зажатом состоянии? И чтобы её можно было свернуть и продолжать свои действия,...

Программа для нажатия двух клавиш
Здравствуйте. Мне нужна программа, чтобы, например, при нажатии на кнопку &quot;1&quot; сразу же нажимались кнопки &quot;1&quot; и &quot;Enter&quot;....

Эмуляция нажатия клавиш для SDL
Столкнулся с такой проблемой что на эмуляцию нажатия клавиш, SDL не реагирует. Точнее DOSBox. Пробовал 2 метода (WINAPI), оба не подходят....

Нужен метод для автоматического нажатия клавиш.
Добрый день. Суть проблемы такова. Нужно, чтобы методы посылали &quot;нажатия клавиш&quot; в окно имеющее фокус в активном приложении. По типу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru