来自:http://www.cnblogs.com/GT_Andy/archive/2009/08/21/1921992.html

[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);

**********************************************************************************************

控制光驱的弹出和关闭
2009-06-28 15:51

编程思路

利用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);

转载于:https://www.cnblogs.com/xia392145655/articles/2247440.html

C# 或C++ 控制系统光驱弹出或关闭相关推荐

  1. Layer弹出层关闭后刷新父页面

    一.Layer弹出层关闭后刷新父页面 //编辑 $("#edit").on("click", function(){var id = getIdSelectio ...

  2. html遮罩提示框代码,基于jQuery实现弹出可关闭遮罩提示框实例代码

    jquery CSS3遮罩弹出层动画效果,使用非常简单,就两个标签,里面自定义内容和样式,四种常见效果,懂的朋友还可以修改源代码修改成自己想要的效果 先给大家展示下效果图,如果大家感觉还不错,请参考实 ...

  3. 每天学一点flash(70)弹出和关闭窗口

    有时候经常需要进行窗口弹出和关闭.于是有能可能会在鼠标行为下 进行一个实例化创建.每次进行点击的时候,都会实例化创建一个新的对象. 然后问题来了,其实不是希望那么多窗口. 通过 第二个办法也可以进行限 ...

  4. easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口

    弹出窗关闭的时候提示是否关闭,同时进行一些对应的方法调用, 然而在进行页面关闭调用的时候,往往页面关闭了,才弹出确认对话框, $.messager.confirm和panel的onBeforeClos ...

  5. 微信小程序 - (广告、优惠券)弹出与关闭

    介绍一个简单的案例,广告的弹出与关闭,页面如下: 点 x 按钮,页面关闭(x按钮 可改变颜色) b 话少说,上代码: 设置大view高宽为屏幕大小,fixed定位,透明居最外层,用isSuccess控 ...

  6. EasyAdmin弹出层关闭后如何自动刷新当前页面

    找到easy-admin.js 搜索$('body').on('click', '[data-open]', function () 下面内容替换这个方法 $('body').on('click', ...

  7. 学习使用layer弹出层关闭问题

    学习使用layer弹出层关闭问题 //当你想关闭当前页的某个层时 var index = layer.open(); var index = layer.alert(); var index = la ...

  8. java选择是否弹窗_java Swing 点击对话框选择是或者否后又再次弹出刚才关闭的对话框...

    我写了个程序,在JTable中的数据上单击右键弹出一个菜单如下图单击删除时弹出一个对话框,可以选择是或者否在多次操作时发现不管我选择是或者否,理论上选择之后就关闭该该警告对话框... 我写了个程序,在 ...

  9. layui如何隐藏弹出层关闭的按钮

    layui默认弹出层是带有关闭按钮的,但是在某些场景我们不需要layui的关闭按钮,这时只需添加closeBtn :0即可 效果图如下: 示例代码如下: layui.use('layer', func ...

最新文章

  1. 在Java中是如何定义和声明接口的?
  2. 机器学习必读TOP 100论文清单:高引用、分类全、覆盖面广丨GitHub 21.4k星
  3. (000) java后台开发之指导思想
  4. laravel中TokenMismatchException异常处理
  5. 爬虫基本库的使用---urllib库
  6. java 调用groovy脚本,实现多个sql按指定逻辑运行,可做报表预聚合
  7. 2018诺贝尔奖预测:美国11人,日本1人,中国无人入围
  8. HDFS : RemoteException Operation category READ is not supported in state standby.
  9. mysql 语句中的national 、 comment
  10. 如何修改apache 2最大连接数
  11. java监控文件内容变化_Java使用WatchService监控文件内容变化的示例
  12. 如何通过 WinUSB 功能访问 USB 设备
  13. 解决库仑计初始化卡死问题
  14. msn自身头像存放位置
  15. Vue3 npm run serve 太慢的解决方法
  16. 华为P7安装Linux,华为P7插卡步骤图解 华为P7电信/移动/联通版手机sim卡安装使用教程...
  17. 香农-范诺算法(Shannon-Fano coding)算法
  18. SPSS MODELER
  19. sxt_1_struts2入门_hello
  20. 微信小程序判断手机号码格式正确与否的代码

热门文章

  1. Arduino UNO控制3.5inch ILI9486显示屏教程
  2. 让滚动条滚动到正好显示某个节点的位置
  3. 技术贴:如何跟刚认识的女孩发短信[精]
  4. execute、executeUpdate、executeQuery三者的区别及返回值
  5. 损失函数:Center Loss
  6. 智慧磐石建设对于武警枪弹装备管理的必要性
  7. 转载:int char* float与CString 之间的转换
  8. [附源码]计算机毕业设计JAVA游戏战队考核系统
  9. linux系统学习笔记6——debian系统分屏操作(亲测)
  10. test-service.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilit