Эксклюзивная мышь / клавиатура с Winapi

DirectInput имел возможность иметь эксклюзивный доступ к мыши / клавиатуре. Сейчас я отхожу от использования DirectInput и мне было интересно, как я могу добиться того же поведения, просто используя winapi?

Изменить: я думаю, я мог бы просто использовать SetCursorPos () в середине окна и скрыть курсор с помощью ShowCursor ()

0

Решение

В случае мыши используйте API ввода Windows raw.

Используйте флаг RIDEV_CAPTUREMOUSE в вашей структуре RAWINPUTDEVICE для вызова RegisterRawInputDevices. Это предотвратит активацию других окон щелчками мыши. В сочетании с этим используйте функцию ShowCursor, чтобы скрыть курсор мыши. Эти две вещи будут воспроизводить исключительное поведение мыши DirectInput. В своих более поздних версиях DirectInput (для клавиатуры и мыши) является просто оболочкой для необработанного входного API.

Я не верю, что существует какой-либо эквивалентный контроль над клавиатурой (и я не думаю, что это было и в DirectInput.) Однако, как правило, это не проблема, поскольку пользователь не сможет перевести фокус ввода на другой приложение, если они специально не хотят с alt-tab или ctrl-alt-dlt.

1

Другие решения

Вы смотрели на SetCapture ()?

Это помогло бы, если бы ваш вопрос был яснее. Отсутствие ввода мышью (т.е. сообщений WM_MOUSEMOVE) в приложение, как правило, является то, что приложение является устойчивым к. В конце концов, идеально неподвижная мышь не будет генерировать такие сообщения. Я предполагаю, что вы делаете что-то немного необычное.

Существует также механизм для отслеживания мыши, выходящей из окна (окон) вашего приложения — см. Вот. Это включает в себя настройку структуры TrackMouseEvent, которая немного болезненна, но, похоже, все работает в моем опыте. Мне интересно, если на самом деле именно этот механизм останавливает ваше приложение?

Боюсь, больше ничего не могу поделать с информацией.

0

использование ClipCursor() чтобы ограничить мышь определенным прямоугольником экрана, таким как прямоугольник вашего окна.

0
По вопросам рекламы [email protected]