1.用什么函数可以得到指定光驱门的开关状态?
2.在光驱门开关后,系统会发送什么消息?如何响应这两个消息,以作出一些反应?

解决方案 »

  1.   

    如何打开关闭光驱门:使用ms提供的多媒体控制api可以非常容易地实现此功能。有两种方法,分别使用mcisendcommand, mcisendstring1. 使用mcisendcommand
    mcideviceid mciid;mci_open_parms openparms;//光驱的设备名
    openparms.lpstrdevicetype = "cdaudio";//打开此设备
    mcisendcommand (null, mci_open, mci_wait | mci_open_type,
    (dword) &openparms);//得到设备id
    mciid = mcigetdeviceid(openparms.lpstrdevicetype);//打开光驱门
    //将下句中的mci_set_door_open更改为mci_set_door_closed即为关闭光驱门
    mcisendcommand(mciid, mci_set, mci_wait | mci_set_door_open, null);
    2. 使用mcisendstring,这种方法更为简便
    //打开光驱门
    //将此语句中的open更改为close即为关闭光驱的门
    mcisendstring( "set cdaudio door open", null, 0, null);
    3.若有多个光驱,打开指定光驱的方法mci_open_parms openparms; // 第几个cdrom?
    dword ncdrom  = 0; // 光驱的设备名
     openparms.lpstrdevicetype = (char *)((ncdrom << 16) +
    mci_devtype_cd_audio); // 打开此设备
     mcierror mcir = mcisendcommand (null, mci_open, mci_wait | mci_open_type_id
    | mci_open_type,  (dword)&openparms); if (mcir != null)
      // 不能打开此设备,返回
      return; // 打开光驱门
     // 将下句中的mci_set_door_open更改为mci_set_door_closed即为关闭光驱门
     mcir = mcisendcommand(openparms.wdeviceid, mci_set, mci_wait |
    mci_set_door_open, null); mcir = mcisendcommand(openparms.wdeviceid, mci_close, mci_wait, null);