请问大家,如何用一个按钮控制打开和关闭光驱,
我编了一个函数DiskIsReady(),用MCI_STATUS_READY来进行查询,
但只能查询到光驱里有没有盘,而不能查询到光驱状态,从而控制
光驱,另外WM_DEVICECHANGE消息也只能在光驱状态改变时才能查询。
不知如何是好?
我编了一个函数DiskIsReady(),用MCI_STATUS_READY来进行查询,
但只能查询到光驱里有没有盘,而不能查询到光驱状态,从而控制
光驱,另外WM_DEVICECHANGE消息也只能在光驱状态改变时才能查询。
不知如何是好?
解决方案 »
- 问下下面的路该如何走
- 接收到的数据为什么不全?
- “mkdir”被声明为否决的 这些问题该如何处理
- RemoveFileEx,在win98下是怎么实现的?
- 谁有在vc中使用WebBrowser或CHtmlView的sample或文档
- 给个思路!100分(想给500的,它不让)
- 我设计了一个联众俄罗斯方块作弊程序,不知道该不该公开,大家给点意见啊
- 急!!请高手赐教
- VS2010 这个warning怎么解决?
- MFC activex插件使用URLDownloadToFile函数下载文件
- 高分求救!告诉我email,马上给你发源码。帮帮我,各位大哥!!有关控制滚动条的问题!!
- 怎么做一个可以动态改变其外观的按扭(CBitMapButton with property BS_OWNERDRAW ?)
{
mciSendString( "set cdaudio door open", NULL, 0, NULL);
/* MCIDEVICEID mciID;
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType = "cdaudio"; //光驱的设备名
mciSendCommand (NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE,(DWORD) &OpenParms); //打开此设备
mciID = mciGetDeviceID(OpenParms.lpstrDeviceType); //得到设备ID
mciSendCommand(mciID, MCI_SET, MCI_WAIT | MCI_SET_DOOR_OPEN, NULL); //打开光驱门
*/
}void CToolsDlg::OnInCdrom()
{
mciSendString( "set cdaudio door closed", NULL, 0, NULL);
/* MCIDEVICEID mciID;
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType = "cdaudio";
mciSendCommand (NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE,(DWORD) &OpenParms);
mciID = mciGetDeviceID(OpenParms.lpstrDeviceType);
mciSendCommand(mciID, MCI_SET, MCI_WAIT | MCI_SET_DOOR_CLOSED, NULL);
*/
}
看过了,没有帮助。
大家再帮帮我吧,多谢!
{
mciSendString( "set cdaudio door open", NULL, 0, NULL);
/* MCIDEVICEID mciID;
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType = "cdaudio"; //光驱的设备名
mciSendCommand (NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE,(DWORD) &OpenParms); //打开此设备
mciID = mciGetDeviceID(OpenParms.lpstrDeviceType); //得到设备ID
mciSendCommand(mciID, MCI_SET, MCI_WAIT | MCI_SET_DOOR_OPEN, NULL); //打开光驱门
*/
}void CToolsDlg::OnInCdrom()
{
mciSendString( "set cdaudio door closed", NULL, 0, NULL);
/* MCIDEVICEID mciID;
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType = "cdaudio";
mciSendCommand (NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE,(DWORD) &OpenParms);
mciID = mciGetDeviceID(OpenParms.lpstrDeviceType);
mciSendCommand(mciID, MCI_SET, MCI_WAIT | MCI_SET_DOOR_CLOSED, NULL);
*/
}
Multimedia library项,按Insert按钮。在之后的消息框按“是”。这样,在工程中加入多媒体组件,在
stdafx.h文件中加入了两体语句:
#include <MMSystem.h>
#pragma comment(lib,"wimm.lib")
然后分别为IDC_OPENCDROM和IDC_OPENCLOSECDROM按钮添加BN_CLICKED消息处理函数如下:
void CControlDlg::OnOpencdrom() //打开光驱
{
mciSendString ("Set cdAudio door open wait",NULL,0,NULL);
}
void CControlDlg::OnOpencdrom() //关闭光驱
{
mciSendString ("Set cdAudio door closed wait",NULL,0,NULL);
}
MCI_STATUS_PARMS mciStatusParms;
mciStatusParms.dwCallback = (DWORD) m_hMainWnd;
mciStatusParms.dwItem = dwItem;
mciStatusParms.dwReturn = 0;
SendCommand(MCI_STATUS, MCI_STATUS_ITEM, (DWORD) &mciStatusParms);
return mciStatusParms.dwReturn;
}
首先多谢你回答我的问题:
但是,你的方法只能判断光驱里有没有光盘,而
不能判断光驱的任何时候的状态。
The MCI_OPEN command initializes a device or file. All devices recognize this command.To send this command, call the mciSendCommand function with the following parameters.MCIERROR mciSendCommand(
MCIDEVICEID wDeviceID,
MCI_OPEN,
DWORD dwFlags,
(DWORD) (LPMCI_OPEN_PARMS) lpOpen
);MCI_CLOSE
The MCI_CLOSE command releases access to a device or file. All devices recognize this command.To send this command, call the mciSendCommand function with the following parameters.MCIERROR mciSendCommand(
MCIDEVICEID wDeviceID,
MCI_CLOSE,
DWORD dwFlags,
(DWORD) (LPMCI_GENERIC_PARMS) lpClose
);
值得看看,我让看看能不能。多谢大家。
真的可以判断光驱状态吗,
但我试过,只能判断光驱里有没有光盘。
而不能判断光驱的状态,不知大家有没有试过。
你不信,试试mediaplay或win2000下的cd player.它们也一样.
好象没有有效的方法查到光驱弹出状态,我也查了好长时间.
void DoOpen(){ mciSendStringA("set cdaudio door open", NULL, 0, NULL);
}
///////////////////////////////////////
void DoClose(){
mciSendStringA("set cdaudio door closed" ,NULL,0,NULL);}如果用VC需要这样在文件头部分加入如下声明#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")如果是GCC就需要在编译行-l libmm.lib了