Что такое WPD
В одном своем заказе я столкнулся с проблемой. Необходимо было написать для одной программы проводник по подключаемым устройствам на C#. Проблема заключалась в том, что FolderBrowserDialog вообще не собирался работать с теми устройствами, у которых отсутствовала буква диска, а BrowseForFolder не мог работать с папками на таких устройствах, путь к которым превышал 260 символов. Ну что ж, напишем его сами. Для этого мы воспользуемся WDP.
Windows Portable Devices (WPD) позволяет компьютерам взаимодействовать с подключенными внешними устройствами. WPD обеспечивает гибкий и надежный способ взаимодействия компьютеров с музыкальными проигрывателями, флешками, мобильными телефонами, камерами и многими другими типами подключенных устройств.
Приложения, созданные на WPD, могут исследовать устройство, отправлять и получать контент и даже управлять устройством, например, делать снимок или отправлять текстовое сообщение. Система спроектирована так, чтобы быть гибкой, чтобы можно было исследовать многие типы устройств и расширять их, чтобы разработчики драйверов могли определять пользовательские свойства и команды для пользовательских устройств.
Вы можете писать как приложения Windows, так и веб-приложения с помощью WPD. Вы используете интерфейс программирования приложений WPD для создания приложений Windows. Эти приложения могут быть написаны на C ++, C # .Net или Visual Basic .Net. Интерфейс программирования WPD поддерживается в операционных системах Windows 7, Windows Vista и Windows XP. WPD Automation Object Model поддерживается только в Windows 7.
В этой статье мы научимся получать список подключенных устройств их id.
Настройка проекта
Запустите Visual Studio и создайте новое пустое решение именем с wpd. Далее добавьте новое консольное приложение под названием PortableDevices к нему. Чтобы получить доступ к wdp по API, вам нужно добавить ссылки на библиотеки COM “PortableDeviceApi 1.0 Type Library″ и “PortableDeviceTypes 1.0 Type Library”.
Затем выделите обе ссылки и измените свойство “Внедрить типы взаимодействия” на false. Теперь мы готовы, чтобы начать работать с wdp по API-интерфейсу.
Перечисление wpd-устройств
Добавьте новый класс в проект под названием PortableDeviceCollection. Этот класс представляет собой простую коллекция, которая отслеживает PortableDevice экземпляры. Когда экземпляр класса PortableDeviceCollection создается, то его конструктор создает экземпляр типа PortableDeviceManager, который может быть найден в библиотеке Тип PortableDeviceApi 1.0.
public class PortableDeviceCollection : Collection<PortableDevice>
{
private readonly PortableDeviceManager _deviceManager;
public PortableDeviceCollection()
{
this._deviceManager = new PortableDeviceManager();
}
public void Refresh()
{
//...
}
}
Идем дальше и добавляем класс PortableDevice к проекту. Мы передаем идентификатор устройства при создании нового экземпляра этого класса.
public class PortableDevice
{
public PortableDevice(string deviceId)
{
this.DeviceId = deviceId;
}
public string DeviceId { get; set; }
}
Давайте создадим коллекцию файлов wpd-совместимых устройств путем реализации метода Refresh() класса PortableDeviceCollection.
public void Refresh()
{
this._deviceManager.RefreshDeviceList();
// Определяем, сколько wpd-устройства подключено
var deviceIds = new string[1];
uint count = 1;
this._deviceManager.GetDevices(ref deviceIds[0], ref count);
// Получаем идентификатор для каждого подключенного устройства
deviceIds = new string[count];
this._deviceManager.GetDevices(ref deviceIds[0], ref count);
foreach(var deviceId in deviceIds)
{
Add(new PortableDevice(deviceId));
}
}
Мы поручаем PortableDeviceManager подсчитать, сколько устройств подключено к ПК. Далее мы получаем ИД устройства для каждого подключенного устройства, и добавляем новый экземпляр класса PortableDevice в коллекцию.
Добавьте следующий код в основной метод консольного приложения и нажмите клавишу F5 для запуска приложения:
var collection = new PortableDeviceCollection();
collection.Refresh();
foreach(var device in collection)
{
Console.WriteLine(device.DeviceId);
}
Console.WriteLine();
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
Вы увидите примерно следующее:
Это какой-то идентификатор устройства - в данном случае это мой мобильный телефон. Продолжение следует...
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты