[DllImport("winmm.dll")]
public static extern int mciSendString(string s1,string s2,int i1,int i2);
//关闭光驱
mciSendString ("set cdaudio door closed","",0,0);
//打开光驱
mciSendString ("set cdaudio door open","",0,0);
**********************************************************************************************
光驱弹出与关闭
using System.Runtime.InteropServices ;
[DllImport("winmm.dll")]
public static extern int mciSendString(string s1,string s2,int i1,int i2);
private void button1_Click(object sender, System.EventArgs e) {
mciSendString ("set cdaudio door open","",0,0);
}
private void button2_Click(object sender, System.EventArgs e) {
mciSendString ("set cdaudio door closed","",0,0);
}
-------------------------------
如何在vc++控制光驱的弹出和关闭,
这个问题非常简单。
首先加入相应控件。
Project-->Add To Project-->Component and Controls-->Visual C++Components-->Windows Multimedia library
然后填加按钮的响应代码
开光驱:
mciSendString("Set cdAudio door open wait",NULL,0,NULL);
关光驱:
mciSendString("Set cdAudio door closed wait",NULL,0,NULL);
**********************************************************************************************
编程思路 利用API函数中的mciSendString()函数可以控制光驱的弹出与关闭。 mciSendString()函数 声明:Declare integer mciSendString in winmm.dll string lpstrCommand ,string@ lpstrReturnString, integer uReturnLength ,integer hwndCallback 语法:mciSendString(lpszCommand, @lpszReturnString, cchReturn, hwndCallback) 参数:lpszCommand:一个MCI命令字符串。 lpszReturnString:指定一个缓冲区用于接收返回信息,如果不需要返回信息,该参数可以为NULL。 cchReturn:lpszReturnString参数所指定缓冲区的长度(以字符为单位)。 hwndCallback:如果在命令字符串中指定了“notify”标志,该参数为回调窗口的句柄。 返回值:执行成功返回0,否则表示执行失败。
设计步骤 1、新建一个项目文件,创建一个新表单,名称为“控件光驱的弹出和关闭”。 2、在表单中添加Command控件。 3、程序代码: 在表单的Load事件中添加以下代码: Declare integer mciSendString in winmm.dll string lpstrCommand ,string@ lpstrReturnString,; integer uReturnLength ,integer hwndCallback set library to "foxtools.fll"
在Command1控件的Click事件中添加以下代码: myval=mciSendString("set CDAudio door open" ,NULL,0,0) &&打开光驱 IF myval<>0 MESSAGEBOX("打开光驱发生错误!",48,"系统提示") ENDIF
在Command2控件的Click事件中添加以下代码: myval=mciSendString("set CDAudio door closed" ,NULL,0,0) &&关闭光驱 IF myval<>0 MESSAGEBOX("关闭光驱发生错误!",48,"系统提示") ENDIF |
**********************************************************************************************在C#中如何判断光驱中是否有盘,如何得到光驱的盘符,如何弹出光驱?
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 );
}
}
-----------------------------------------------------------------------------------------------------------------------------------
用API
GetDriveType 得到盘符
返回值为5即为光驱
用DirectoryInfo读取得到的盘符的内容,即可判断是否有盘
打开或者弹出
mciSendString("set CDAudio door open", 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,会得到光驱。
-----------------------------------------------------------------------------------------------------------------------------------
再写一个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);