输入设备标识

Input Device Identification

有什么方法可以识别连接到PC的输入设备吗? (例如游戏手柄、街机摇杆等)?在 Xbox One SDK 中,Windows::Xbox::Input::IController 中的每个设备都有自己的 ID,但 Windows::Gaming::Input::IGameController 中没有任何 ID 字段。 如何识别连接的设备?如何确定哪个控制器被删除,哪个控制器仍然有效?

在UWP中,我们可以在你的问题的Windows​.Gaming​.Input Namespace to detect and track gaming input devices. As you've added 标签下使用类,我会以游戏手柄为例。

要检测和跟踪游戏手柄,我们可以使用 Gamepad Class. The Gamepad class provides a static property, Gamepads,这是一个 read-only 当前连接的游戏手柄列表。请不要建议您维护自己的 collection 而不是通过 Gamepads 属性.

访问它们

一旦我们有了 collection,我们就可以使用 GamepadAdded and 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);
    }
}

如果你想确定哪个控制器被删除了,我想你可以利用索引。更多信息,请参阅Detect and track gamepads

其他游戏输入设备,类似于手柄,可以参考Input for games下的文档。