我正在编写一些使用 Windows 自动连接蓝牙设备的软件 蓝牙API. 。连接后,Windows 按预期自动开始安装蓝牙 HID 设备驱动程序:

Installing Bluetooth HID drivers

这大约需要 10-15 秒,之后 Windows 显示熟悉的“准备使用”消息:

Hardware installed and ready for use

问题是 BluetoothSetServiceState() 驱动安装后立即返回 开始, ,而不是当设备实际准备好使用时。这会给我的代码带来一些问题,因为一旦“连接”,它就会调用一个单独的库来进行设备通信。前几次调用失败是因为驱动程序尚未完成安装,并且进行这些连接尝试似乎会干扰驱动程序安装,因为如果我在驱动程序安装完成之前尝试使用通信库,Windows 会希望在设备可以重新启动之前重新启动使用。

我正在寻找的是一种在驱动程序安装实际完成时挂钩“准备使用”事件的方法,这样我就不会过早地调用通信库。是否有一些 Windows API 调用可以用来注册函数回调或直接轮询驱动程序安装的状态?

我是用普通的 C/C++ 编写的,而不是 .NET。感谢您的帮助!

有帮助吗?

解决方案

您可能想看看这个示例代码注册设备通知 功能。我不确定 100%,但如果您为设备类指定正确的 guid,它似乎可以工作。

其他提示

这里是什么我都会做的事:

  1. 下载 Winspector (或使用间谍++)
  2. 启动Winspector, 开始看窗口的消息
  3. 安装你的司机
  4. 看看窗口管理的指示完成程序安装

我希望我能更具描述性上#4,但我不熟悉的特定窗口的信息需要。 看看这里可能的窗口期待的消息.

然而,一旦你确定正确的消息窗口寻找,然后编程方式有你的程序等(和处理)这WM。 演示有优秀写了关于如何做到这C++.就个人而言, 我宁愿要这样做,在德尔斐.

如果是网络绑定,则 RNDIS 会在完成安装时发送一条消息 RNDIS驱动程序实施指南和定义 RNDIS

或者

您可以通过 Devcon 实用程序以编程方式安装或查询设备列表(源代码可通过 MSDN 获得),如下所示 例子

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top