代码之家  ›  专栏  ›  技术社区  ›  kenny Shiraz Bhaiji

有启动硬件设备扫描的API调用吗

  •  9
  • kenny Shiraz Bhaiji  · 技术社区  · 14 年前

    有关 this question 但是…是否可以通过API触发新的硬件设备扫描?我有一个串行端口蓝牙设备,可以通过API调用自动配对 32feet.net .NET Bluetooth 非常好用。虽然我可以在扫描设备时查询串行服务,但在蓝牙设备对话框的“COM端口”选项卡中不会显示COM端口。

    4 回复  |  直到 13 年前
        1
  •  5
  •   Community Egal    7 年前

    有关 Programmatically uninstall a device in windows device manager

    我的回答是:

    强制“扫描硬件” 更改“签出” How To Force Reenumeration of a Device Tree From an Application “那里的样品 演示如何强制整个树 重新枚举。

        2
  •  10
  •   user583432 Jeronimo Colon III    13 年前

    不确定这是否有助于你的整体问题,但这应该能回答你第一句话中的问题。

    几年前,我用NullSoft的NSI安装程序做了类似的工作。

    如果您只想触发普通硬件扫描,可以使用以下代码(在本问题中,每个.NET标记的C_中提供):

    这是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中查找它们。

        3
  •  1
  •   Community Egal    7 年前

    我在下面的回答有帮助吗? How can I find out a COM port number of a bluetooth device in c#?

    简而言之 System.IO.Ports.SerialPort.GetPortNames() 或wmi列出串行端口,例如powershell命令:

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

    也可以用代码来完成。

        4
  •  1
  •   Community Egal    7 年前

    刚刚找到 this SO post 这也可以解决我的问题或其他发现这个问题的人。