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); }
本人也是初学者,如果存在问题也希望大家能够指出,大家多多交流,共同进步!