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中查找它们.