如何检测光驱里是否有光盘 如何检测光驱里是否有光盘,请大家指点。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 : sandsboy(沙滩男孩) ( 的意见应该可行。 using System;using System.Runtime.InteropServices; using System.Collections;using System.Text;namespace CyberResource.Collection.WinVCD2_Browse.SystemFramework{ /// <summary> /// GetCDRom 的摘要说明。 /// </summary> public class GetCDRom { [DllImport("kernel32.dll",CharSet = CharSet.Ansi)] internal static extern uint GetLogicalDriveStrings( uint nBufferLength, // size of buffer IntPtr lpBuffer // address of buffer for drive strings ); [DllImport("kernel32.dll",CharSet = CharSet.Ansi)] internal static extern uint GetDriveType( string lpRootPathName // address of root path ); public ArrayList GetCD() { //uint DRIVE_UNKNOWN = 0; //uint DRIVE_NO_ROOT_DIR = 1; //uint DRIVE_REMOVABLE = 2; //uint DRIVE_FIXED = 3; //uint DRIVE_REMOTE = 4; uint DRIVE_CDROM = 5; //uint DRIVE_RAMDISK = 6; uint bufSize = GetLogicalDriveStrings(0,IntPtr.Zero); IntPtr ptr = Marshal.AllocHGlobal((int)bufSize); bufSize = GetLogicalDriveStrings(bufSize,ptr); string str = Marshal.PtrToStringAnsi(ptr,(int)bufSize); Marshal.FreeHGlobal(ptr); StringBuilder sb = new StringBuilder(); string[] strs = str.Split(new char[]{(char)0}); ArrayList lstCD = new ArrayList(); uint type; for(int i = 0; i < strs.Length; ++i) { if(strs[i] != null) { type = GetDriveType(strs[i]); if(type == DRIVE_CDROM) lstCD.Add(strs[i]); } } return lstCD;// for(int i = 0; i < lstCD.Count; ++i)// Console.WriteLine("CDRom is {0}",lstCD[i].ToString()); } }}取得光驱的代码,别人给的如何检测光驱中是否有盘,还没实现呢, 我是这样取判断是否有盘的private void button1_Click(object sender, System.EventArgs e) { GetCDRom instanceGetCDRom = new GetCDRom(); for(int i=0; i<instanceGetCDRom.GetCD().Count; ++i) { label1.Text = ""; label1.Text += instanceGetCDRom.GetCD()[i].ToString(); try { if(File.Exists(instanceGetCDRom.GetCD()[i]+@"database\vcd_software.mdb")) { MessageBox.Show("数据库文件存在","助手提示",MessageBoxButtons.OK,MessageBoxIcon.Information); this.label2.Text = instanceGetCDRom.GetCD()[i].ToString(); break; } else { MessageBox.Show("请确认您已经放入了正确的光盘!","助手提示",MessageBoxButtons.OK,MessageBoxIcon.Error); } } catch { MessageBox.Show("无法读取光驱中的文件,请检查后再执行相关操作","助手提示",MessageBoxButtons.OK,MessageBoxIcon.Error); } } } using System.Management;public string GetVolumeSerial(string strDriveLetter) { if( strDriveLetter=="" || strDriveLetter==null) strDriveLetter="C"; ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + strDriveLetter +":\""); disk.Get(); return disk["Size"].ToString(); }strDriveLetter 为 C ,D 等,你自己设置返回的是 驱动器的 容量,判断驱动你的光驱的容量是否 大于 0 ,就可以了,剩下的你自己改吧,祝你好运 一下是一个比较完整的代码,已经测试通过了 (Win2003 + #Develop),第一次写这样的代码,写的不是很好using System;using System.Runtime.InteropServices; using System.Collections;using System.Text;using System.Management;namespace GetCDRom{ class MainClass { [DllImport("kernel32.dll",CharSet = CharSet.Ansi)] internal static extern uint GetLogicalDriveStrings( uint nBufferLength, // size of buffer IntPtr lpBuffer // address of buffer for drive strings ); [DllImport("kernel32.dll",CharSet = CharSet.Ansi)] internal static extern uint GetDriveType( string lpRootPathName // address of root path ); public static void Main(string[] args) { Console.WriteLine("Hello World!"); MainClass myClass = new MainClass(); for(int i=0;i < myClass.GetCDRom().Count; ++i) Console.WriteLine(myClass.GetCDRom()[i]); for(int i=0;i < myClass.GetCDRom().Count; ++i) { try { int intTmp = myClass.GetVolumeSize(myClass.GetCDRom()[i].ToString().Replace("\\","")); if(intTmp > 0) { Console.WriteLine("光驱{0}中有光盘",myClass.GetCDRom()[i]); } } catch { Console.WriteLine("发生异常"); } } Console.WriteLine(myClass.GetVolumeSize("H:").ToString()); } public ArrayList GetCDRom() { //uint DRIVE_UNKNOWN = 0; //uint DRIVE_NO_ROOT_DIR = 1; //uint DRIVE_REMOVABLE = 2; //uint DRIVE_FIXED = 3; //uint DRIVE_REMOTE = 4; uint DRIVE_CDROM = 5; //uint DRIVE_RAMDISK = 6; uint bufSize = GetLogicalDriveStrings(0,IntPtr.Zero); IntPtr ptr = Marshal.AllocHGlobal((int)bufSize); bufSize = GetLogicalDriveStrings(bufSize,ptr); string str = Marshal.PtrToStringAnsi(ptr,(int)bufSize); Marshal.FreeHGlobal(ptr); StringBuilder sb = new StringBuilder(); string[] strs = str.Split(new char[]{(char)0}); ArrayList lstCD = new ArrayList(); uint type; for(int i = 0; i < strs.Length; ++i) { if(strs[i] != null) { type = GetDriveType(strs[i]); if(type == DRIVE_CDROM) lstCD.Add(strs[i]); } } return lstCD; } public int GetVolumeSize(string strDriveLetter) { if( strDriveLetter=="" || strDriveLetter==null) strDriveLetter="C"; ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + strDriveLetter +"\""); disk.Get(); return Convert.ToInt32(disk["Size"].ToString()); } }} c#开发的exe,如何转换成网页控件? [高分提问] 软件如何自动以管理员身份打开 C# 做的 exe 应用程序? 线程更改主窗体属性的问题 关于DataGridView修改后的数据提交的问题(100分) c#里如果调试win32下调用的函数 VS2005C#.net 窗体切换 求正则,取table里面的数据,谢谢了 请问这个怎样用json进行反序列化类? J2EE和.Net成本大比拼! 菜鸟问题 masterpage 和 html 控件问题?高不懂
的意见应该可行。
using System.Runtime.InteropServices;
using System.Collections;
using System.Text;namespace CyberResource.Collection.WinVCD2_Browse.SystemFramework
{
/// <summary>
/// GetCDRom 的摘要说明。
/// </summary>
public class GetCDRom
{
[DllImport("kernel32.dll",CharSet = CharSet.Ansi)]
internal static extern uint GetLogicalDriveStrings(
uint nBufferLength, // size of buffer
IntPtr lpBuffer // address of buffer for drive strings
);
[DllImport("kernel32.dll",CharSet = CharSet.Ansi)]
internal static extern uint GetDriveType(
string lpRootPathName // address of root path
);
public ArrayList GetCD()
{
//uint DRIVE_UNKNOWN = 0;
//uint DRIVE_NO_ROOT_DIR = 1;
//uint DRIVE_REMOVABLE = 2;
//uint DRIVE_FIXED = 3;
//uint DRIVE_REMOTE = 4;
uint DRIVE_CDROM = 5;
//uint DRIVE_RAMDISK = 6;
uint bufSize = GetLogicalDriveStrings(0,IntPtr.Zero);
IntPtr ptr = Marshal.AllocHGlobal((int)bufSize);
bufSize = GetLogicalDriveStrings(bufSize,ptr);
string str = Marshal.PtrToStringAnsi(ptr,(int)bufSize);
Marshal.FreeHGlobal(ptr);
StringBuilder sb = new StringBuilder();
string[] strs = str.Split(new char[]{(char)0});
ArrayList lstCD = new ArrayList();
uint type;
for(int i = 0; i < strs.Length; ++i)
{
if(strs[i] != null)
{
type = GetDriveType(strs[i]);
if(type == DRIVE_CDROM)
lstCD.Add(strs[i]);
}
}
return lstCD;
// for(int i = 0; i < lstCD.Count; ++i)
// Console.WriteLine("CDRom is {0}",lstCD[i].ToString());
}
}
}取得光驱的代码,别人给的
如何检测光驱中是否有盘,还没实现呢,
private void button1_Click(object sender, System.EventArgs e)
{
GetCDRom instanceGetCDRom = new GetCDRom();
for(int i=0; i<instanceGetCDRom.GetCD().Count; ++i)
{
label1.Text = "";
label1.Text += instanceGetCDRom.GetCD()[i].ToString();
try
{
if(File.Exists(instanceGetCDRom.GetCD()[i]+@"database\vcd_software.mdb"))
{
MessageBox.Show("数据库文件存在","助手提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.label2.Text = instanceGetCDRom.GetCD()[i].ToString();
break;
}
else
{
MessageBox.Show("请确认您已经放入了正确的光盘!","助手提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
catch
{
MessageBox.Show("无法读取光驱中的文件,请检查后再执行相关操作","助手提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
} }
public string GetVolumeSerial(string strDriveLetter)
{
if( strDriveLetter=="" || strDriveLetter==null)
strDriveLetter="C";
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + strDriveLetter +":\"");
disk.Get();
return disk["Size"].ToString();
}strDriveLetter 为 C ,D 等,你自己设置
返回的是 驱动器的 容量,
判断驱动你的光驱的容量是否 大于 0 ,就可以了,
剩下的你自己改吧,祝你好运
using System.Runtime.InteropServices;
using System.Collections;
using System.Text;
using System.Management;
namespace GetCDRom
{
class MainClass
{
[DllImport("kernel32.dll",CharSet = CharSet.Ansi)]
internal static extern uint GetLogicalDriveStrings(
uint nBufferLength, // size of buffer
IntPtr lpBuffer // address of buffer for drive strings
);
[DllImport("kernel32.dll",CharSet = CharSet.Ansi)]
internal static extern uint GetDriveType(
string lpRootPathName // address of root path
);
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
MainClass myClass = new MainClass();
for(int i=0;i < myClass.GetCDRom().Count; ++i)
Console.WriteLine(myClass.GetCDRom()[i]);
for(int i=0;i < myClass.GetCDRom().Count; ++i)
{
try
{
int intTmp = myClass.GetVolumeSize(myClass.GetCDRom()[i].ToString().Replace("\\",""));
if(intTmp > 0)
{
Console.WriteLine("光驱{0}中有光盘",myClass.GetCDRom()[i]);
}
}
catch
{
Console.WriteLine("发生异常");
}
}
Console.WriteLine(myClass.GetVolumeSize("H:").ToString());
}
public ArrayList GetCDRom()
{
//uint DRIVE_UNKNOWN = 0;
//uint DRIVE_NO_ROOT_DIR = 1;
//uint DRIVE_REMOVABLE = 2;
//uint DRIVE_FIXED = 3;
//uint DRIVE_REMOTE = 4;
uint DRIVE_CDROM = 5;
//uint DRIVE_RAMDISK = 6;
uint bufSize = GetLogicalDriveStrings(0,IntPtr.Zero);
IntPtr ptr = Marshal.AllocHGlobal((int)bufSize);
bufSize = GetLogicalDriveStrings(bufSize,ptr);
string str = Marshal.PtrToStringAnsi(ptr,(int)bufSize);
Marshal.FreeHGlobal(ptr);
StringBuilder sb = new StringBuilder();
string[] strs = str.Split(new char[]{(char)0});
ArrayList lstCD = new ArrayList();
uint type;
for(int i = 0; i < strs.Length; ++i)
{
if(strs[i] != null)
{
type = GetDriveType(strs[i]);
if(type == DRIVE_CDROM)
lstCD.Add(strs[i]);
}
}
return lstCD;
}
public int GetVolumeSize(string strDriveLetter)
{
if( strDriveLetter=="" || strDriveLetter==null)
strDriveLetter="C";
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + strDriveLetter +"\"");
disk.Get();
return Convert.ToInt32(disk["Size"].ToString());
}
}
}