2009-02-25 62 views
4

我正在編寫一些軟件,它可以使用Windows Bluetooth API自動連接藍牙設備。當它連接,Windows將自動開始安裝藍牙HID設備驅動程序,符合市場預期:Windows API:檢測驅動程序安裝完成

Installing Bluetooth HID drivers

這大約需要10-15秒,之後Windows顯示familar「準備就緒」的消息:

Hardware installed and ready for use

的問題是,BluetoothSetServiceState()回報只要安裝驅動開始,而不是當該設備實際上是準備使用。這會對我的代碼造成一些問題,因爲它一旦「連接」就會爲設備通信調用一個單獨的庫。前幾個調用失敗是因爲驅動程序尚未完成安裝,並且使這些連接嘗試似乎會干擾驅動程序的安裝,因爲如果在驅動程序安裝完成之前嘗試使用通信庫,Windows需要在設備啓動之前重新啓動使用。

我正在尋找的是一種方法來鉤住「準備使用」事件,當驅動程序安裝實際完成後,所以我不會讓我的通信庫過早調用。是否有一些Windows API調用可用於註冊函數回調或直接輪詢驅動程序安裝的狀態?

我寫這篇文章在香草C/C++,沒有.NET。謝謝你的幫助!

+0

您是否嘗試過WM_DEVICECHANGE和/或RegisterDeviceNotification? – Ismael 2009-02-26 00:19:04

回答

2

這裏給出的是什麼,我會做:

  1. 下載Winspector(或使用間諜++)
  2. 啓動Winspector和begin watching for Window Messages
  3. 安裝驅動程序
  4. 手錶完成驅動程序的安裝

我希望我能在更具描述性的WM的指示#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