怎么样用程序知道我的光盘有没有插入光盘?有没有api

解决方案 »

  1.   

    先引用 Microsoft Scripting Runtime library,方法如下:
    【工程】-->选择【引用】-->选择【Microsoft Scripting Runtime】(Scrrun.dll) 
    Private Sub Command1_Click()
    On Error GoTo acd
    Command1.Enabled = False
    Dim FSO As FileSystemObject
    Dim aDrive As Drive
    Set FSO = New FileSystemObject
    For Each aDrive In FSO.Drives
       If aDrive.DriveType = CDRom And aDrive.IsReady = False Then
          MsgBox "光驱中没有光盘!"
          Exit For
       ElseIf aDrive.DriveType = CDRom Then
          MsgBox "光驱中有一张" & aDrive.VolumeName & "光盘"
          Exit For
       End If
    Next
    Set FSO = Nothing
    Command1.Enabled = True
    Exit Sub
    acd:
    MsgBox Err.Description
    End Sub
      

  2.   

    方法一:
    ......
    On Error Goto errhandle
    rtn=Dir("G:\*.*")'G:\为光驱
    '光驱若无光盘, 则返回错误, 进入errhandle, Cdin为False; 若有光盘, 则Cdin为Ture
    Cdin=True
    errhandle:
    Cdin=False
    ......方法二:引用microsoft scripting runtimePrivate Sub Command1_Click()
        Dim fso As New FileSystemObject
        Dim dr As Drive
        
        Set dr = fso.GetDrive("j:")
        If dr.IsReady Then
        Else
            MsgBox "no cd"
        End If
        
    End Sub方法三:
    发送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;
      

  3.   

    另外使用CD更新通知控件也可以:
    http://zealsoft.nease.net/cn/cdnotify还有使用Microsoft SysInfo控件的DeviceArrival、DeviceRemoveComplete事件判断不知是否可以,没用过,可试一下
      

  4.   

    用错误处理,根据错误号进行判断。====================
    免费的学习交流网站,欢迎大家访问!
    http://www.j2soft.cn/
      

  5.   

    分享Windows的秘密——外壳通知消息
    如果仔细研究一下Windows API函数SHChangeNotify就会发现它可以获得外壳中发生的许多事件的信息,其中包括:文件、目录的变化,媒体设备的插入和卸载,磁盘自由空间的更新等等。比如,当从光驱中放入或取出光盘的时候,资源管理器会自动感知到这些动作,并更新相应光盘驱动器的图标,这就是通过外壳通知(Shell Notification)来实现的。 
    注册外壳变化通知
        接收外壳的变化通知消息的关键是SHChangeNotifyRegister 函数,下面是它的定义:
        function SHChangeNotifyRegister(Window: HWND; Flags: DWORD;
          EventMask: ULONG; MessageID: UINT; ItemCount: DWORD; 
          var Items: TNotifyRegister): THandle; stdcall;
        它被用来注册一个用来接收所有系统变化消息的窗口。这是一个未经公开的函数,它在SHELL32.DLL中的索引是2。Window 参数指定了用来接收通知消息的窗口,EventMask 参数可以设定为感兴趣的事件的位掩码的组合,可以使用任意的SHCNE_xxx 常数的组合。表2.12提供了全部这些常数的定义。
    表2.12
    常    数
     定    义
     
    SHCNE_ASSOCCHANGED 
     一个文件关联被改变了
     
    SHCNE_ATTRIBUTES 
     一个项目或文件夹的属性被改变了
     
    SHCNE_CREATE 
     非文件夹的外壳成员被创建了
     
    SHCNE_DELETE 
     非文件夹的外壳成员被删除了
     
    SHCNE_DRIVEADD 
     添加了一个驱动器
     
    SHCNE_DRIVEADDGUI 
     通过外壳添加的驱动器
     
    SHCNE_DRIVEREMOVED 
     一个驱动器被删除了
     
    SHCNE_EXTENDED_EVENT 
     未被使用
     
    SHCNE_FREESPACE 
     驱动器的自由空间数有了变化
     
    SHCNE_MEDIAINSERTED 
     存储介质被插入到驱动器中
     
    SHCNE_MEDIAREMOVED 
     存储介质从驱动器中被删除
     
    SHCNE_MKDIR 
     一个目录被创建
     
    SHCNE_NETSHARE 
     本地的目录被共享
     
    SHCNE_NETUNSHARE 
     本地目录被取消共享
     
    SHCNE_RENAMEFOLDER 
     文件夹名称被改变
     
    SHCNE_RENAMEITEM 
     非文件的外壳对象的名称被改变
     
    SHCNE_RMDIR 
     一个文件夹被删除
     
    SHCNE_SERVERDISCONNECT 
     计算机被服务器断开
     
    SHCNE_UPDATEDIR 
     一个文件夹中的内容被改变
     
    SHCNE_UPDATEIMAGE 
     系统图像列表中的一个图像被改变
     
    SHCNE_UPDATEITEM 
     一个非文件夹外壳对象的名称被改变
     
    多个事件组合类型
     
    SHCNE_ALLEVENTS 
     接收全部事件
     
    SHCNE_DISKEVENTS 
     接收所有磁盘相关事件
     
    SHCNE_GLOBALEVENT 
     接收所有全局事件
     
    事件常数使用的标识
     
    SHCNE_INTERRUPT 
     事件是作为一个系统中断的结果
      

  6.   

    小liu9965012我帮你测试过了,可行
      

  7.   

    终于用VB实现了,不仅是光盘的取入取出,就是优盘也可以获取通知
    http://community.csdn.net/Expert/topic/4477/4477632.xml?temp=.288067