多光驱控制的简单功能的简单封装。
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;
}
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;
}
相关文章推荐
- 基于netcore对ElasitSearch客户端NEST查询功能的简单封装NEST.Repository
- 将boost::thread的某些简单功能封装成类java线程的想法。
- 自己封装的一个简单的倒计时功能
- 自己封装的一个简单的倒计时功能实例
- a671 jsp 注册时同意协议才能点击注册按钮功能及样式控制 简单例子
- unity3d的物件旋转功能简单封装~
- 一个mongodb的helper,封装了一些简单常用的功能
- 一个简单的封装 .net的日志功能
- 简单封装分页功能pageView.js
- mysql模块部分功能的简单封装
- C#实现简单远程控制及桌面监控功能(客户端)
- OC简单小功能的实现-利用三个代表三原色的滑块控制背景颜色变化
- iOS实现白板、画板功能,有趣的涂鸦工具,已封装,简单快捷使用
- 【Log】一个功能强大的Log封装库包括控制日志输出,保存Log到文件,过滤输出等级。。
- 优雅设计封装基于Okhttp3的网络框架(二):多线程下载功能原理设计 及 简单实现
- Android 简单封装获取验证码倒计时功能
- 超简单的自定义标签封装实现的JSP分页显示功能
- 对RecyclerView的封装,使用简单,功能丰富
- metlab控制摄像头操作笔记(二)简单的预览和拍照功能
- 一个mongodb的helper,封装了一些简单常用的功能