C++控制光驱舱门开关

      程序实现对计算机光驱舱门的开关进行控制,循环开关动作5次。

      Qt Creator下的代码如下:

#include <QtCore/QCoreApplication>  
#include <windows.h>  
#include <mmsystem.h>  
#include <stdio.h>  
  
void OpenCDRom();  
void CloseCDRom();  
  
int main(int argc, char *argv[])  
{  
    QCoreApplication a(argc, argv);  
  
    printf("Look down on your CDRow's door");  
    for(int i=0; i<5; i++)  
    {  
        OpenCDRom();  
        Sleep(2000);  
        CloseCDRom();  
        Sleep(2000);  
    }  
  
    return a.exec();  
}  
  
void OpenCDRom()  
{  
    WCHAR returnstring[10];  
    mciSendStringW(L"set cdaudio door open", returnstring, 10, NULL);  
}  
  
void CloseCDRom()  
{  
    WCHAR returnstring[10];  
    mciSendStringW(L"set cdaudio door closed", returnstring, 10, NULL);  
}  

      其中,程序中使用的 MciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3等。该函数共有四个参数,分别是LPCWSTR,LPWSTR,UINT和HWND。其中第一个参数是要发送的命令字符串,字符串的结构是:[命令][设备别名][命令参数];第二个参数是返回信息的缓冲区;第三个参数是缓冲区的大小,就是字符串变量的长度;第四个参数是回调方式,一般设置为NULL。函数如果执行成功,则返回零,否则返回错误代码。有关MciSendString参见http://www.360doc.com/content/10/0509/21/1173434_26833589.shtml或者http://baike.baidu.com/view/1622810.htm#3

      另外一个需要注意的地方是WCHAR的使用,有关WCHAR的相关问题参见http://www.cppblog.com/shongbee2/archive/2009/04/28/81349.html

      在程序的设置过程中,需要将winmm.lib文件添加至工程中。在Qt中,打开工程文件,在工程文件的最后添加“LIBS += -lwinmm”即可。

      在VS2010下进行开发的程序代码基本相同,只是需要添加“#pragma comment(lib, "winmm.lib")”将winmm.lib文件添加到项目中去即可。具体代码如下所示:

#include <windows.h>  
#include <mmsystem.h>  
#include <stdio.h>  
  
#pragma comment(lib, "winmm.lib")  
  
void OpenCDRom();  
void CloseCDRom();  
  
void main()  
{  
    printf("Look down on your CDRow's door");  
    for(int i=0; i<5; i++)  
    {  
        OpenCDRom();  
        Sleep(2000);  
        CloseCDRom();  
        Sleep(2000);  
    }  
}  
  
void OpenCDRom()  
{  
    WCHAR returnstring[10];  
    mciSendStringW(L"set cdaudio door open", returnstring, 10, NULL);  
}  
  
void CloseCDRom()  
{  
    WCHAR returnstring[10];  
    mciSendStringW(L"set cdaudio door closed", returnstring, 10, NULL);  
}

      本人也是初学者,如果存在问题也希望大家能够指出,大家多多交流,共同进步!

posted @ 2013-02-24 11:26  Gage-Xu  阅读(439)  评论(0编辑  收藏  举报