我正在编写一些使用Windows Bluetooth API自动连接蓝牙设备的软件。当它连接时,Windows会自动开始安装蓝牙HID设备驱动程序,如预期的那样:
这需要大约10-15秒,之后Windows会显示熟悉的“随时可用”消息:
问题是BluetoothSetServiceState()
在驱动程序安装开始后立即返回,而不是在设备实际可以使用时返回。这会导致我的代码出现一些问题,因为只要它“连接”,它就会调用一个单独的库来进行设备通信。前几个调用失败,因为驱动程序尚未完成安装,并且进行这些连接尝试似乎会干扰驱动程序安装,因为如果我在驱动程序安装完成之前尝试使用通信库,则Windows希望在设备启动之前重新启动使用。
我正在寻找的是一种挂钩“即用型”事件的方法,当驱动程序安装实际完成时,所以我不会过早地进行通信库调用。是否有一些Windows API调用可用于注册函数回调或直接轮询驱动程序安装的状态?
我用vanilla C / C ++编写这个,没有.NET。谢谢你的帮助!
答案 0 :(得分:4)
你可能想看看 this sample code和RegisterDeviceNotification功能。我不确定100%,但如果你为你的设备类指定了正确的guid,它似乎有用。
答案 1 :(得分:2)
以下是我要做的事情:
我希望我能在#4上更具描述性,但我不熟悉您需要的特定窗口消息。 Have a look here for possible Window Messages to expect
但是,一旦确定要查找的正确窗口消息,然后以编程方式让您的程序等待(并处理)此WM。 CodeProject has an excellent write up on how to do this in C++。就个人而言,I'd prefer to do it in Delphi。
答案 2 :(得分:0)
如果是网络绑定,则RNDIS按照RNDIS Driver Implemenation guide完成安装后会发送消息 和RNDIS
的定义或
您可以通过Devcon实用程序(MSDN中提供的源代码)以编程方式安装或查询设备列表,如Examples中所述