RT
使用mciSendString方法MS只能控制一个光驱
public  static extern int  mciSendString (string  lpstrCommand,string  lpstrReturnstring ,int  uReturnLength,int  hwndCallback);
private void opencdrom_Click(object sender, System.EventArgs e)
{
  long lngReturn = mciSendString("set CDAudio door open", null, 127, 0);
}private void closecdrom_Click(object sender, System.EventArgs e)
{
  long lngReturn = mciSendString("set CDAudio door closed", null, 127, 0);
} 如果有两个光驱的话怎么实现?
G:和H:都是光驱,我想打开G就打开G,想打开H就打开H

解决方案 »

  1.   

    用mcisendString控制光驱的开、关,如果成功,是有返回值的,根据这个返回值就可确定光驱的状态。
    mcisendString发送MCI命令好像只能控制主光驱。要控制多光驱必须用其他API函数DeviceIoControl。
    还可使用CDdoor
    private static extern long CDdoor(string lpstrCommand, string lpstrReturnString, long uReturnLength, long hwndCallback); 
      

  2.   

    我找了很多网站差不多知道要用这个mciSendCommand函数
    但是网上都是C++的代码,有几个地方在C#里不知道怎么写尤其是
    MCI_OPEN
    MCI_WAIT  
    MCI_OPEN_TYPE_ID
    MCI_OPEN_TYPE
    这几个参数都是多少,转换完以后应该是uint类型的,但是C#没有这些类型,我不知道怎么声明谁能帮我看看
    网上代码(大部分都是这个)
    http://dev.csdn.net/article/8/8449.shtm
      

  3.   

    大概的代码已经出来了,还有几处不明
    MCI_OPEN_PARMS op;
       MCI_STATUS_PARMS st;
       uint flags;   //下面这两句什么意思?好像是处理字符串
       char[] szDriveName=new char[4];
       strcpy(szDriveName, "X:");
       //下面的两句是什么意思?给OP赋值??
       ::ZeroMemory(&op, sizeof(MCI_OPEN_PARMS));
       op.lpstrDeviceType = MCI_DEVTYPE_CD_AUDIO;
       //下面的'|'代表什么?逻辑或?
           flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT| MCI_OPEN_SHAREABLE;
       }
       //最后的那个(unsigned long)&op)什么意思
        if (!mciSendCommand(0,MCI_OPEN,flags,(unsigned long)&op))