如何检测USB设备的插入和拔出,并读设备中的信息内容?

jyhxl 2006-06-26 04:15:37
最好是能有VC工程实例了,如果确实帮到了,给分是没问题,给钱也可以f:)
...全文
1377 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Easying 2006-08-29
  • 打赏
  • 举报
回复
http://www.codeproject.com/useritems/HwDetect.asp
How to Detect Hardware Insertion and/or Removal
liu811231 2006-06-29
  • 打赏
  • 举报
回复
学习ing....
碧螺春的马甲 2006-06-27
  • 打赏
  • 举报
回复
DDK 中的 usbview 是很好的例子。
jiang0730 2006-06-26
  • 打赏
  • 举报
回复
BOOL CMainFrame::OnDeviceChange( UINT nEventType, DWORD dwData)

#define DBT_DEVICEARRIVAL 0x8000 // 是光盘插入信息。
#define DBT_DEVNODES_CHANGED 0x0007

Applications that require more information should register for device notification.
xazl 2006-06-26
  • 打赏
  • 举报
回复
WM_DEVICECHANGE
The WM_DEVICECHANGE device message notifies an application or device driver of a change to the hardware configuration of a device or the computer.

Event = (UINT) wParam;
dwData = (DWORD) lParam;

Parameters
Event
Event type. This parameter can be one of the following values: Value Meaning
DBT_CONFIGCHANGECANCELED A request to change the current configuration (dock or undock) has been canceled.
DBT_CONFIGCHANGED The current configuration has changed, due to a dock or undock.
DBT_DEVICEARRIVAL A device has been inserted and is now available.
DBT_DEVICEQUERYREMOVE Permission is requested to remove a device. Any application can deny this request and cancel the removal.
DBT_DEVICEQUERYREMOVEFAILED A request to remove a device has been canceled.
DBT_DEVICEREMOVECOMPLETE A device has been removed.
DBT_DEVICEREMOVEPENDING A device is about to be removed. Cannot be denied.
DBT_DEVICETYPESPECIFIC A device-specific event has occurred.
DBT_QUERYCHANGECONFIG Permission is requested to change the current configuration (dock or undock).
DBT_USERDEFINED The meaning of this message is user-defined.
xazl 2006-06-26
  • 打赏
  • 举报
回复
要获取用户当前插入的U盘的盘符可以采用如下方法:
1)添加WM_DEVICECHANGE的消息处理函数OnDeviceChange,在该函数中捕获DBT_DEVICEARRIVAL事件(当U盘插入时,OS会发WM_DEVICECHANGE广播消息,该消息的wParam中会包含DBT_DEVICEARRIVAL事件),同时得到DEV_BROADCAST_VOLUME结构的数据,DEV_BROADCAST_VOLUME结构的dbcv_unitmask成员是一个Mask变量,最低位对应A,其次是B,...,根据它可就可以得到当前U盘的盘符了.
BOOL CMainFrame::OnDeviceChange( UINT nEventType, DWORD dwData)
{
PDEV_BROADCAST_HDR pDevBroadcastHdr;
PDEV_BROADCAST_VOLUME pDevBroadcastVolume;
CString strVolume="";
switch (nEventType)
{
case DBT_DEVICEARRIVAL:
pDevBroadcastHdr = (PDEV_BROADCAST_HDR) dwData;
if (pDevBroadcastHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
pDevBroadcastVolume = (PDEV_BROADCAST_VOLUME)pDevBroadcastHdr;
xJudgeDeviceChangePath(pDevBroadcastVolume->dbcv_unitmask,strVolume);
}
break;
......
default:
return TRUE;
}
.......
}

xJudgeDeviceChangePath的代码如下:
void xJudgeDeviceChangePath(DWORD dwData, CString &strPath)

{

char i;

for (i = 0; i < 26; ++i)

{

if (dwData & 0x1)

{

CString str = char(i+'A');

strPath = str+_T(":");

break;

}

dwData = dwData >> 1;

if(dwData == 0x0000) break;

}

}



lixiaosan 2006-06-26
  • 打赏
  • 举报
回复
WM_DEVICECHANGE

2,644

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧