By jingzhongrong
今天看到一篇文章里面说到的检测U盘插入的方法
文章中使用的是用循环不停检测系统盘符的变化,然后根据盘符对应的类型来判 断。
下面是大概的方法
//检测是否为可移动磁盘
int CheckDisk(char * disk)
{
if(GetDriveType(disk)==DRIVE_REMOVABLE)return 0 ;
return -1 ;
}
int dectect()
{ char buf[10 ];
DWORD lod= GetLogicalDrives();
if (lod!=0 )
{
for (int i=0;i<26;i++ )
{
if ((lod & 1)==1 )
{
sprintf(buf,"%c",'A'+ i);
strcat(buf,":/" );
if(! CheckDisk(buf))
{
if(GetVolumeInformation(buf,0,0,0,0,0,0,0 ))
{
//检测到U盘并且驱动器已准备就绪
}
}
}
lod =lod>>1 ;
}
}
return 0 ;
}
//然后使用
while(1 )
{
dected();
//此处可以添加Sleep函数停止一段时间,以免过高占用CPU
}
int CheckDisk(char * disk)
{
if(GetDriveType(disk)==DRIVE_REMOVABLE)return 0 ;
return -1 ;
}
int dectect()
{ char buf[10 ];
DWORD lod= GetLogicalDrives();
if (lod!=0 )
{
for (int i=0;i<26;i++ )
{
if ((lod & 1)==1 )
{
sprintf(buf,"%c",'A'+ i);
strcat(buf,":/" );
if(! CheckDisk(buf))
{
if(GetVolumeInformation(buf,0,0,0,0,0,0,0 ))
{
//检测到U盘并且驱动器已准备就绪
}
}
}
lod =lod>>1 ;
}
}
return 0 ;
}
//然后使用
while(1 )
{
dected();
//此处可以添加Sleep函数停止一段时间,以免过高占用CPU
}
下面是我的实现,不使用循环,使用C++Builder完成,
原理是当U盘插入或移除的时候
Windows会生成一条信息WM_DEVICECHANGE
处理此消息便可
使用VC的可以定义一个WindowProc的回调函数,其中的实现与下面的WndProc类似