WINDOWS SDK 檢測U盤插入
今天一位老兄要我幫忙做一個軟件,需要把在U盤插入USB接口激活之后自動把U盤里的內容拷貝到硬上。拷貝文件不難,麻煩的就是不知道怎么檢測U盤是否激活,激活后又是哪個盤符。
google了一下,在MSDN上看了幾個例子,找到了檢測U盤插入,并確定其盤符的方法。
下面給出窗口的回調函數:
FirstDriveFromMask是一個用返回盤符(A,B,C ....)的簡單函數
google了一下,在MSDN上看了幾個例子,找到了檢測U盤插入,并確定其盤符的方法。
下面給出窗口的回調函數:
?1?LRESULT?CALLBACK?WndProc?(HWND?hWnd,?UINT?message,?WPARAM?wParam,?LPARAM?lParam)
?2?
?3?{
?4?????
?5?????switch?(message)?
?6?????{
?7?????????
?8?????case?WM_CREATE:/*初始化*/
?9?????????
10?????????MessageBox(hWnd,?"go!",?"405?Studio",?MB_OK);
11?????????
12?????????break;
13?????????
14?????case?WM_DEVICECHANGE:
15?????????
16?????????if(wParam?==?DBT_DEVICEARRIVAL)?//設備激活
17?????????{
18?????????????PDEV_BROADCAST_HDR?lpdb?=?(PDEV_BROADCAST_HDR)lParam;
19?????????????
20?????????????PDEV_BROADCAST_VOLUME?lpdbv?=?(PDEV_BROADCAST_VOLUME)lpdb;
21?????????????
22?????????????char?szMsg[80];
23?????????????wsprintf?(szMsg,?"Drive?%c:?Media?has?arrived.\n",
24?????????????????FirstDriveFromMask(lpdbv?->dbcv_unitmask));
25?????????????
26?????????????MessageBox?(hWnd,?szMsg,?"WM_DEVICECHANGE",?MB_OK);
27?????????????
28?????????}
29?????????
30?????????break;
31?????????
32?????default:
33?????????return?DefWindowProc?(hWnd,?message,?wParam,?lParam)?;
34?????}
35?????
36?????return?0;
37?????
38?}
原理很簡單檢測U盤是否被插入是通過監聽WM_DEVICECHANGE消息來實現的。18,19行是從WM_DEVICECHANGE的lParam里獲取盤符。?2?
?3?{
?4?????
?5?????switch?(message)?
?6?????{
?7?????????
?8?????case?WM_CREATE:/*初始化*/
?9?????????
10?????????MessageBox(hWnd,?"go!",?"405?Studio",?MB_OK);
11?????????
12?????????break;
13?????????
14?????case?WM_DEVICECHANGE:
15?????????
16?????????if(wParam?==?DBT_DEVICEARRIVAL)?//設備激活
17?????????{
18?????????????PDEV_BROADCAST_HDR?lpdb?=?(PDEV_BROADCAST_HDR)lParam;
19?????????????
20?????????????PDEV_BROADCAST_VOLUME?lpdbv?=?(PDEV_BROADCAST_VOLUME)lpdb;
21?????????????
22?????????????char?szMsg[80];
23?????????????wsprintf?(szMsg,?"Drive?%c:?Media?has?arrived.\n",
24?????????????????FirstDriveFromMask(lpdbv?->dbcv_unitmask));
25?????????????
26?????????????MessageBox?(hWnd,?szMsg,?"WM_DEVICECHANGE",?MB_OK);
27?????????????
28?????????}
29?????????
30?????????break;
31?????????
32?????default:
33?????????return?DefWindowProc?(hWnd,?message,?wParam,?lParam)?;
34?????}
35?????
36?????return?0;
37?????
38?}
FirstDriveFromMask是一個用返回盤符(A,B,C ....)的簡單函數
?1?char?FirstDriveFromMask?(ULONG?unitmask)
?2?{
?3?????char?i;
?4?????
?5?????for?(i?=?0;?i?<?26;?++i)
?6?????{
?7?????????if?(unitmask?&?0x1)
?8?????????????break;
?9?????????unitmask?=?unitmask?>>?1;
10?????}
11?????
12?????return?(i?+?'A');
13?}
?2?{
?3?????char?i;
?4?????
?5?????for?(i?=?0;?i?<?26;?++i)
?6?????{
?7?????????if?(unitmask?&?0x1)
?8?????????????break;
?9?????????unitmask?=?unitmask?>>?1;
10?????}
11?????
12?????return?(i?+?'A');
13?}
posted on 2006-04-12 23:33 405 Studio 閱讀(2338) 評論(2) 編輯 收藏 所屬分類: Windows Programing