Как выполнить аппаратный сброс определенного HID-устройства?

Цель

Выполните аппаратный сброс определенного 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-устройства? Или есть способ решить любую из вышеуказанных проблем?

delphi,winapi,hid,

12

Ответов: 1


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-устройства? Или есть способ решить любую из вышеуказанных проблем?

112
1
+50

Жесткий сброс - это не то, что вы можете сделать самостоятельно ... чтобы выполнить жесткий сброс на какое-то устройство, это конкретное устройство должно поддерживать жесткий сброс ... способы жесткого сброса варьируются от устройства к устройству. некоторые устройства имеют кнопку на нем, чтобы выполнить жесткий сброс. для некоторых требуется фрагмент кода. большая часть компании выпускает набор списков AT-команд для определенных устройств.

например .. вот список команд, выпущенных производителем, для конкретного устройства

это может помочь вам в этом случае ... если не продолжать поиск в Google.

Дельфы, WinAPI, спрятался,
Похожие вопросы