如何区分普通光驱(CD/DVD)还是刻录机(CDR、CDRW、DVDR、DVDRW)最好支持Win2000

ftz820127 2008-03-12 02:34:07
我已经试过很多方法如,都无法在XP和2000系统下返回正确的光驱类型
希望有人能给我一段具体代码
...全文
1933 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzwsoho 2010-05-25
  • 打赏
  • 举报
回复
不对。。。6#的代码里面应该看的是mediaTypes的MediaInfo(0)成员的MediaCharacteristics成员,然后看看它是否包含以下的其中一个位:

MEDIA_CURRENTLY_MOUNTED
0x80000000

MEDIA_ERASEABLE
0x00000001

MEDIA_READ_ONLY
0x00000004

MEDIA_READ_WRITE
0x00000008

MEDIA_WRITE_ONCE
0x00000002

MEDIA_WRITE_PROTECTED
0x00000100



当然如果只是想判断是不是刻录机而不用判断刻录机内光盘的详细信息的话可以参考MediaType成员,这是一个STORAGE_MEDIA_TYPE枚举。

具体参照MSDN:
GET_MEDIA_TYPES Structure:
http://msdn.microsoft.com/en-us/library/aa363264(VS.85).aspx

DEVICE_MEDIA_INFO Structure:
http://msdn.microsoft.com/en-us/library/aa363241(v=VS.85).aspx

STORAGE_MEDIA_TYPE Enumeration:
http://msdn.microsoft.com/en-us/library/aa363467(v=VS.85).aspx
ftz820127 2008-05-30
  • 打赏
  • 举报
回复
没有有效答案,结了
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
关注 接分
ftz820127 2008-03-31
  • 打赏
  • 举报
回复
像我拿到的一个DVD刻录机的型号就是
DVD_R
cbm6666 2008-03-26
  • 打赏
  • 举报
回复
Attn:13F

抱歉DVD没试过,但是

If InStr(Ret, "CD-RW") > 0 or InStr(Ret, "DVD") > 0 Then '应该可行
cbm6666 2008-03-26
  • 打赏
  • 举报
回复
No, CDROM 与 CD-RW 是通用的名称只要是正规的厂商都遵循这个规则,就算没有的话,可以如同病毒库一样, 搜集一些可能的名称, 不会有太多种的.

If InStr(Ret, "CD-RW") > 0 or InStr(Ret, "CDRW") > 0 or InStr(Ret, "刻录机") > 0 Then
ftz820127 2008-03-26
  • 打赏
  • 举报
回复
谢谢CBM666
这个方法我也想过,不过后来发现很多品牌的刻录机都不包含RW等字符
所以没有继续试这个方法,因为这串字符是生产厂家按自己的定的格式随意定的,没有通用性
Sandrer 2008-03-26
  • 打赏
  • 举报
回复
CD-RW代表CD刻录机
那DVD-RW是不是代表DVD刻录机?
ftz820127 2008-03-25
  • 打赏
  • 举报
回复
不好意思回复慢了,NERO的组件也已经试过了,调用好返回一样还是无法识别
cbm6666 2008-03-25
  • 打赏
  • 举报
回复
呵呵, 注册表找一下不就知道了 ? 我的是 2000系统, XP应该差不多吧 ? 就照这个思路吧.

我特地装了一个刻录光驱来测试, 下面代码在我2000的系统没问题.

'添加 Command1

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
Dim Ret
Private Sub Command1_Click() '查看
Ret = GetString(HKEY_LOCAL_MACHINE, "system\currentcontrolset\services\cdrom\ENUm", "0")
If Ret <> "" Then
If InStr(Ret, "CD-RW") > 0 Then
MsgBox "刻录机"
Else
MsgBox "普通光驱"
End If
Else
MsgBox "无光驱"
End If
End Sub

Function GetString(hKey As Long, strPath As String, strValue As String)
RegOpenKey hKey, strPath, Ret
GetString = RegQueryStringValue(Ret, strValue)
RegCloseKey Ret
End Function

Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String) As String
Dim lResult&, lValueType&, strBuf$, lDataBufSize&
lResult = RegQueryValueEx(hKey, strValueName, 0, lValueType, ByVal 0, lDataBufSize)
If lResult = 0 Then
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, Chr$(0))
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, ByVal strBuf, lDataBufSize)
If lResult = 0 Then RegQueryStringValue = Left$(strBuf, InStr(1, strBuf, Chr$(0)) - 1)
ElseIf lValueType = REG_BINARY Then
Dim strData%
lResult = RegQueryValueEx(hKey, strValueName, 0, 0, strData, lDataBufSize)
If lResult = 0 Then RegQueryStringValue = strData
End If
End If
End Function

东方之珠 2008-03-21
  • 打赏
  • 举报
回复
UP
嗷嗷叫的老马 2008-03-21
  • 打赏
  • 举报
回复
到设备管理器里看了一下,貌似那里面也没有哪里说明一个光驱设备是否能支持刻录.

大约只能与光驱进行通讯了.

这个估计属于一些IDE之类的协议吧,你分析一下NERO之类的刻录软件都调用了哪些API来得到了哪些信息.
ftz820127 2008-03-21
  • 打赏
  • 举报
回复
谢谢tzwsoho

你的两个我都看过了。还是无法识别出普通光驱还是刻录机,只能分别出CD还是DVD
tzwsoho 2008-03-18
  • 打赏
  • 举报
回复
还有这个:http://vbnet.mvps.org/index.html?code/disk/getmediatype.htm
tzwsoho 2008-03-18
  • 打赏
  • 举报
回复
http://www.devx.com/vb2themax/Tip/19403
这个貌似不错,不过没有硬件条件测试。。。
ftz820127 2008-03-14
  • 打赏
  • 举报
回复
没有高手帮帮忙查了好多资料还是没找到有效的办法
ftz820127 2008-03-13
  • 打赏
  • 举报
回复
自己顶一下贴子,有没有高手帮帮忙,急等
ftz820127 2008-03-13
  • 打赏
  • 举报
回复
有没有高手帮帮忙急用啊
ftz820127 2008-03-13
  • 打赏
  • 举报
回复
有没有高手帮帮忙急用啊
ftz820127 2008-03-13
  • 打赏
  • 举报
回复
有没有高手帮帮忙急用啊

1,486

社区成员

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

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