USB设备侦测问题 请问哪位大虾知道在Windows中有什么函数可以侦测到我插入电脑的USB设备,并且可以得到USB设备的盘符?最好可以有一些简单的例子。谢谢!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 use UINT GetDriveType(LPCTSTR lpRootPathName // root directory);//example:LRESULT CALLBACK WINAPI WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ if(uMsg == WM_DESTROY)//窗口撤销消息,在程序退出时会收到此消息 { cleanup(hwnd); WSACleanup(); PostQuitMessage(0); return 0; } if(uMsg == WM_DEVICECHANGE)//硬件变动消息,在计算机硬件变动时程序会收到此消息 { handle_WM_DEVICECHANGE(hwnd,uMsg,wParam,lParam); } //在处理完消息之后,使用Windows消息的默认处理过程 return DefWindowProc(hwnd,uMsg,wParam,lParam);}void handle_WM_DEVICECHANGE(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam; switch (wParam) { case DBT_DEVICEARRIVAL: if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) { PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME) lpdb; if ( (lpdbv -> dbcv_flags & DBTF_MEDIA) || (lpdbv -> dbcv_flags & DBTF_NET) ) { ; //we do not care about this,do nothing }else{ char i; ULONG unitmask = lpdbv ->dbcv_unitmask; for (i = 0; i < 26; ++i) { if (unitmask & 0x1) { char disknum = i+'A';//这就是插入的设备盘符 } unitmask = unitmask >> 1; } } } break; case DBT_DEVICEREMOVECOMPLETE: if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) { PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; if ( (lpdbv -> dbcv_flags & DBTF_MEDIA) || (lpdbv -> dbcv_flags & DBTF_NET) ) { ;//we do not care about this,do nothing }else{ char i; ULONG unitmask = lpdbv ->dbcv_unitmask; for (i = 0; i < 26; ++i) { if (unitmask & 0x1)//发送消息到服务器端 { char disknum = i+'A';//这是移去的设备盘符 } unitmask = unitmask >> 1; } } } break; default: break; }} 参考:http://www.vckbase.net/document/viewdoc/?id=1282http://www.vckbase.net/document/viewdoc/?id=906http://www.vckbase.net/document/viewdoc/?id=900 这样的话是对所有的USB设备都有效吧!可是我只想知道我自己的设备被插上去了,并且还要进行数据交互 得到USB插上去后,就监测一下是不是你的设备好了,在你的USB你放一些特征码。 还有一个问题,这段代码只能够在运行的时候才能检测到USB设备。如果我的USB设备已经查入电脑里了,就没有办法得到那些插入消息了 http://community.csdn.net/Expert/topic/3515/3515719.xml?temp=.7106287 ADO连paradox数据库问题 请教水潭积水算法 CArchive 与CMemFile联合使用异常退出 急!! 无法验证发行者,使用vs 2005开发的mfc的尴尬,求教。 请问如何减小带文字的工具栏按钮的间距? 在对话框中清除图形 小女子咨询文件读写问题 。 。 。 关于R0下插APC方式运行程序用硬编码如何动态获取WinExe函数地址 怎么编写将unicode文本文件转换为utf-8的文本文件 类似VStart 的界面 求大牛指教 大牛大牛大牛大牛大牛 再问关于cab文件的问题 USB设备打开关闭问题
//example:
LRESULT CALLBACK WINAPI WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg == WM_DESTROY)//窗口撤销消息,在程序退出时会收到此消息
{
cleanup(hwnd);
WSACleanup();
PostQuitMessage(0);
return 0;
} if(uMsg == WM_DEVICECHANGE)//硬件变动消息,在计算机硬件变动时程序会收到此消息
{
handle_WM_DEVICECHANGE(hwnd,uMsg,wParam,lParam);
} //在处理完消息之后,使用Windows消息的默认处理过程
return DefWindowProc(hwnd,uMsg,wParam,lParam);}void handle_WM_DEVICECHANGE(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch (wParam)
{
case DBT_DEVICEARRIVAL:
if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME) lpdb;
if ( (lpdbv -> dbcv_flags & DBTF_MEDIA) || (lpdbv -> dbcv_flags & DBTF_NET) )
{
; //we do not care about this,do nothing
}else{
char i;
ULONG unitmask = lpdbv ->dbcv_unitmask;
for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)
{
char disknum = i+'A';//这就是插入的设备盘符 }
unitmask = unitmask >> 1;
}
}
}
break; case DBT_DEVICEREMOVECOMPLETE:
if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
if ( (lpdbv -> dbcv_flags & DBTF_MEDIA) || (lpdbv -> dbcv_flags & DBTF_NET) )
{
;//we do not care about this,do nothing
}else{
char i;
ULONG unitmask = lpdbv ->dbcv_unitmask;
for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)//发送消息到服务器端
{
char disknum = i+'A';//这是移去的设备盘符 }
unitmask = unitmask >> 1;
}
}
}
break; default:
break;
}
}
http://www.vckbase.net/document/viewdoc/?id=1282
http://www.vckbase.net/document/viewdoc/?id=906
http://www.vckbase.net/document/viewdoc/?id=900