您的位置:首页 > 其它

多光驱控制的简单功能的简单封装。

2005-10-15 21:30 274 查看
提供了打开和关闭光驱,如果就一个光驱自然好控制,但是多个的话......我查了点资料参考着,盗窃了一个.希望对大家有用.欢迎指导 不多说,贴代码. 使用如下.

CDiskControl gCDRom;
void CMyDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
if(gCDRom.CDRomExists('j'))
{
MessageBox("是光驱");
}
else
{
MessageBox("不是光驱");
}
}
void CMyDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
if(!gCDRom.OpenCDRom('j'))
{
MessageBox("open光驱");
}
else
{
MessageBox("failed open 光驱");
}
}
void CMyDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
if(!gCDRom.CloseCDRom('j'))
{
MessageBox("closed光驱");
}
else
{
MessageBox("failed closed 光驱");
}
}

/********************************************************************
created: 2005/08/19
created: 19:8:2005 16:27
filename: CDiskControl.h
author: hh

purpose: 也就是获得光盘的一点信息,然后控制它开关的
*********************************************************************/
#ifndef _CDISKCONTROL_H_
#define _CDISKCONTROL_H_
#define CLOSEDCDROM "Set cdaudio door closed wait"
#define OPENCDROM "Set cdaudio door open wait"
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm")
class CDiskControl
{
public:
CDiskControl(){};
~CDiskControl(){};
/** 如果你就一个光驱就不用输入它的盘符了 成功返回0,否则返回其他值 */
int OpenCDRom(const char chDisk = 0);
/** 如果你就一个光驱就不用输入它的盘符了 成功返回0,否则返回其他值*/
int CloseCDRom(const char chDisk = 0);
/** 判断指定的盘符是否是光驱 是返回真,否则返回假 */
BOOL CDRomExists(const char chDisk ) ;
protected:
/** 针对单光驱用户的 */
MCIERROR SendMciString(const char* szCommand,
LPTSTR lpszReturnString = NULL,
UINT cchReturn = 0,
HWND hwndCallback = NULL)const;
/** 把字符整理为F:形式的字符串 */
const char* FormatDriver(const char chDisk);
/** 成功返回0,否则返回其他值 */
MCIERROR ExecuteCommand(const char chDisk, DWORD dwCommand);
private:
static const int DISKVOLUMELEN = 3;
char m_CDRomVolume[DISKVOLUMELEN];
};
#endif

/********************************************************************
created: 2005/08/19
created: 19:8:2005 16:27
filename: CDiskControl.cpp
author: hh

purpose:
*********************************************************************/
#include "CDiskControl.h"

/** 如果你就一个光驱就不用输入它的盘符了 */
int CDiskControl::OpenCDRom(const char chDisk)
{
int iResult = 0;
if(chDisk == 0)
{
if(!SendMciString(OPENCDROM))
{
iResult = -1;
}
}
else
{
if(ExecuteCommand(chDisk, MCI_SET_DOOR_OPEN ))
{
iResult = -2;
}
}
return iResult;
}
/** 如果你就一个光驱就不用输入它的盘符了 */
int CDiskControl::CloseCDRom(const char chDisk)
{
int iResult = 0;
if(chDisk == 0)
{
if(SendMciString(CLOSEDCDROM))
{
iResult = -1;
}
}
else
{
if(ExecuteCommand(chDisk, MCI_SET_DOOR_CLOSED ))
{
iResult = -2;
}
}
return iResult;
}
/** 针对单光驱用户的 */
MCIERROR CDiskControl::SendMciString(const char* szCommand,
LPTSTR lpszReturnString,
UINT cchReturn ,
HWND hwndCallback)const
{
return mciSendString(szCommand,lpszReturnString,cchReturn,hwndCallback);//关闭光驱
}
/** 判断指定的盘符是否是光驱 是返回真,否则返回假 */
BOOL CDiskControl::CDRomExists(const char chDisk )
{
return (GetDriveType(FormatDriver(chDisk)) == DRIVE_CDROM) ;
}
/** 把字符整理为F:形式的字符串 */
const char* CDiskControl::FormatDriver(const char chDisk)
{
ZeroMemory(m_CDRomVolume, DISKVOLUMELEN);
m_CDRomVolume[0] = chDisk;
m_CDRomVolume[1] = ':';
return m_CDRomVolume;
}
/** 成功返回0,否则返回其他值 */
MCIERROR CDiskControl::ExecuteCommand(const char chDisk, DWORD dwCommand)
{
MCIERROR errResult = 0;
DWORD dwFlags;
MCI_OPEN_PARMS mciOpen;
ZeroMemory(&mciOpen,sizeof(MCI_OPEN_PARMS));
mciOpen.lpstrDeviceType=(LPCSTR)MCI_DEVTYPE_CD_AUDIO;
mciOpen.lpstrElementName = FormatDriver(chDisk);
dwFlags = MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT|MCI_OPEN_SHAREABLE;
errResult = mciSendCommand(0,MCI_OPEN,dwFlags,(unsigned long)&mciOpen);
if(!errResult)
{
mciSendCommand(mciOpen.wDeviceID,MCI_SET,dwCommand,0);
mciSendCommand(mciOpen.wDeviceID,MCI_CLOSE,MCI_WAIT,0);
}
return errResult;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: