Как перечислить все устройства HID?C # - PullRequest
5 голосов
/ 02 декабря 2011

Мне нужно перечислить все устройства HID, подключенные к моему ПК.Я пытался использовать этот ответ , но он перечисляет USBHub-устройства, и я не могу найти там свое HID-устройство.

РЕДАКТИРОВАТЬ : Я буду рад узнать, существует ли какой-либо метод WIN32 API, для получения статуса устройства USB (онлайн / офлайн) с использованием PID и VID?

Ответы [ 3 ]

2 голосов
/ 02 декабря 2011

Я нашел ответ. Эта ссылка объясняет, как это сделать с ManagementObjectSearcher.

Спасибо всем, кто ответил!

2 голосов
/ 02 декабря 2011

WDK от Microsoft содержит документацию по функциям HID и обзор их использования. WDK также включает файлы заголовков для использования с программами Visual C ++, которые обращаются к устройствам класса HID (hidsdi.h, hidusage.h, hidpi.h).

Проверьте эту ссылку Jan Axelson's Lakeview Research - HID Windows Programming.

Здесь также доступен вопрос относительно устройств HID, как вы указали в своем вопросе: Сканирование для устройства интерфейса пользователя (HID) с использованием C #

0 голосов
/ 04 ноября 2018

Вы можете перечислить устройства Hid с помощью API Windows, например:

        public static Collection<DeviceInformation> GetConnectedDeviceInformations()
        {
            var deviceInformations = new Collection<DeviceInformation>();
            var spDeviceInterfaceData = new SpDeviceInterfaceData();
            var spDeviceInfoData = new SpDeviceInfoData();
            var spDeviceInterfaceDetailData = new SpDeviceInterfaceDetailData();
            spDeviceInterfaceData.CbSize = (uint)Marshal.SizeOf(spDeviceInterfaceData);
            spDeviceInfoData.CbSize = (uint)Marshal.SizeOf(spDeviceInfoData);

            var hidGuid = new Guid();

            APICalls.HidD_GetHidGuid(ref hidGuid);

            var i = APICalls.SetupDiGetClassDevs(ref hidGuid, IntPtr.Zero, IntPtr.Zero, APICalls.DigcfDeviceinterface | APICalls.DigcfPresent);

            if (IntPtr.Size == 8)
            {
                spDeviceInterfaceDetailData.CbSize = 8;
            }
            else
            {
                spDeviceInterfaceDetailData.CbSize = 4 + Marshal.SystemDefaultCharSize;
            }

            var x = -1;

            while (true)
            {
                x++;

                var setupDiEnumDeviceInterfacesResult = APICalls.SetupDiEnumDeviceInterfaces(i, IntPtr.Zero, ref hidGuid, (uint)x, ref spDeviceInterfaceData);
                var errorNumber = Marshal.GetLastWin32Error();

                //TODO: deal with error numbers. Give a meaningful error message

                if (setupDiEnumDeviceInterfacesResult == false)
                {
                    break;
                }

                APICalls.SetupDiGetDeviceInterfaceDetail(i, ref spDeviceInterfaceData, ref spDeviceInterfaceDetailData, 256, out _, ref spDeviceInfoData);

                var deviceInformation = GetDeviceInformation(spDeviceInterfaceDetailData.DevicePath);
                if (deviceInformation == null)
                {
                    continue;
                }

                deviceInformations.Add(deviceInformation);
            }

            APICalls.SetupDiDestroyDeviceInfoList(i);

            return deviceInformations;
}

Полный класс: https://github.com/MelbourneDeveloper/Hid.Net/blob/master/Hid.Net/Windows/WindowsHIDDevice.cs

APIS: https://github.com/MelbourneDeveloper/Hid.Net/blob/master/Hid.Net/Windows/APICalls.cs

...