0

我正在尝试在桌面应用程序中使用 C++/WinRT 枚举系统上的所有设备:

auto devices = winrt::Windows::Devices::Enumeration::DeviceInformation::FindAllAsync().get();
for (int i = 0; i < devices.Size(); i ++)
{
    auto device = devices.GetAt(i);
    auto props = device.Properties();
    if (props.HasKey(L"System.Devices.InterfaceClassGuid")) {
        // Get the GUID and print it
    }
}

这篇 MSDN 文章指出:

如果未指定 DeviceInformationKind,或者您使用的方法未提供 DeviceInformationKind 参数,则默认种类为 DeviceInterface。

此 MSDN 文章将其System.Devices.InterfaceClassGuid列为.DeviceInterface

但是,DeviceInformation返回的所有对象FindAllAsync都没有System.Devices.InterfaceClassGuid属性。我在这里做错了什么?

4

1 回答 1

1

事实证明,我错过了第二篇文章中的一个重要部分:

您还可以使用这些属性来指示您希望为每个设备返回哪些信息。这使您能够指定返回给您的应用程序的设备信息。

您实际上必须指定要返回的属性。这有效:

std::vector<winrt::hstring> additionalProperties = {
    L"System.Devices.InterfaceClassGuid"
};
auto devices = winrt::Windows::Devices::Enumeration::DeviceInformation::FindAllAsync(L"", std::move(additionalProperties)).get();
于 2020-06-24T21:28:20.480 回答