Идентификация устройства ввода

Есть ли способ определить устройство ввода, подключенное к ПК? (например, геймпад, аркадный джойстик и т. д.)? В Xbox One SDK каждое устройство в Windows :: Xbox :: Input :: IController имеет свой собственный идентификатор, но Windows :: Gaming :: Input :: IGameController не имеет полей идентификаторов. Как определить подключенные устройства? Как определить, какой контроллер был удален, а какой еще активен?


person LarryTM    schedule 06.03.2017    source источник
comment
Это может оказаться полезным . Я не могу сказать наверняка, но чтение свойства user или прослушивание и проверка данных, запущенных на UserChanged, кажутся многообещающими способами.   -  person George    schedule 06.03.2017
comment
Я пробовал это, но это не сработает. Идентификатор пользователя (NonRoamableId) всегда один и тот же. Мой случай выглядит так: у меня есть два (или более) контроллера, подключенных к ПК, и когда один из них отключен, я хочу знать, какой из них.   -  person LarryTM    schedule 06.03.2017


Ответы (1)


В UWP мы можем использовать классы в Windows .Gaming. Input Namespace для обнаружения и отслеживания игровых устройств ввода. Поскольку вы добавили в свой вопрос тег gamepad, Я, например, воспользуюсь геймпадом.

Для обнаружения и отслеживания геймпадов мы можем использовать класс геймпада < / а>. Класс Gamepad предоставляет статическое свойство, Gamepads, читаемый -только список геймпадов, которые в данный момент подключены. Пожалуйста, не рекомендуется поддерживать свою собственную коллекцию вместо того, чтобы обращаться к ней через свойство Gamepads.

Когда у нас есть коллекция, мы можем использовать GamepadAdded и GamepadRemoved события для отслеживания геймпадов. Как их названия, эти два метода возникают при добавлении или удалении геймпада. Ниже приводится простой пример:

auto myGamepads = ref new Vector<Gamepad^>();

for (auto gamepad : Gamepad::Gamepads)
{
    myGamepads->Append(gamepad);
}

Gamepad::GamepadAdded += ref new EventHandler<Gamepad^>(Platform::Object^, Gamepad^ args)
{
    myGamepads->Append(args);
}

Gamepad::GamepadRemoved += ref new EventHandler<Gamepad^>(Platform::Object^, Gamepad^ args)
{
    unsigned int indexRemoved;

    if(myGamepads->IndexOf(args, &indexRemoved))
    {
        myGamepads->RemoveAt(indexRemoved);
    }
}

Если вы хотите определить, какой контроллер был удален, я думаю, вы можете воспользоваться index. Для получения дополнительной информации см. Обнаружение и отслеживание геймпадов.

Что касается других игровых устройств ввода, они похожи на геймпад, вы можете обратиться к документам в разделе Вход для игр.

person Jay Zuo    schedule 10.03.2017