Виртуальный порт com0com не открывается UWP

com0com COM13 и COM14

var selector = SerialDevice.GetDeviceSelector("COM14");
var informations = await DeviceInformation.FindAllAsync(selector);

if (informations.Any())
{
    var port = await SerialDevice.FromIdAsync(informations.First().Id);
}

informations.Any() является ложным

Где моя ошибка?

2 ответа

Я не пробовал это на UWP, но при доступе к COM-портам от 10 и выше возникает странная особенность Windows: вам нужно указать полное символическое имя устройства из пользовательского режима. То есть, предварять \\.\:

var selector = SerialDevice.GetDeviceSelector(@"\\.\COM14");

На сайте документации Microsoft SerialCommuncation описывается, что внутренние порты системы в настоящее время не поддерживаются: https://docs.microsoft.com/en-us/uwp/api/windows.devices.serialcommunication

Я не понимаю, почему нет, и они могут добавить эту функцию в будущем.

Обходной путь:

C# Используйте стандартный класс.NET System.IO.Ports.SerialPort (кроме GetPortNames()), все работает в.NET для UWP 6.1.5. В качестве замены для GetPortNames вы можете использовать P/Interop для GetCommPorts.

C++ / winrt Используйте новый вызов API Windows 10 RS3/4 OpenCommPort. См. Заголовочные файлы Windows для прототипа функции, так как эта функция в настоящее время не документирована в документах MS.

Обратите внимание, также убедитесь, что в вашем файле.appxmanifest ваше приложение "запрашивает" доступ к последовательному порту:

<DeviceCapability Name="serialcommunication">
  <Device Id="any">
    <Function Type="name:serialPort" />
  </Device>
</DeviceCapability>
Другие вопросы по тегам