DirectInput имел возможность иметь эксклюзивный доступ к мыши / клавиатуре. Сейчас я отхожу от использования DirectInput и мне было интересно, как я могу добиться того же поведения, просто используя winapi?
Изменить: я думаю, я мог бы просто использовать SetCursorPos () в середине окна и скрыть курсор с помощью ShowCursor ()
В случае мыши используйте API ввода Windows raw.
Используйте флаг RIDEV_CAPTUREMOUSE в вашей структуре RAWINPUTDEVICE для вызова RegisterRawInputDevices. Это предотвратит активацию других окон щелчками мыши. В сочетании с этим используйте функцию ShowCursor, чтобы скрыть курсор мыши. Эти две вещи будут воспроизводить исключительное поведение мыши DirectInput. В своих более поздних версиях DirectInput (для клавиатуры и мыши) является просто оболочкой для необработанного входного API.
Я не верю, что существует какой-либо эквивалентный контроль над клавиатурой (и я не думаю, что это было и в DirectInput.) Однако, как правило, это не проблема, поскольку пользователь не сможет перевести фокус ввода на другой приложение, если они специально не хотят с alt-tab или ctrl-alt-dlt.
Вы смотрели на SetCapture ()?
Это помогло бы, если бы ваш вопрос был яснее. Отсутствие ввода мышью (т.е. сообщений WM_MOUSEMOVE) в приложение, как правило, является то, что приложение является устойчивым к. В конце концов, идеально неподвижная мышь не будет генерировать такие сообщения. Я предполагаю, что вы делаете что-то немного необычное.
Существует также механизм для отслеживания мыши, выходящей из окна (окон) вашего приложения — см. Вот. Это включает в себя настройку структуры TrackMouseEvent, которая немного болезненна, но, похоже, все работает в моем опыте. Мне интересно, если на самом деле именно этот механизм останавливает ваше приложение?
Боюсь, больше ничего не могу поделать с информацией.
использование ClipCursor()
чтобы ограничить мышь определенным прямоугольником экрана, таким как прямоугольник вашего окна.