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

liu9965012 2005-12-14 01:52:46
怎么样用程序知道我的光盘有没有插入光盘?有没有api
...全文
235 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘洪峰AIoT 2005-12-23
  • 打赏
  • 举报
回复
终于用VB实现了,不仅是光盘的取入取出,就是优盘也可以获取通知
http://community.csdn.net/Expert/topic/4477/4477632.xml?temp=.288067
pisxiaoxiang 2005-12-22
  • 打赏
  • 举报
回复
呵呵,插入盗版碟,也有可能产生读不出的情况哦
coyihisaso 2005-12-22
  • 打赏
  • 举报
回复
小liu9965012我帮你测试过了,可行
coyihisaso 2005-12-22
  • 打赏
  • 举报
回复
谢谢tztz520给的答案!
刘洪峰AIoT 2005-12-22
  • 打赏
  • 举报
回复
这是网上找的一篇文章,还没深入研究,不过感到很有用
刘洪峰AIoT 2005-12-22
  • 打赏
  • 举报
回复
分享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
事件是作为一个系统中断的结果
yinweihong 2005-12-16
  • 打赏
  • 举报
回复
对于第1种情况,错误处理方式比较容易实现
第2种情况就要处理一些系统消息了
yinweihong 2005-12-16
  • 打赏
  • 举报
回复
楼主的问题没说清楚,有2种理解方式啊
1。光区里面是不是有光盘
2。光区是不是正在插入光盘啊
射天狼 2005-12-15
  • 打赏
  • 举报
回复
用错误处理,根据错误号进行判断。

====================
免费的学习交流网站,欢迎大家访问!
http://www.j2soft.cn/
winehero 2005-12-14
  • 打赏
  • 举报
回复
另外使用CD更新通知控件也可以:
http://zealsoft.nease.net/cn/cdnotify

还有使用Microsoft SysInfo控件的DeviceArrival、DeviceRemoveComplete事件判断不知是否可以,没用过,可试一下
winehero 2005-12-14
  • 打赏
  • 举报
回复
方法一:
......
On Error Goto errhandle
rtn=Dir("G:\*.*")'G:\为光驱
'光驱若无光盘, 则返回错误, 进入errhandle, Cdin为False; 若有光盘, 则Cdin为Ture
Cdin=True
errhandle:
Cdin=False
......

方法二:

引用microsoft scripting runtime

Private 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;


zou19820704 2005-12-14
  • 打赏
  • 举报
回复
打开光驱里面的任意文件,还回 错误好71也是没有准备好
最好的方法还是楼上的!
tztz520 2005-12-14
  • 打赏
  • 举报
回复
先引用 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
phison-UP10量产工具v1.78.00(U盘量产工具),亲测成功!!!设备名称: [I:]USB Mass Storage Device(Kingston DataTraveler 2.0 USB Device) PNP设备ID: VID = 0951 PID = 1607 设备序列号: 5B780FA602D0  设备版本: PMAP  设备类型: 标准USB设备 - USB2.0高速 芯片制造商: skymedi(擎泰)  芯片型号: SK6281/PS2232(版本号PMAP) 产品制造商: Kingston(金士顿)  产品型号: DataTraveler 2.0    U盘:金士顿2G 型号DMFP/2GB 量产工具:phison-UP10量产工具v1.78.00 方法: 1、将下载的phison-UP10量产工具v1.78.00解压到任一目录。 2、运行F1_B4_v178.exe或F2_v178.exe点击“取得信息”,如果从“测试报告”窗口有内容说明可以使用此工具量产你的U盘;如果弹出“没有找到设备”信息你只好另找了。 3、退出程序 4、运行ParamEdt.exe,配置--模式栏输入“21”,再选择“select”可选光盘ISO或BIN文件。然后按另存为一个1.ini文件。注意F1对应F1_B4_v178.exe;F2对应F2_v178.exe。(或者可直接配置好ini附后(1.ini),在文件中直接改ISO文件存放目录也可。) 1.ini文件 [Extra] Mode=21 [Misc] CDROM Image=D:\系统\萝卜家园 Ghost XP SP3 电脑城装机版 8.8.iso (←改成ISO文件存放目录) 5、再运行F1_B4_v178.exe或F2_v178.exe点击“开始”。稍等一会……下面变成绿色的框就成功了。再点“弹出”,重新插入U盘。 6、此量产工具模式可选择很多,有一些并不适用自己的U盘,其它参数你也需要多试一试才能成功。 在BIOS中启动设置为USB-CDROM 恢复时选择PE模式 还原 用原来的量产工具,选择模式3,重新量产一次。 注意:镜像文件选择留空就行了。 再用F1_B4_v178.exe,ini文件选param,方法同上。(不能i还原的,可进行低格)

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧