vc弹出USB的方法. 附试验通过的代码!

http://blog.sina.com.cn/s/blog_4fcd1ea30100qrzn.html

(2011-04-15 10:09:48)

bool CUsbSwitchDlg::UnInstallUsb(char szDriveName) //参数是要弹出的盘符如:G,F

{

DWORD accessMode = 0, shareMode = 0;

HANDLE   hDevice;

ULONG returned = 0,bResult = 0;

DWORD   dwError;

shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;  // default

accessMode = GENERIC_WRITE | GENERIC_READ;       // default

if (szDriveName == 0)

{

return FALSE;

}

CString vol_string = \\\\.\\G:;

vol_string.SetAt(4, szDriveName);

hDevice = CreateFile(vol_string,

accessMode,   shareMode,     NULL, OPEN_EXISTING, 0,       NULL);

if (hDevice == INVALID_HANDLE_VALUE)

{

CString debugInfo;

dwError   =   GetLastError();

debugInfo.Format("error = %d ", dwError);

TRACE("IOCTL_STORAGE_EJECT_MEDIA  errorcode = %d \n", dwError);

return FALSE;

}

bResult   =   DeviceIoControl(hDevice,

IOCTL_STORAGE_EJECT_MEDIA, //弹出U盘的具体命令。

NULL, 0, NULL, 0,&returned,      NULL);

if   (!bResult)   //   IOCTL   failed     //经实验,有时虽然失败了,U盘还是能弹出

{

CString debugInfo;

dwError   =   GetLastError();

debugInfo.Format("error = %d ", dwError);

TRACE("IOCTL_STORAGE_EJECT_MEDIA  errorcode = %d \n", dwError);

}

bResult   =   CloseHandle(hDevice);

if   (!bResult)

{

CString debugInfo;

dwError   =   GetLastError();

debugInfo.Format("error = %d ", dwError);

TRACE("IOCTL_STORAGE_EJECT_MEDIA  errorcode = %d \n", dwError);

return FALSE;

}

return TRUE;

}

关于U盘盘符的问题:

添加WM_DEVICECHANGE的消息处理函数OnDeviceChange,

在该函数中捕获DBT_DEVICEARRIVAL事件(当U盘插入时,OS会发WM_DEVICECHANGE广播消息,该消息的wParam中会包含DBT_DEVICEARRIVAL事件),

同时得到DEV_BROADCAST_VOLUME结构的数据,DEV_BROADCAST_VOLUME结构的dbch_devicetype 成员是DBT_DEVTYP_VOLUME代表是磁盘。

dbcv_unitmask成员是一个Mask变量,最低位对应A,其次是B,...,根据它可就可以得到当前U盘的盘符了.    比如0x1代表A盘。0x10代表B盘。当然同理你可以得到系统上刚插入的串口设备。要学会举一反三。

BOOL CUsbSwitchDlg::OnDeviceChange( UINT nEventType, DWORD dwData )

{

if (nEventType == DBT_DEVICEARRIVAL)

{

DEV_BROADCAST_HDR* dev_hdr = (DEV_BROADCAST_HDR*)dwData;

if (dev_hdr->dbch_devicetype == DBT_DEVTYP_VOLUME)

{

DEV_BROADCAST_VOLUME* pdev_vol = (DEV_BROADCAST_VOLUME*)dwData;;

int vol_char = 0;

int vol_int = pdev_vol->dbcv_unitmask;

// calculate the vol_num

for (;vol_int;)

{

vol_int = vol_int/2;

vol_char++;

}

m_USBvolNum = vol_char + 'A' - 1;//m_USBvolNum即为盘符,如G或者I

}

}

return FALSE;

}

vc弹出USB的方法. 附试验通过的代码!的更多相关文章

  1. 弹出USB大容量存储设备时出问题的解决方法

    我的计算机->管理->系统工具->事件查看器->自定义视图->Kernel-Pnp->详情->进程ID 然后在任务管理器里找到该进程(任务管理器->查看 ...

  2. js弹出对话框的方法总结

    九种js弹出对话框的方法总结,需要的朋友可以参考一下 [1.最基本的js弹出对话框窗口代码] 这是最基本的js弹出对话框,其实代码就几句非常简单: <script LANGUAGE=" ...

  3. js关闭当前页面不弹出提示的方法

    js关闭当前页面不弹出提示的方法 js关闭当前页面不弹出提示的方法 "window.opener=null;window.open('','_self','');window.close() ...

  4. C# 弹出USB外接硬盘(U盘)

    最近一个项目需要通过代码来弹出USB外接硬盘设备,经过google找到了下面这个类库: http://www.codeproject.com/Articles/13530/Eject-USB-disk ...

  5. js 弹出对话框的方法总结

    原文:http://www.cnblogs.com/xiaofengfeng/archive/2012/10/20/2732784.html <!DOCTYPE html PUBLIC &quo ...

  6. PyQt(Python+Qt)学习随笔:设定toolButton弹出菜单的方法

    在Qt Designer中toolButton可以通过popupMode设定菜单弹出的模式,但并不能在Qt Designer中指定toolButton的弹出菜单,toolButton只能通过代码来指定 ...

  7. ASP.NET点击按钮弹出确认对话框方法

    开发asp.net网页应用程序的时候,有些页面的按钮需要增加一个确认对话框,比如: 实现这个功能比较简单,代码这样写: Button.Attributes["onclick"] = ...

  8. [转]Android在初始化时弹出popwindow的方法 .

    转自:http://blog.csdn.net/sxsboat/article/details/7340759 留个人备用0.0 Android中在onCreate()时弹出popwindow,很多人 ...

  9. 仿酷狗音乐播放器开发日志二十六 duilib在标题栏弹出菜单的方法

    转载请说明原出处,谢谢~~ 上篇日志说明了怎么让自定义控件响应右键消息.之后我给主窗体的标题栏增加右键响应,观察原酷狗后可以发现,在整个标题栏都是可以响应右键并弹出菜单的.应该的效果如下: 本以为像上 ...

随机推荐

  1. python爬虫之『入门基础』

    HTTP请求 1.首先需要了解一下http请求,当用户在地址栏中输入网址,发送网络请求的过程是什么? 可以参考我之前学习的时候转载的一篇文章一次完整的HTTP事务过程–超详细 2.还需要了解一下htt ...

  2. idea 生成方法注释的快捷键

    我用的15,在keymap里搜索 Fix doc comment 给他一个快捷建.参考 http://www.oschina.net/question/179541_26961

  3. 商业模式(二):P2P网贷平台,利差和服务费为主的金融玩法

    2014~2015,先后在2家P2P平台工作过,还了解过其它若干武汉P2P平台. 结合自己的工作经历和理财经历,说几句~ 1.P2P网贷这种金融类的创业项目和经营风险,远高于制造业和服务业~      ...

  4. [置顶] Docker学习总结(5)——超实用Docker入门学习教程

    Docker是什么 Docker是一种容器技术,它可以将应用和环境等进行打包,形成一个独立的,类似于iOS的APP形式的"应用",这个应用可以直接被分发到任意一个支持Docker的 ...

  5. mycat 不得不说的缘分(转)

    ,尾声,左兄与任正非.leader-us与马云 新成立的公司里面,有个左兄,很传奇,大一在大学入伍,然后复员专业,来上海学IT,年纪轻轻,睡在地铁站,苦心专研数据库.系统.中间件,现在已经成为了业界大 ...

  6. Qt样式表之盒子模型(以QSS来讲解,而不是CSS)

    说起样式表,不得不提的就是盒子模型了,今天小豆君就来给大家介绍下盒子模型. 上图是一张盒子模型图. 对于一个窗口,其包括四个矩形边框.以中间的边框矩形(border)为基准,在border外侧的是外边 ...

  7. 在OSG 实现的 oculus rift 效果

    在OSG 实现的oculus rift 效果,还不错 这个是Delta3d中实现的 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1eWluZ3Fpb ...

  8. 8lession-基础类型转化

    Python数据类型转换 有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可. 以下几个内置的函数可以执行数据类型之间的转换.这些函数返回一个新的对象,表示转换 ...

  9. LinearLayout-控件不显示

    今天Mms遇到了一个问题,布局如下             <RelativeLayout                android:layout_width="match_par ...

  10. BZOJ3998: [TJOI2015]弦论(后缀自动机,Parent树)

    Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个. ...