2010-02-02 14 views
9

relacionado con this question, pero ... ¿es posible activar mediante API un nuevo escaneo de dispositivo de hardware? Tengo un dispositivo Bluetooth de puerto serie que estoy emparejando automáticamente a través de llamadas API con 32feet.net .NET Bluetooth, que funciona bastante bien. Si bien puedo consultar los servicios seriales en el escaneo del dispositivo, los puertos COM no aparecen en la pestaña Puertos COM del diálogo Dispositivos Bluetooth.¿Existe una llamada API para iniciar un escaneo de dispositivos de hardware

Respuesta

10

No estoy seguro si esto ayudará a su problema general, pero esto debería responder a la pregunta en su primera oración.

Originalmente hice algo como esto usando el instalador NSIS de Nullsoft hace algunos años.

Si lo que desea es desencadenar una exploración de hardware de vainilla se puede utilizar el siguiente código (proporcionado en C# por la etiqueta .net en esta pregunta):

Esta es la clase de contenedor para el P/Invoke funciones

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); 
} 

Esta es una muestra de cómo usarlos

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..."); 

Acabo de traducir esto rápidamente de los documentos de MSDN C++ y lo probé en un pico, así sé que funciona, pero no es de calidad de producción. Además, si le interesan los códigos de retorno específicos, puede buscarlos en cfgmgr32.h.

+0

no miró las respuestas anteriores, pero en caso de que pensara que he copiado aquí la versión original que hice en NSIS: http://forums.winamp.com/showthread.php?t=192348 –

+0

Además, la mía está en C# y la muestra MS está en VB clásico. –

+0

Funciona como un encanto. Aviso: ¡TIENE QUE EJECUTAR LAS LLAMADAS DE WINAPI CON DERECHOS ADMINISTRATIVOS! Probado en Windows 8 x64 – JanW

1

Acabo de encontrar this SO post que también puede resolver mi problema u otros que encuentran esta pregunta.

Cuestiones relacionadas