Цель
Выполните аппаратный сброс определенного USB-ключа ANT, HID-устройства, с помощью приложения Delphi.
1. Сбой функции CM_Request_Device_Eject
Я попытался использовать эту CM_Request_Device_Eject
функцию, и она корректно выбрасывает мое устройство, но в некоторых системах автоматически не запускается автоматически.
Это код, который я использовал для извлечения устройства:
str := PChar(GetDeviceID(DeviceInfoData.DevInst));
status := CM_Locate_DevNodeA(dev, str, CM_LOCATE_DEVNODE_NORMAL);
status := CM_Request_Device_EjectA(dev, nil, '', 0, 0);
Есть ли способ убедиться, что мое устройство запустится, если оно не будет автоматически запускаться после извлечения при использовании этой функции?
2. Попытка функции SetupDiRestartDevices
В качестве альтернативы я попытался использовать эту SetupDiRestartDevices
функцию, и это правильно сбрасывает мое устройство, но за исключением того, что сбрасывает все HID-устройства (например, мышь, клавиатура и т. Д.), И для этой функции необходимы права администратора:
rslt1 := SetupDiRestartDevices(hDevInfo, DeviceInfoData);
Как я могу сбросить только мое устройство с помощью этой функции?
Вопрос
Есть ли общий рекомендованный способ выполнить аппаратный сброс конкретного USB-HID-устройства? Или есть способ решить любую из вышеуказанных проблем?