是否有API调用来启动硬件设备的扫描

ken*_*nny 11 .net windows winapi bluetooth

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

小智 11

不确定这是否有助于解决您的整体问题,但这应该在您的第一句话中回答这个问题.

几年前,我最初使用Nullsoft的NSIS安装程序做了类似的事情.

如果您只想触发vanilla硬件扫描,可以使用以下代码(在此问题中,根据.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);
}
Run Code Online (Sandbox Code Playgroud)

这是如何使用它们的示例

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...");
Run Code Online (Sandbox Code Playgroud)

我刚刚从MSDN C++文档中快速翻译了这个并在一个峰值中进行了测试,所以我知道它有效,但它不是生产质量.此外,如果您关心特定的返回代码,可以在cfgmgr32.h中查找它们.


Rud*_*ddy 5

与以编程方式在Windows设备管理器中卸载设备相关

我的回答是:

为了强制"扫描硬件更改"结帐" 如何强制从应用程序重新枚举设备树 ",该示例显示了如何强制重新枚举整个树.