Есть ли вызов API для запуска сканирования аппаратных устройств? - PullRequest
10 голосов
/ 02 февраля 2010

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

Ответы [ 4 ]

10 голосов
/ 14 мая 2010

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

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

Если вы просто хотите запустить аппаратное сканирование ванили, вы можете использовать следующий код (предоставленный в 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.

5 голосов
/ 02 февраля 2010

Относительно Программно удалить устройство в диспетчере устройств Windows

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

Для принудительного сканирования оборудования изменения "оформить заказ" Как заставить Пересчет дерева устройств из Приложение"образец там показывает, как заставить все дерево пересчитаться.

1 голос
/ 08 июля 2010

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

1 голос
/ 03 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...