Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » DirectInput проблема | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 1
 
Поиск в этой теме:
Канал Игры Мечты: «DirectInput проблема»
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Некоторые игры, в которых используется DirectInput полностью перехватывают сигналы с джойстика, клавиатуры, мыши таким образом, что другие программы не могут повлиять на управление внутри игры.
Может быть мне хочется странного, но каким образом обойти эту блокировку?
Может быть я не правильно понимаю принцип работы Direct'a, но судя по коду, используемому для реализации управления - очень на то похоже.
 Cкрытый текст   (кликните здесь для просмотра)

Код не мой: http://gamesmaker.ru/programming/directx/direct3d-urok-06-ispolzovanie-directinput/

//-----------------------------------------------------------------------------
// Name: bool CInput::Update(void)
// Desc: Обновление состояния клавиатуры и мыши
//-----------------------------------------------------------------------------
void CInput::Update(void)
{
HRESULT hr;

// Опрашиваем клавиатуру
hr = lpDIKeyboard->GetDeviceState(sizeof(BYTE)*256, &DIks); // Данные с кла-вы
if(FAILED(hr)) // Если мы потеряли устройство
{
do{ hr = lpDIKeyboard->Acquire(); // Пытаемся захватить
}
while(hr == DIERR_INPUTLOST || hr == DIERR_NOTACQUIRED);
}
// Опрашиваем мышь
hr = lpDIMouse->GetDeviceState(sizeof(DIMOUSESTATE2), &DIms); // Данные с мыши
if(FAILED(hr)) // Если мы потеряли устройство
{
do{ hr = lpDIMouse->Acquire(); // Пытаемся захватить
}
while(hr == DIERR_INPUTLOST || hr == DIERR_NOTACQUIRED);
}
}


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

Далее хотелось бы использовать некую программу, которая преобразовала бы обычнoe WinAPI-событие нажатия клавиши в Direct'овское (?) если это вообще возможно.

добавлено спустя 24 минуты:
http://www.elite-games.ru/art/program/dxinput3.shtml

9. Захватить устройство.

Не я придумал про блокировку....
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (21:48 14-10-2014), всего редактировалось 1 раз
    Добавлено: 21:48 14-10-2014   
VBKesha
 817 EGP


Рейтинг канала: 3(31)
Репутация: 132
Сообщения: 3329
Откуда: обл.Брянская г. Трубчевск
Зарегистрирован: 07.12.2005
Там есть несколько видов захвата,
http://www.elite-games.ru/art/program/dxinput5.shtml
смотри CONST_DISCLFLAGS
Можно просто попробовать пропатчить DI чтобы всегда было DISCL_BACKGROUND | DISCL_NONEXCLUSIVE
Однако насколько я помню некоторые устройства нельзя было захватить с такими флагами...но я не уверен в этом.
_________________
JumpGate. Quantar Optimus.
Jumpgate(TM) . . . welcome to your next life . . . There's nothing you can't do
    Добавлено: 09:44 15-10-2014   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
Каким образом можно пропатчить DI? Не совсем понятно...
_________________
Дулички и фигушки
    Добавлено: 21:01 15-10-2014   
VBKesha
 817 EGP


Рейтинг канала: 3(31)
Репутация: 132
Сообщения: 3329
Откуда: обл.Брянская г. Трубчевск
Зарегистрирован: 07.12.2005
БулерМэн :
Каким образом можно пропатчить DI? Не совсем понятно...

Ну при помощи всяких прог типа IDA можно найти нужную функцию в нём разобраться как она работает и потом пропатчить как надо, это сложно и весело.(Можно ещё Proxy DLL написать)

Пришёл в голову второй вариант, где то когда то натыкался на Wine для Windows. Можно попробовать выковырнуть нужные либы оттуда а от них уже и исходники есть.
_________________
JumpGate. Quantar Optimus.
Jumpgate(TM) . . . welcome to your next life . . . There's nothing you can't do
    Добавлено: 21:48 15-10-2014   
БулерМэн
 420 EGP


Рейтинг канала: 2(21)
Репутация: 68
Сообщения: 1580
Откуда: Гороховец
Зарегистрирован: 07.02.2006
VBKesha :
Можно ещё Proxy DLL написать


Однако, есть вот это: http://www.mikoweb.eu/index.php?node=23
Реализация на Visual C++ есть, слава печенькам у меня есть рабочий MSVC. Будем хукать Хы...

PS А давайте писать в одну тему --> http://www.elite-games.ru/conference/viewtopic.php?t=61708

А эту тему можно прикрыть Улыбка
_________________
Дулички и фигушки

Последний раз редактировалось: БулерМэн (02:18 16-10-2014), всего редактировалось 1 раз
    Добавлено: 02:18 16-10-2014   
Канал Игры Мечты: «DirectInput проблема»
 
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Не цитируй другого - сам нецитируем будешь. (1-я заповедь пророка Harley)

  » DirectInput проблема | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18