Эксклюзивный прямой ввод

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

Мой подход к настоящему заключается в использовании DirectInput, установите флаг: DISCL_EXCLUSIVE | DISCL_ФОН.

Однако я понимаю, что DISCL_EXCLUSIVE не действует? Всякий раз, когда я устанавливаю DISCL_EXCLUSIVE или DISCL_NONEXCLUSIVE, это одно и то же.

А вчера я нашел это: http://www.gamedev.net/topic/656250-directinput-exclusive-access-to-joypad/ Согласно тому, что он упоминает, этот флаг ничего не делает?

Так есть ли другое решение моей проблемы? Спасибо.


person user3819161    schedule 11.07.2014    source источник
comment
Почему вы хотите это сделать? Это очень недружественное поведение приложения.   -  person Luaan    schedule 11.07.2014


Ответы (1)


Но DISCL_EXCLUSIVE | DISCL_BACKGROUND не предоставит вам эксклюзивный доступ к устройству. Приложение переднего плана всегда будет иметь приоритет, монопольное или нет. Вы не должны воровать контроль у пользователя.

Итак, для чего это нужно? Несколько приложений, работающих в фоновом режиме. Это почти единственный вариант использования, а также единственный разумный момент с точки зрения пользователя. Когда приложение запрашивает эксклюзивный доступ к устройству, которое уже используется исключительно, одно из них выйдет из строя (IIRC более старый) и ему придется повторно получить устройство (чего, конечно, не должно, потому что это просто закончится войной). для контроля :)).

В большинстве случаев вы должны просто использовать DISCL_NONEXCLUSIVE | DISCL_FOREGROUND. Эксклюзивный фоновый доступ предназначен только для таких вещей, как управление медиаплеером или что-то в этом роде :)

person Luaan    schedule 11.07.2014
comment
Это моя поставленная задача. Мне нужно создать механизм/приложение, которое соответствует желанию: никакое другое приложение не сможет получить доступ к геймпаду, как только мое приложение приобретет его. Это очень похоже на владение, оккупацию ресурсов. А причину я сам не знаю :)) Просто надо сделать :( - person user3819161; 11.07.2014
comment
@ user3819161 Ну, тогда все готово - это невозможно, просто и ясно :) Это было возможно только тогда, когда безопасность не считалась большой проблемой на настольных компьютерах, то есть до того, как настольная Windows переключилась на ядро ​​​​NT. За исключением написания собственных драйверов устройств, нет никакого способа обеспечить это. Конечно, безопасность всегда имеет уязвимости в нескольких местах, но их использование приведет к множеству проблем с совместимостью. - person Luaan; 11.07.2014
comment
Спасибо за вашу помощь. Я просто сообщу своему боссу :D Я все еще думаю только об одном: почему Microsoft предоставляет эти опции, но поведение не такое, как кажется? По крайней мере, они могли предупредить нас? - person user3819161; 14.07.2014
comment
@user3819161 user3819161 Ну, это хорошо описано в MSDN, которая, по сути, является документацией для всех вещей MS :) Они даже показывают причины использования EXCLUSIVE и как это сделать. И, конечно же, раньше это работало так, как вы ожидаете — еще в семействе Windows 95. - person Luaan; 14.07.2014