2014-11-19 5 views
1

У меня есть DLL, в которую я вставляю DX-игры. В DLL я отключу XInput, исходный ввод, а также подкласс WndProc, чтобы отфильтровать кучу входных сообщений, таких как WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_INPUT и т. Д. Отключить XInput с помощью XInputEnable (FALSE) и зарегистрировать необработанные устройства с флагом RIDEV_REMOVE.Ввод в игру DX и бездействовать в игре

Хотя он отлично подходит для некоторых игр, он не работает для всех. В некоторых играх все еще есть вход для перемещения мыши/наведения, и я могу видеть состояние зависания для некоторого пользовательского интерфейса, когда я перехожу.

Мой вопрос - что я пропустил? Могла ли игра захватывать ввод других способов?

спасибо.

ответ

1

я могу думать об этих возможных способах применения все еще может получать ввод мыши:

  • Он повторно позволяет отправлять сообщения о Raw Input
  • Окна другого, чем один подклассы получают сообщения
  • Это опрос GetCursorPos
  • Использование API-интерфейса Windows HID или другого пользовательского интерфейса для доступа к мышиному устройству
  • Подключение событий мыши или сообщений Windows с использованием SetWindowsHookEx

Возможно, другие, но это все, о чем я могу думать в данный момент.

+0

Похоже, что в игре можно создать еще один поток и опрос для ввода. Есть ли способ обойти это? Помимо SuspendThread :-) –

+0

Не нужно было создавать другой поток для использования 'GetCursorPos'. Его можно было бы назвать однажды фреймом в том же потоке, который использовался для рендеринга. –

+0

Итак, это происходит в игровом цикле. Знаете ли вы какие-либо способы отключить это? Для меня это невозможно. –