我现在需要做一个程序,如果插了U盘,就立即从U盘中将图片文件考走。有点像360杀毒检测U盘一样。检查磁盘类型,如果是可移动磁盘。就将其中的图片文件考出来。
拦系统的U盘消息,插了U盘会有一个消息。我现在就这两种思路,请教还有什么思路没有?能不能不在计时器中不停地检测,我觉得那样太浪费资源了。

解决方案 »

  1.   

    http://topic.csdn.net/u/20090122/16/55b0ec9b-b84b-484a-8cca-53d4b5f8a860.html
      

  2.   

    to bdzwj
    你的代码可以运行。
    但是如果U盘可以读写,是没有问题的。
    但如果我只插读卡器,没有插卡。或者U盘没有弄好,可以看见盘符,却打不开U盘时。你这段代码就会有问题。问题出现在这个函数里。
    Private Sub ListDriverFiles(ByVal strDriver As String)
        Dim strFile As String
         
        strFile = Dir(strDriver & ":\*.*", vbDirectory)
        While (strFile <> vbNullString)
            Debug.Print strDriver & ":\" & strFile
            strFile = Dir
        Wend
        
    End Sub
    加上这一句On Error GoTo handle,就可以了。
      

  3.   

    1.使用SetWindowLong添加当前窗体的消息响应方法
    2.当触发到WM_DEVICECHANGED消息,查看LPARAM和WPARAM的值。
      

  4.   

    如LS所说,消息是比较好的办法,但是WM_DEVICECHANGED在处理时需要等待系统响应U盘设备安装完毕,这就照成了程序也在等待消息返回,所以导致一段时间的假死。我以前也做过建设U盘的,不过是使用VC写一个DLL窗口一个UI线程去处理WM_DEVICECHANGED消息,主窗体不去理会WM_DEVICECHANGED消息,等待UI线程处理完毕WM_DEVICECHANGED消息后发送一个自定义消息给主窗体线程让其直接响应,这样就可以避免导致假死的问题。