Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2013, 21:14
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
Вопрос Имитация нажатия кнопки на геймпаде

Мне нужно эмулировать нажатие нескольких кнопок на геймпаде для игры. То есть мы нажимаем, например, "V", и эмулируется нажатие клавиш "X, A, RB". Как это сделать? Желательна поддержка всех геймпадов, но можно только оригинального от xbox'а.
Ответить с цитированием
  #2  
Старый 07.07.2013, 18:43
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
Лампочка Идея

Есть идея. Я прочитал про имитацию нажатий на клавиатуре и увидел строку
Код:
keybd_event(VK_LCONTROL, 0, 0, 0); //Нажатие левого Ctrl
Я так понимаю VK_LCONTROL - это константа. Может быть можно перехватить код клавиш на геймпаде, но как это сделать? Я пытался одной программой, но она не видит геймпад. Поправьте меня если я не прав.

Помогите, пожалуйста!

Последний раз редактировалось serega6531, 08.07.2013 в 18:54. Причина: Идея
Ответить с цитированием
  #3  
Старый 08.07.2013, 19:33
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Трясите драйвер вашей железки, должен ведь у неё быть что-то типа АПИ (игры-то его как-то обрабатывают), если узнаете константы жима кнопок, то тогда уже можно их эмульнуть и с клавиатуры. Это не проблема.
Ответить с цитированием
  #4  
Старый 08.07.2013, 19:38
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию Я пытался

Цитата:
Сообщение от Alegun
Трясите драйвер вашей железки, должен ведь у неё быть что-то типа АПИ (игры-то его как-то обрабатывают), если узнаете константы жима кнопок, то тогда уже можно их эмульнуть и с клавиатуры. Это не проблема.
Я пытался это сделать, но гугл не помог. Может есть специальный сайт или вид запросов в гугле? Если можете, дайте информацию по API официального иксбоксовского геймпада для pc.

UPD.
Нашёл этот сайт. Буду разбираться.
Ответить с цитированием
  #5  
Старый 08.07.2013, 19:47
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Будьте любезны, назовите пжлст геймпад (в смысле, что искать), у меня у ребёнка есть парочка Halо 4, это оно?
Ответить с цитированием
  #6  
Старый 08.07.2013, 19:51
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию Официальный

Цитата:
Сообщение от Alegun
Будьте любезны, назовите пжлст геймпад (в смысле, что искать), у меня у ребёнка есть парочка Halо 4, это оно?
Официальный иксбоксовский, гуглится по microsoft controller for windows.
Ответить с цитированием
  #7  
Старый 08.07.2013, 21:23
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию Есть кое что

Есть одна функция - XInputSetState, но это не то. Это для вибрации. Как я понял, нет возможности отправить нажатие. Или как это сделать?
Ответить с цитированием
  #8  
Старый 08.07.2013, 21:32
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

И так есть поддержка клавиатуры, в смысле GUID_SysKeyboardEm
Ответить с цитированием
  #9  
Старый 08.07.2013, 21:36
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию Имитация

Цитата:
Сообщение от Alegun
И так есть поддержка клавиатуры, в смысле GUID_SysKeyboardEm
И как имитировать нажатие? Я всё равно не понял.
Ответить с цитированием
  #10  
Старый 08.07.2013, 21:58
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Смотрите здесь
Ответить с цитированием
  #11  
Старый 09.07.2013, 00:08
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Смотрите здесь
И как это использовать? Может с помощью этого:
Код:
XINPUT_GAMEPAD_DPAD_UP 0x00000001
XINPUT_GAMEPAD_DPAD_DOWN 0x00000002
XINPUT_GAMEPAD_DPAD_LEFT 0x00000004
XINPUT_GAMEPAD_DPAD_RIGHT 0x00000008
XINPUT_GAMEPAD_START 0x00000010
XINPUT_GAMEPAD_BACK 0x00000020
XINPUT_GAMEPAD_LEFT_THUMB 0x00000040
XINPUT_GAMEPAD_RIGHT_THUMB 0x00000080
XINPUT_GAMEPAD_LEFT_SHOULDER 0x0100
XINPUT_GAMEPAD_RIGHT_SHOULDER 0x0200
XINPUT_GAMEPAD_A 0x1000
XINPUT_GAMEPAD_B 0x2000
XINPUT_GAMEPAD_X 0x4000
XINPUT_GAMEPAD_Y 0x8000
?
Вот так:
Код:
keybd_event(XINPUT_GAMEPAD_START, 0, 0, 0); //Нажатие START
?
Ответить с цитированием
  #12  
Старый 09.07.2013, 10:23
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Не всё так просто, это лишь возвращаемые значения структуры из GetState, к системе они отношения не имеют - надо задействовать XINPUT1_4.dll, но похоже, это передаётся только в одну сторону. См. исходники примера, хоть они и на Си++, но будет понятно, что нужно вызывать и можно ли это вообще делать.
Ответить с цитированием
  #13  
Старый 09.07.2013, 11:42
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Не всё так просто, это лишь возвращаемые значения структуры из GetState, к системе они отношения не имеют - надо задействовать XINPUT1_4.dll, но похоже, это передаётся только в одну сторону. См. исходники примера, хоть они и на Си++, но будет понятно, что нужно вызывать и можно ли это вообще делать.
Есть решение наоборот, поставить управление с клавиатурой и эмулировать нажатия клавиш на клавиатуре с помошью геймпада и делать комбинации, эмулируя нажатия клавиш на клавиатуре. Хотя это слишком легко и неудобно.

Итак, как же всё таки передать нажатия?
Ответить с цитированием
  #14  
Старый 09.07.2013, 16:55
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вот ещё по данной теме. А тут вообще шикарно описываются старый и новый DInput и XInput в подробностях, аж зачитался

З.Ы. Наверное лучше использовать готовый эмулятор геймпада, чем его делать самому, как удалось понять, всё равно проблема решается пропатчиванием "родной" для xbox'а библиотеки контроллера, видимо там переназначаются кнопки на другие и в этом весь велосипед.

Последний раз редактировалось Alegun, 09.07.2013 в 17:08.
Ответить с цитированием
  #15  
Старый 09.07.2013, 17:08
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
З.Ы. Наверное лучше использовать готовый эмулятор геймпада, чем его делать самому.
Но мне то нужно чтобы по одной кнопке нажималось разу несколько, какое нибудь там 10 hit combo.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter