请问如何用mci命令控制光驱的弹入和弹出?

Smile_Tiger 2000-05-23 01:27:00
最好详细些,有具体的代码段
...全文
169 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongdu 2000-05-23
  • 打赏
  • 举报
回复
CD in:

MCI_OPEN_PARMS open;
MCI_SET_PARMS set;
LONG FFlag;
WORD FId=0;
FFlag=MCI_NOTIFY and MCI_OPEN_TYPE and MCI_OPEN_SHAREABLE;
open.lpstrDeviceType="CDAudio";
mciSendCommand(FId,MCI_OPEN,FFlag,LONG(&open));
FId=open.wDeviceID;
FFlag=MCI_NOTIFY and MCI_SET_DOOR_CLOSED; mciSendCommand(FId,MCI_SET,FFlag,LONG(&set));
mciSendCommand (FId, MCI_CLOSE, NULL, NULL);

CD close:
MCI_OPEN_PARMS open;
MCI_SET_PARMS set;
LONG FFlag;
WORD FId=0;
FFlag=MCI_NOTIFY and MCI_OPEN_TYPE and MCI_OPEN_SHAREABLE;
open.lpstrDeviceType="CDAudio";
mciSendCommand(FId,MCI_OPEN,FFlag,LONG(&open));
FId=open.wDeviceID;
FFlag=MCI_NOTIFY and MCI_SET_DOOR_OPEN;
mciSendCommand(FId,MCI_SET,FFlag,LONG(&set));
mciSendCommand (FId, MCI_CLOSE, NULL, NULL);

link 时要winmm.lib
longx 2000-05-23
  • 打赏
  • 举报
回复
//软件CD Eject功能。出/进(有的光驱不支持进)
mciSendCommand(mciCDID,MCI_SET,MCI_SET_DOOR_OPEN,NULL);
mciSendCommand(mciCDID,MCI_SET,MCI_SET_DOOR_CLOSE,NULL);

给你一端有关MCI使用的例子;

2.MCI初步。
MCI常用两种方法:
1.高级命令: mciSendstring()
2.低级命令: mciSendCommand() (相关函数:mciGetErrorString())
其中第二个方法最为常用.

使用的一般步骤:
1.打开MCI设备:
设备名有:waveaudio,cdaudio,sequencer,avivide ,etc (声音设备,CD设备,MIDI设备,AVI设备,等)
2.使用打开的MCI设备
3.处理MCI通知消息

例1:播放声音文件
//打开声音设备
MCI_OPEN_PARMS mciOpen;
int mciSoundID;
mciOpen.lpstrDeviceType=”waveaudio”;
mciOpen.lpstrElementName=path; //文件名
mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE and MCI_OPEN_ELEMENT,
(DWORD)(LPVOID)&mciOpen);
//参数说明:1.设备的ID
2.应用程序传递给MCI消息,表示应用程序所要执行的动作
3.调用标志.
4.指向一数据结构
mciSoundID=mciOpen.wDeviceID;
//打开成功后,播放声音文件
MCI_PLAY_PARMS mciPlay;
mciPlay.dwCallback=m_hWnd;// MCI通知消息的窗口句柄
(须与调用标志:MCI_NOTIFY同时使用才有效)
mciSendCommand(mciSoundID,MCI_PLAY, MM_MCINOTIFY,
(DWORD)(LPVOID)&mciPlay);
//关闭MCI设备
mciSendCommand(mciSoundID,MCI_CLOSE,0,NULL);
//程序中须加入MCI通知消息处理的入口:
ON_MESSAGE(MM_MCINOTIFY , MyFunc)

例2:播放CD
//打开CD设备
MCI_OPEN_PARMS mciOpen;
int mciCDID;
mciOpen.lpstrDeviceType=”cdaudio”;
mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE,(DWORD)(LPVOID)&mciOpen);
mciCDID=mciOpen.wDevcieID;
//获取CD信息(磁道数,磁道长度)
//1.设置时间格式TMSF
MCI_SET_PARMS mciSet;
mciSet.dwTimerFormat=MCI_FORMAT_TMSF;
mciSendCommand(mciCDID,MCI_SET,MCI_SET_TIME_FORMAT,
(DWORD)(LPVOID)&mciSet);
//2.查询
//查询磁道数
MCI_STATUS_PARMS mciStat;
UINT tracks;
mcistat.dwItem=MCI_STATUS_NUMBER_OF_TRACKS;
mciSendCommand(mciCDID,MCI_STATUS,MCI_STATUS_ITEM and
MCI_TRACK,(DWORD)(LPVOD)&mciStat);
Tracks=(UINT)mciStat.dwReturn;
//CD上的总的磁道数,第一个磁道是 1,不是0
//查询某一个磁道长度
mciStat.dwItem=MCI_STATUS_LENGTH;
mciStat.dwTrack=1;
unsigned long trackLength;
char szTemp[200];
mciSendCommand(mciCDID,MCI_STATUS,MCI_STATUS_ITEM and
MCI_TRACK,(DWORD)(LPVOID)&mciStat);
trackLength=mciStat.dwReturn;
//将时间转换成mm:ss:ff 格式
sprintf(szTemp,”%02u:%02u:%02u”,MCI_MSF_MINUTE(trackLength),
MCI_MSF_SECOND(trackLength),
MCI_MSF_FRAME(trackLength));
//播放CD
MCI_PLAY_PARMS mciPlay;
//设置起点
mciPlay.dwFrom=MCI_MAKE_TMSF(track,MCI_MSF_MINUTE(0),
MCI_MSF_SECOND(0),
MCI_MSF_FRAME(0));
//设置终点
mciPlay.dwTo=MCI_MAKE_TMSF(track,MCI_MSF_MINTUTE(
trackLength),MCI_MSF_SECOND(trackLength),
MCI_MSF_FRAME(tracekLength));
mciPlay.dwCallback=m_hWnd;
mciSendCommand(mciCDID,MCI_PLAY, MCI_FROM and MCI_TO and
MCI_NOTIFY,(DWORD)(LPVOID)&mciPlay);
//软件CD Eject功能。出/进(有的光驱不支持进)
mciSendCommand(mciCDID,MCI_SET,MCI_SET_DOOR_OPEN,NULL);
mciSendCommand(mciCDID,MCI_SET,MCI_SET_DOOR_CLOSE,NULL);



16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧