其餘默認,點擊Finished
在綠字下面添加如下紅色代碼
/////////////////////////////////////////////////////////////////////////////
// CUSBListeningDlg message handlers
// Author : isdong
#include "Dbt.h"
#include <malloc.h>
#include <Rpcdce.h>
#pragma comment(lib,"Rpcrt4.lib")
PVOID g_hNotifyDevNode;
void CUSBListeningDlg::RegisterForDevChange(HWND hDlg, PVOID *hNotifyDevNode)
{
DEV_BROADCAST_DEVICEINTERFACE *pFilterData =
(DEV_BROADCAST_DEVICEINTERFACE*)
_alloca(sizeof(DEV_BROADCAST_DEVICEINTERFACE));
ASSERT (pFilterData);
UUID GUID_CLASS_INPUT;
UuidFromString((unsigned char*)"36FC9E60-C465-11CF-8056-444553540000", &GUID_CLASS_INPUT);
ZeroMemory(pFilterData, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
pFilterData->dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
pFilterData->dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
pFilterData->dbcc_classguid = GUID_CLASS_INPUT;
/*
USB dbcc_classguid :{36FC9E60-C465-11CF-8056-444553540000}
可以在註冊表中查詢 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\ROOT_HUB
此鍵值下面有你的設備列表你可以查到的,只能用那個*/
*hNotifyDevNode = RegisterDeviceNotification(hDlg, pFilterData, DEVICE_NOTIFY_WINDOW_HANDLE);
}
//使用嚮導,添加DefWindowProc函數
LRESULT CUSBListeningDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DEVICECHANGE:
{
switch (wParam)
{
case DBT_DEVICEARRIVAL:
// Handle device arrival
MessageBox("Handle device arrival");
break;
case DBT_DEVICEQUERYREMOVE:
// Handle device removal request
MessageBox("Handle device removal request");
break;
case DBT_DEVICEREMOVECOMPLETE:
// Handle device removal
MessageBox("Handle device removal");
break;
}
}
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
//在OnInitDialog函數中添加RegisterForDevChange函數
BOOL CUSBListeningDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
RegisterForDevChange(m_hWnd,&g_hNotifyDevNode);
return TRUE; // return TRUE unless you set the focus to a control
}
***若xp編譯不通過,提示 DEV_BROADCAST_DEVICEINTERFACE類型的變量未被定義 在stdafx.h中定義
#ifndef WINVER // 允許使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
#define WINVER 0x0500 //爲 Windows98 和 Windows 2000 及更新版本改變爲適當的值。
#endif
如果是靜態檢測,即U盤已經插入,可以通過WinAPI GetDriveType 獲得驅動器類型。用一個循環判斷所有當前驅動器(結合GetLogicalDriveStrings),如果類型爲DRIVE_REMOVABLE,則該驅動器爲U盤。