学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验
源代码在线查看: 用vc++6.0控制计算机和光驱.txt
用VC++6.0控制计算机和光驱
--------------------------------------------------------------------------------
第八军团 时间:2003-7-25 17:02:50
摘 要 简单演示用VC++6.0怎样实现“关闭计算机”、“重新启动计算机”、“打开CD-ROM”、“关闭CD-ROM”。
关键字 VC,MCI,Windows API
一、引言
VC++6.0是Microsoft公司推出的开发Win32环境(Windows95/98/NT/2000)程序,面向对象的可视化集成编程系统。它具有很强的系统操作能力,可开发多种程序,如应用程序、动态连接库、ActiveX控件等。Windows API 是Windows系列软件为程序开发人员提供的用于进入操作系统核心的途径,进行高级编程的途径。在VC++6.0中有效的利用这些API函数,我们可以很容易的控制我们的计算机和计算机的其他设备。
二、预备知识
首先,要实现“打开CD-ROM”、“关闭CD-ROM”这两个功能要用到MCI。我们先介绍一下用MCI 来控制的方法。
MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。
一般说来,程序员使用两个函数就可以与MCI打交道了:
MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, UINT uMsg,DWORD dwFlags, DWORD dwParam );命令字符串方式,用接近于日常生活用语的方式发送控制命令,适用于高级编程如VB、TOOLBOOK等
mciSendCommand命令参数说明:
WDeviceID:指定了设备标识,这个标识会在程序员打开MCI设备时由系统提供。
uMsg:指定将如何控制设备,详细请查阅后面“MCI指令”一栏。
DwFlags:访问标识。
DwParam:一般是一个数据结构,标识程序在访问MCI时要的一些信息。
MCIERROR mciSendString(LPCTSTR lpszCommand,LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);命令消息方式,用专业语法发送控制消息,适用于VC等语言编程,此方式直接与MCI设备打交道。对于mciSendString命令参数说明:
LpszCommand:一串控制字符串。
LpszReturnString:返回信息由系统填入第二个参数。
cchReturn:指明返回信息的最大长度,若对MCI装置设定了"notify"标志则需要在第四个参数hwndCallback填上返回窗口句柄。
要实现“关闭计算机”、“重新启动计算机”的功能必须要调用Windows API函数ExitWindowsEx()和LoadLibrary()。还需要用到shell.dll动态连接库。
三、具体实现步骤:
1. 创建一个Dialog based的MFC应用程序。
2. 在资源里插入对话框并添加按扭:
3. 对应对话框中的按扭添加相应的代码:
void CControlDlg::OnRestartcomputer()
{
OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构
OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&OsVersionInfo); //获取操作系统版本信息
if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
//Windows98,调用ExitWindowsEx()函数重新启动计算机
DWORD dwReserved;
ExitWindowsEx(EWX_REBOOT,dwReserved); //可以改变第一个参数,实现注销用户、关机、关闭电源等操作
// 退出前的一些处理程序
}
}
void CControlDlg::OnShutdowncomputer()
{
typedef int (CALLBACK *SHUTDOWNDLG)(int); //显示关机对话框函数的指针
HINSTANCE hInst = LoadLibrary("shell32.dll"); //装入shell32.dll
SHUTDOWNDLG ShutDownDialog; //指向shell32.dll库中显示关机对话框函数的指针
if(hInst != NULL)
{
//获得函数的地址并调用之
ShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);
(*ShutDownDialog)(0);
}
}
void CControlDlg::OnOpencdrom() //打开CD-ROM
{
mciSendString("Set cdAudio door open wait",NULL,0,NULL);
}
void CControlDlg::OnClosecdrom() //关闭CD-ROM
{
mciSendString("Set cdAudio door closed wait",NULL,0,NULL);
}
四、小结
通过学习MCI的各个属性,我们可以随意操作相关多媒体外围设备。读者如果有兴趣可以用MCI来完成很多多媒体操作,如播放音频,播放视频等等。本程序在Windows98/2000环境及VC++6.0编译通过。