|
^
425 / 50 / 16
Регистрация: 23.07.2014
Сообщений: 301
|
|
Delphi 6-7 Как в Windows 10 передать нажатие клавиш в окно MMORPG игры?11.09.2021, 01:08. Показов 3326. Ответов 13
Метки delphi 7, keybd_event, mmorpg, postmessage, Windows 10, windows 7, x64, эмуляция нажатия (Все метки)
Здравствуйте.
Я на ноутбуке, находящемся под управлением Windows 7 x64, пишу небольшую программу, которая должна по таймеру передавать в окно MMORPG игры (название не хотел бы пока говорить) нажатия некоторых клавиш. Для разработки используется Borland Delphi 7 (мне удалось найти в Интернете версию, работающую под x64). Сама же разрабатываемая программа должна работать под Windows 10. Игра находится не в полноэкранном режиме. Мной были найдены два способа эмулировать нажатия клавиш в чужом окне. Первый состоит в использовании функции postMessage, а второй — в использовании функции keybd_event. Но ни один из них не работает должным образом на Windows 10, но работает идеально на Windows 7. Ниже расскажу подробнее о том, как я использовал оба способа. postMessage. С помощью этой функции я сторонним окнам шлю сообщение WM_KEYDOWN, передавая в параметре нажатую клавишу. Результат на Windows 7: работает на всех протестированных приложениях (кроме блокнота, просто я получаю описатель окна, передавая в findWindow лишь его имя, вместо имени класса идёт nil). Результат на Windows 10: отсутствует — ни в одно окно нажатие не передаётся. Согласно этой теме: PostMessage VS Win 10, это — очень странно, и работать должно, но там не написано, что значит «особым образом работать с приложениями», поиск в Интернете тоже не дал результатов. Пытался подключиться к приложению по классу окна — нет эффекта. keybd_event. Результат на Windows 7: работает на всех протестированных приложениях, включая блокнот. Результат на Windows 10: работает везде, кроме окна целевой игры. Окно игры не реагирует на эмуляцию. Я знаю, что ещё есть sendMessage, но эта функция не работала вообще нигде. =========== Казалось бы, игра могла быть защищена от эмуляции нажатия клавиш, но почему тогда оба способа эмуляции работают под Windows 7? =========== Для иллюстрации всего выше написанного я написал тестовую программу, которая использует как postMessage, так и keybd_event (не вместе, конечно). Чтобы было понятно, как использовать программу, я снабдил её пояснениями, из которых должно быть всё ясно. Исходники (Delphi 7, напоминаю) (без экзешника) можно скачать здесь: test.zip Если вы не боитесь, можете скачать экзешник: Project1.zip =========== Собственно, прошу помощи. Скажите, как можно заставить мою программу, работая под windows 10, эмулировать нажатия клавиш в чужих окнах, включая рассматриваемую игру. Заранее большое спасибо.
0
|
|
| 11.09.2021, 01:08 | |
|
Ответы с готовыми решениями:
13
Как передать нажатие клавиш в окно другого приложения Передать нажатие клавиш в окно RDP
|
|
68 / 33 / 11
Регистрация: 18.07.2014
Сообщений: 263
|
|||||||||||
| 13.09.2021, 08:57 | |||||||||||
|
Вадим Мошев, Попробуйте так
0
|
|||||||||||
|
^
425 / 50 / 16
Регистрация: 23.07.2014
Сообщений: 301
|
|
| 13.09.2021, 09:01 [ТС] | |
|
KOTOM, спасибо, надо будет попробовать. Однако у меня сразу же вопрос возник. Вот вы тут используете процедуру
sleep(). Скажите, должна ли тут совместно с ней использоваться application.processMessage?
0
|
|
|
68 / 33 / 11
Регистрация: 18.07.2014
Сообщений: 263
|
|
| 13.09.2021, 09:05 | |
|
Вадим Мошев, Нет не должна. application.processMessage изпользуется для обновления интерфейса ВАШЕЙ программы, когда она что-то долго и нужно делает. А если точнее, то application.processMessage оптом обрабатывает все накопившиеся сообщения в очереди сообщений вашей программы.
0
|
|
|
^
425 / 50 / 16
Регистрация: 23.07.2014
Сообщений: 301
|
|
| 13.09.2021, 09:08 [ТС] | |
|
Спасибо, я попробую и отпишусь обязательно
0
|
|
|
11 / 11 / 0
Регистрация: 29.06.2013
Сообщений: 93
|
|
| 20.09.2021, 12:17 | |
|
Windows XP 32 не работает.
0
|
|
|
^
425 / 50 / 16
Регистрация: 23.07.2014
Сообщений: 301
|
|
| 20.09.2021, 17:34 [ТС] | |
|
KOTOM, здравствуйте. К сожалению, ни один из предложенных вами способов также не работает. Они оба передают нажатия клавиш в приложения, но только под Windows 7 идёт передача нажатий в игру, что же касается window 10, то там всё плохо — в игру нажатия не передаются.
0
|
|
|
68 / 33 / 11
Регистрация: 18.07.2014
Сообщений: 263
|
|
| 21.09.2021, 21:32 | |
|
Вадим Мошев, в игру не передаются, а в другие приложения типа блокнота передаются?
0
|
|
|
^
425 / 50 / 16
Регистрация: 23.07.2014
Сообщений: 301
|
||
| 21.09.2021, 21:37 [ТС] | ||
|
KOTOM,
keybd_event() на Windows 10 передаёт нажатия клавиш во все приложения, на которых я тестировал (Блокнот, Sublime Text, Калькулятор), кроме игры.
0
|
||
|
68 / 33 / 11
Регистрация: 18.07.2014
Сообщений: 263
|
|
| 22.09.2021, 10:49 | |
|
Вадим Мошев, Значит надо пробовать SendInput но вообще странно. Если и это не поможет значит игра каким-то своим мокрописечным способом блочит весь эмулированный ввод и надо покупать аппаратный эмулятор.
0
|
|
|
^
425 / 50 / 16
Регистрация: 23.07.2014
Сообщений: 301
|
|||
| 27.09.2021, 11:53 [ТС] | |||
|
KOTOM,
___ А ещё... я знаете, что заметил. Когда я подключался по Any Desk к компьютеру с Windows 10, где надо было протестировать эмуляцию, я заметил, что, для того чтобы управлять игрой посредством Any Desk (с помощью программы-эмулятора), подключившемуся клиенту (то есть, мне), надо предоставить расширенные права (в Any Desk есть кнопка «Предоставить расширенные права»). Без таких прав работать с окном программы посредством Any Desk невозможно. Это не касается остальных приложений. Для работы с блокнотом, калькулятором, Sublime Text расширенных прав не требовалось. Как вы считаете, это связано как-то с правами?
0
|
|||
|
68 / 33 / 11
Регистрация: 18.07.2014
Сообщений: 263
|
|
| 27.09.2021, 14:37 | |
|
Вадим Мошев, Насчёт прав не знаю, никогда не сталкивался. Ещё кстати можно взять Microsoft Spy++ и посмотреть какие сообщения приходят в игру на Windows 7 и на Windows 10 как при обычном вводе так и при эмулированом. Возможно на Windows 10 у них через Raw Input работает, хотя в таком случае я не понимаю что на Win7 им мешало так же сделать. В любом случае стоит глянуть приходят ли WM_KEYDOWN и WM_KEYUP на десятке или нет.
1
|
|
|
0 / 0 / 0
Регистрация: 07.07.2022
Сообщений: 3
|
|
| 07.07.2022, 08:27 | |
|
SendInput ?
0
|
|
|
^
425 / 50 / 16
Регистрация: 23.07.2014
Сообщений: 301
|
||
| 07.07.2022, 08:42 [ТС] | ||
|
0
|
||
| 07.07.2022, 08:42 | |
|
Помогаю со студенческими работами здесь
14
SDL кроссплатформенные игры - Как обрабатывать событие нажатие клавиш?
Отправить нажатие клавиш в свернутое окно
Нажатие клавиш в неактивное приложение (спам бот для свёрнутой игры) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|