英創(chuàng)公司ARM9系列工控主板預(yù)裝正版WinCE操作系統(tǒng),提供標(biāo)準(zhǔn)USB接口,本文介紹如何在應(yīng)用程序中判斷USB存儲設(shè)備的插入和移出操作。
方法一:思路是在應(yīng)用程序創(chuàng)建一個線程,在線程里循環(huán)定時查詢系統(tǒng)中是否存在USB存儲設(shè)備,可以通過讀取系統(tǒng)注冊表或調(diào)用 API函數(shù)來實現(xiàn),下面是通過API函數(shù)查詢USB存儲設(shè)備的程序片段。
STOREINFO StoreInfo;
hDevice = FindFirstStore( &StoreInfo );
if( INVALID_HANDLE_VALUE != hDevice )
{
do
{
// 判斷是否為USB存儲設(shè)備
if( 0 == _tcscmp( StoreInfo.szStoreName, _T(‘USB Hard Disk Drive’) ) )
{
// 如果查找到USB存儲設(shè)備,則打印信息到調(diào)試串口
RETAILMSG( 1, (TEXT(‘USB%shas been inserted\n’ ) ,
StoreInfo.szDeviceName ));
}
}while( FindNextStore( hDevice, &StoreInfo ) );
}
方法二:上面的方法在效率和實時性方面都不能令人滿意,通常只用作檢測U盤是否已接入到系統(tǒng)中,如果要實時的檢測U盤的插入,移出操作,推薦使用下面提出的方法。
當(dāng)USB設(shè)備插入或從系統(tǒng)中移出時,系統(tǒng)會產(chǎn)生WM_DEVICECHANGE消息,應(yīng)用程序只需要處理這個消息就可以方便的判斷U盤的插入和移出操作,我們需要關(guān)心WM_DEVICECHANGE消息wParam參數(shù)的兩個取值:
DBT_DEVICEARRIVAL // 設(shè)備插入
DBT_DEVICEREMOVECOMPLETE // 設(shè)備移出
(WM_DEVICECHANGE消息更詳細(xì)的信息,請參考MSDN WM_DEVICECHANGE Message http://msdn.microsoft.com/en-us/library/aa363480(VS.85).aspx)
值得注意的是當(dāng)網(wǎng)絡(luò)設(shè)備插入和移出時,也會觸發(fā)這個消息,這樣就會對判斷是否為USB設(shè)備產(chǎn)生影響,不過,在WM_DEVICECHANGE消息的lParam參數(shù)中保存了設(shè)備的相關(guān)信息,對設(shè)備類型進(jìn)行判斷,只需要獲得DEV_BROADCAST_VOLUME結(jié)構(gòu)中的dbcv_flags的值,當(dāng)它的值為DBTF_INET時,表示產(chǎn)生此消息的設(shè)備是網(wǎng)絡(luò)設(shè)備,它的值等于DBTF_MEDIA時,表示產(chǎn)生消息的是媒體設(shè)備。對WM_DEVICECHANGE消息了解后,就可以利用它,在程序中實時檢測USB設(shè)備的插入和移出了。下面是節(jié)略的程序片段。
// 窗口回調(diào)函數(shù)中,當(dāng)系統(tǒng)消息為WM_DEVICECHANGE時,調(diào)用此函數(shù)
LRESULT USBDetect( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
PDEV_BROADCAST_VOLUME dbvDev = (PDEV_BROADCAST_VOLUME)lParam;
if( dbvDev-》dbcv_flags & DBTF_MEDIA ) // 判斷是否為USB存儲設(shè)備
{
switch( wParam )
{
case DBT_DEVICEARRIVAL: // USB存儲設(shè)備插入
RETAILMSG(1, (TEXT( ‘USBDisk%c is inserted\n’), dbvDev-》dbcv_name[0]));
break;
case DBT_DEVICEREMOVECOMPLETE: // USB存儲設(shè)備移出
RETAILMSG( 1, (TEXT( ‘USBDisk%c is remove\n’), dbvDev-》dbcv_name[0] ));
break;
}
}
return 0;
}
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6100瀏覽量
36300
發(fā)布評論請先 登錄
光電測徑儀在自動檢測中的應(yīng)用
用于自動檢測的板測寬儀
伺服電機位置自動檢測霍爾元件
自然圖像中的對象自動檢測和提取
自動檢測技術(shù)課件
雷達(dá)故障自動檢測系統(tǒng)
自動檢測系統(tǒng)原理應(yīng)用和發(fā)展?fàn)顩r的研究

CAN總線在糧情自動檢測系統(tǒng)中的應(yīng)用

Maxim高速USB模擬開關(guān),可對便攜式設(shè)備進(jìn)行自動檢測
基于PXI和SCXI板卡系統(tǒng)的空調(diào)自動檢測和故障診斷

WinCE系統(tǒng)中USB設(shè)備自動檢測實現(xiàn)
基于USB和LabVIEW的ECU自動檢測系統(tǒng)的設(shè)計
英創(chuàng)信息技術(shù)WinCE主板與STM32多功能模塊通訊介紹
英創(chuàng)信息技術(shù)WinCE文件系統(tǒng)測試及故障分析簡介

評論