查看完整版本: C++控制光驱(光盘驱动器)舱门的开关

程序员 2008-5-5 17:39

C++控制光驱(光盘驱动器)舱门的开关

很实用的一个程序,做好了可以做一个恶作剧程序,像闹鬼一样,嘿嘿。

#include <windows.h>
#include <mmsystem.h>

void CD_OpenCloseDrive(BOOL bOpenDrive, TCHAR cDrive)
{
MCI_OPEN_PARMS op;
MCI_STATUS_PARMS st;
DWORD flags;

TCHAR szDriveName[4];
strcpy(szDriveName, "X:");

::ZeroMemory(&op, sizeof(MCI_OPEN_PARMS));
op.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;

if(cDrive > 1)
{
   szDriveName[0] = cDrive;
   op.lpstrElementName = szDriveName;
   flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT| MCI_OPEN_SHAREABLE;
}
else flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE;

if (!mciSendCommand(0,MCI_OPEN,flags,(unsigned long)&op))
{
   st.dwItem = MCI_STATUS_READY;

   if(bOpenDrive)
    mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0);
   else
    mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_CLOSED,0);

   mciSendCommand(op.wDeviceID,MCI_CLOSE,MCI_WAIT,0);
}
}


void CD_OpenCloseAllDrives(BOOL bOpenDrives)
{
int nPos = 0;
UINT nCount = 0;
TCHAR szDrive[4];
strcpy(szDrive, "?:");

DWORD dwDriveList = ::GetLogicalDrives ();

while (dwDriveList)
{                      //取得所有光驱列表,多光驱也支持哦
   if (dwDriveList & 1)
   {
    szDrive[0] = 0x41 + nPos;
    if(::GetDriveType(szDrive) == DRIVE_CDROM)
     CD_OpenCloseDrive(bOpenDrives, szDrive[0]);
   }
   dwDriveList >>= 1;
   nPos++;
}
}

int main()
{
CD_OpenCloseAllDrives(true); //true-open false-close
return 0;
}

因为要用到一个库,工程-设置-链接-选项 里写上Winmm.lib

呵呵,把生成的exe文件发送给到你朋友的机子上,放到自启动里。哈哈。剩下的不用我说了。

dayulin 2008-5-6 13:03

不错的东西。呵呵。
页: [1]
查看完整版本: C++控制光驱(光盘驱动器)舱门的开关