Есть ли вызов API для запуска сканирования для устройств

Связанный с этим вопросом, но... действительно ли возможно инициировать через API новое сканирование устройства? У меня есть bluetooth-устройство последовательного порта, что я соединяю автоматически через вызовы API с 32feet.net.NET Bluetooth, который работает вполне приятно. В то время как я могу запросить для последовательных сервисов в сканировании устройства, COM-порты не обнаруживаются на вкладке COM Ports диалогового окна bluetooth-устройств.

11
задан Community 23 May 2017 в 12:00
поделиться

4 ответа

Связанный с Программное деинсталляция устройства в менеджере устройств windows

Мой ответ оттуда:

Чтобы заставить 'сканирование аппаратуры' changes" checkout "How To Force Восстановление дерева устройств из Приложение " образец там показывает, как заставить всё дерево быть перерегистрированным.

5
ответ дан 3 December 2019 в 06:46
поделиться

Помогает ли мой ответ на следующий вопрос? Как узнать номер COM-порта устройства Bluetooth в C #?

Вкратце используйте System.IO.Ports.SerialPort.GetPortNames () или WMI для вывода списка последовательных портов, например Команда PowerShell:

C:\> Get-WmiObject -query "select DeviceID,PNPDeviceID from Win32_SerialPort" 

Что также можно сделать в коде.

1
ответ дан 3 December 2019 в 06:46
поделиться

Не уверен, что это поможет вашей общей проблеме, но это должно ответить на вопрос в вашем первом предложении.

Первоначально я сделал что-то подобное, используя установщик NSIS от Nullsoft несколько лет назад.

Если вы просто хотите запустить сканирование ванильного оборудования, вы можете использовать следующий код (предоставленный в C# для тега .net в этом вопросе):

Это класс-оболочка для функций P/Invoke

public static class Win32Api
{
    public const int CM_LOCATE_DEVNODE_NORMAL = 0x00000000;
    public const int CM_REENUMERATE_NORMAL = 0x00000000;
    public const int CR_SUCCESS = 0x00000000;

    [DllImport("CfgMgr32.dll", SetLastError=true)]
    public static extern int CM_Locate_DevNodeA(ref int pdnDevInst, string pDeviceID, int ulFlags);

    [DllImport("CfgMgr32.dll", SetLastError=true)]
    public static extern int CM_Reenumerate_DevNode(int dnDevInst, int ulFlags);
}

Это пример того, как их использовать

int pdnDevInst = 0;

        if (Win32Api.CM_Locate_DevNodeA(ref pdnDevInst, null, Win32Api.CM_LOCATE_DEVNODE_NORMAL) != Win32Api.CR_SUCCESS)
            throw new Exception("something...");

        if (Win32Api.CM_Reenumerate_DevNode(pdnDevInst, Win32Api.CM_REENUMERATE_NORMAL) != Win32Api.CR_SUCCESS)
            throw new Exception("something else...");

Я просто быстро перевел это из документов MSDN C++ и протестировал его в пике, чтобы я знал, что это работает, но это не качество производства. Кроме того, если вы заботитесь о конкретных кодах возврата, вы можете найти их в cfgmgr32.h.

11
ответ дан 3 December 2019 в 06:46
поделиться

Только что нашел этот пост SO, который также может решить мой вопрос или других, которые находят этот вопрос.

1
ответ дан 3 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: