驅動中識別Usb裝置插入拔出訊息

來源:互聯網
上載者:User
2009-07-19 21:05 驅動中識別Usb裝置插入拔出訊息

歡迎看看我的另一個小窩,說不定有意外的驚喜哦 ^_^ www.devres.info

驅動中識別Usb裝置插入拔出訊息 收藏
     想要在驅動中捕獲Usb裝置的插入和拔出訊息,還真是有點困難(當然是對於我這半瓶水來說的)。查查網上,到處都提到的是WM_DEVICECHANGE訊息,可是這個是視窗事件,驅動中沒有視窗怎麼辦?沒有視窗自己建吧......

    

     首先,介紹下 WM_DEVICECHANGE 訊息和應用程式檢測方法,只關心我用到的部分。

     WindowProc(UINT message, WPARAM wParam, LPARAM lParam);    // 訊息處理函數

     message == WM_DEVICECHANGE;

     wParam == DBT_DEVICEARRIVAL;    // 插入裝置

                   == DBT_DEVICEREMOVECOMPLETE;    // 拔出裝置

    

     其次,當我使用應用程式測試成功後,出現新問題了,第一,要讓應用程式和PDA一同啟動;第二,要隱藏應用程式的視窗。第一個問題,貌似可以通過在啟動項建立捷徑的方法解決(沒有實驗......);第二個問題,原以為很簡單,只要設定屬性visible就行了,沒想到不行(我用的是對話方塊程式,在調用ShowWindow也沒用)。這下可就犯難了......(這要是有哪位大哥知道方法,望不吝賜教)

     最後,介紹我用的方法——背景程式,說穿了就是一個dll,這個東西在啟動是,是由系統的服務程式載入的,所以可以保證每次啟動時,都可以隨系統運行。再說視窗的問題,就是可以自己控制的了,原來說到底是對mfc機制不熟,不知道它在那又把視窗顯示出來了......

      當然除了檢測WM_DEVICECHANGE,還有其他方法也可以擷取USB的插入拔出訊息,可以自己建立訊息佇列,來擷取相應的硬體訊息,此處只做拋磚引玉,未進行深入研究。

      首先,使用CreateMsgQueue()建立一個訊息佇列,需要一個MSGQUEUEOPTIONS結構的參數。

      其次,訊息佇列建立成功後,使用RequestDeviceNotifications()可以註冊訊息佇列到系統中,這樣就可以擷取相應訊息,這裡的第一個參數我使用NULL,就是檢測所有硬體裝置訊息。

      再次,以上完成後,就是等待訊息佇列中訊息到達WaitForSingleObject(hMsg...),使用ReadMsgQueue()讀取訊息即可,此函數的參數類似ReadFile(),讀取到訊息後就是相應的處理了。

      最後,關閉註冊到系統的訊息佇列,釋放訊息佇列資源......

      通過應用程式測試,可以列印出系統中所有的硬體裝置名稱,在usb裝置插入和拔出時,收到相應的訊息。但是當我們把程式在項目中測試時,發現了新的問題,當佔用Usb裝置連接埠時,此時拔出Usb裝置,兩種方法竟然收不到任何訊息......  

     

      最終只好在驅動中輪詢usb裝置連接埠,以此來判定Usb有沒有插入或者拔出。

      以上所寫全部為個人理解,限於水平有限,難免存在缺漏和不足,也請看到文章的人海涵。另外說明本部落格內凡是技術文章全部為原創,書寫風格類似於工作筆記,本著尊重個人勞動成果的原則,如需轉載或引用,請添加原始連結或註明出處。

    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.