只知道怎么弹出光驱和关闭 using System; using System.Text; using System.Runtime.InteropServices;class CloseCD { [DllImport( "winmm.dll", EntryPoint="mciSendStringA", CharSet=CharSet.Ansi )] protected static extern int mciSendString( string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, IntPtr hwndCallback ); public static void Main() { int ret = mciSendString( "set cdaudio door open", null, 0, IntPtr.Zero ); Console.ReadLine();
ret = mciSendString( "set cdaudio door closed", null, 0, IntPtr.Zero ); } }
magiccoder(或许..未必..不过..) : 历害,学习你中...........
用API GetDriveType 得到盘符 返回值为5即为光驱用DirectoryInfo读取得到的盘符的内容,即可判断是否有盘打开或者弹出 mciSendString("set CDAudio door open", returnstring, 127, 0) mciSendString("set CDAudio door closed", returnstring, 127, 0)
我试了试,mciSendString("set CDAudio door closed", returnstring, 127, 0)这个方法的执行时间好长啊.........
使用WMI获取驱动器列表 using System.Management; SelectQuery query = new SelectQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); foreach (ManagementBaseObject envVar in searcher.Get()) { this.listBox1.Items.Add(envVar["Name"].ToString()); } 如果查询语句中的DriveType 为2,会得到软驱,如果为5,会得到光驱。
用WMI得到光驱名称: ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select Name from Win32_CDROMDrive"); foreach(ManagementObject cdrom in searcher.Get()) { Console.WriteLine("Name: {0}\n", cdrom.GetPropertyValue("Name")); } 当然你也可以用API
再写一个API获取光驱名和判断有无光盘的方法: string s =""; StringBuilder volumeName = new StringBuilder(256); int srNum = new int(); int comLen = new int(); string sysName = ""; int sysFlags = new int(); int result; string [] logDrives = System.IO.Directory.GetLogicalDrives(); for(int i=0;i<logDrives.Length;i++) { if(api.GetDriveType(logDrives[i])==5) { s+="Your CD ROM is on drive : "+logDrives[i].ToString()+"\n"; result = api.GetVolumeInformation(logDrives[i].ToString(),volumeName,256,srNum,comLen,sysFlags,sysName,256); if(result==0) s+="CD ROM中没光盘";//不必用try,catch吧 else { s+="CD ROM 中有光盘,名称: " + volumeName; } } } label1.Text=s; -------------------------------------------------------------------- 打开光驱: api.mciSendString("set CDAudio door open",null, 127, 0); 关闭光驱: api.mciSendString("set CDAudio door closed",null, 127, 0); ---------------------------------------------------------------------------------------- 类api中: [DllImport("winmm.dll", EntryPoint="mciSendStringA")] public static extern int mciSendString (string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); [DllImport("kernel32.dll", EntryPoint="GetVolumeInformationA")] public static extern int GetVolumeInformation (string lpRootPathName,StringBuilder lpVolumeNameBuffer, int nVolumeNameSize, int lpVolumeSerialNumber, int lpMaximumComponentLength, int lpFileSystemFlags, string lpFileSystemNameBuffer, int nFileSystemNameSize); [DllImport("kernel32.dll", EntryPoint="GetDriveTypeA")] public static extern int GetDriveType (string nDrive);
using System;
using System.Text;
using System.Runtime.InteropServices;class CloseCD
{ [DllImport( "winmm.dll", EntryPoint="mciSendStringA", CharSet=CharSet.Ansi )]
protected static extern int mciSendString( string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, IntPtr hwndCallback ); public static void Main()
{ int ret = mciSendString( "set cdaudio door open", null, 0, IntPtr.Zero ); Console.ReadLine();
ret = mciSendString( "set cdaudio door closed", null, 0, IntPtr.Zero );
}
}
历害,学习你中...........
GetDriveType 得到盘符
返回值为5即为光驱用DirectoryInfo读取得到的盘符的内容,即可判断是否有盘打开或者弹出
mciSendString("set CDAudio door open", returnstring, 127, 0)
mciSendString("set CDAudio door closed", returnstring, 127, 0)
new SelectQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3"); ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query); foreach (ManagementBaseObject envVar in searcher.Get())
{
this.listBox1.Items.Add(envVar["Name"].ToString());
}
如果查询语句中的DriveType 为2,会得到软驱,如果为5,会得到光驱。
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("Select Name from Win32_CDROMDrive");
foreach(ManagementObject cdrom in searcher.Get())
{
Console.WriteLine("Name: {0}\n",
cdrom.GetPropertyValue("Name"));
}
当然你也可以用API
string s ="";
StringBuilder volumeName = new StringBuilder(256);
int srNum = new int();
int comLen = new int();
string sysName = "";
int sysFlags = new int();
int result;
string [] logDrives = System.IO.Directory.GetLogicalDrives();
for(int i=0;i<logDrives.Length;i++)
{
if(api.GetDriveType(logDrives[i])==5)
{
s+="Your CD ROM is on drive : "+logDrives[i].ToString()+"\n";
result = api.GetVolumeInformation(logDrives[i].ToString(),volumeName,256,srNum,comLen,sysFlags,sysName,256);
if(result==0)
s+="CD ROM中没光盘";//不必用try,catch吧
else
{
s+="CD ROM 中有光盘,名称: " + volumeName;
}
}
}
label1.Text=s;
--------------------------------------------------------------------
打开光驱:
api.mciSendString("set CDAudio door open",null, 127, 0);
关闭光驱:
api.mciSendString("set CDAudio door closed",null, 127, 0);
----------------------------------------------------------------------------------------
类api中:
[DllImport("winmm.dll", EntryPoint="mciSendStringA")]
public static extern int mciSendString (string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
[DllImport("kernel32.dll", EntryPoint="GetVolumeInformationA")]
public static extern int GetVolumeInformation (string lpRootPathName,StringBuilder lpVolumeNameBuffer, int nVolumeNameSize, int lpVolumeSerialNumber, int lpMaximumComponentLength, int lpFileSystemFlags, string lpFileSystemNameBuffer, int nFileSystemNameSize);
[DllImport("kernel32.dll", EntryPoint="GetDriveTypeA")]
public static extern int GetDriveType (string nDrive);
http://hedonister.cnblogs.com/archive/2005/05/12/153735.html