找一下本站的有关判断CD-ROM中放入碟片的问题,一样的,好像是处理一个消息,忘了,查一下。

解决方案 »

  1.   

    这是可以的,我曾经实现过。但方法和CD-ROM不一样。因为软驱是纯机械装置,而光驱自身带了检测装置。其实原理很简单,就是定时检查一下软驱中有没有软盘。可能你碰到的问题是读软驱时间太长,不能象HD-COPY那样马上停下来,你可以查一下关于软驱控制器的书,里面有一个端口可以用来设这个时间。时间太长,忘了。另外,你还要捕获异常,因为大多情况下软驱里面是没插盘的,读盘错误会发生异常,那时我是用BC编的DOS程序,现在应该差不多吧。
      

  2.   

    这是以前别人回答处理CD-ROM的,参考一下:
    答:Window中当驱动器发生改变时,系统会想所有的应用程序发送一个广播消息
    WM_DEVICECHANGE,包括光驱中插入光盘。次消息在类向导中看不到,需要你
    手工加入。在头文件中声明 消息处理函数
    afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData );在实现文件中加入消息映射.
    ON_MESSAGE(WM_DEVICECHANGE,OnDeviceChange)实现处理函数
    BOOL CCDplayerDlg::OnDeviceChange(UINT nEventType, DWORD dwData )
    {
    switch(nEventType){
    case DBT_DEVICEARRIVAL:
    {
    DEV_BROADCAST_HDR* devhdr=(DEV_BROADCAST_HDR*)dwData;
    if (devhdr->dbch_devicetype==DBT_DEVTYP_VOLUME){
    //有光盘
    }
    }
    }
    break;
    case DBT_DEVICEREMOVECOMPLETE:
    {
    DEV_BROADCAST_HDR* devhdr=(DEV_BROADCAST_HDR*)dwData;
    if (devhdr->dbch_devicetype==DBT_DEVTYP_VOLUME){
    //光盘移去.
    }
    }
    break;
    }
    return TRUE;
    }
      

  3.   

    To:vcmfc 老兄好习惯,做笔记,我可惨了,以前的东西都丢光了。所以一狠心买了个30G的IBM硬盘,嘿嘿……不过就小弟看你的方法真的不行,你可以看出来,当光盘插入光驱后,光驱要自己转好半天,但软驱插进去就插进去了,不但系统不知道,连软驱自己都不知道,直到用起来才嘎吱嘎只响半天测一下。不过你的方法不错,我要开始作笔记了,第一条就是你检测光驱的方法,嘿嘿……
      

  4.   

        在DOS下40:40处是磁盘马达通电时间,通过修改这个值可以做到让软驱极快地读一下就停,我想HDCOPY或许是这么做的,具体还是sxbyl前辈说得对,找本有关软驱控制器接口的书看看。这是我以前学汇编时的一点点资料,可能是没什么用了,只希望能有启发作用。嘿嘿,我也有做笔记的,只是比起vcmfc前辈来我才发现,原来我看过的书还没有他的笔记本厚…………
      

  5.   

    vcmfc老兄,我乃新手,请多多包含!你的方法我已经试过,只能对光驱反应,
    且只能对光驱托盘进入光驱时反应,且只对第一个(primary)光驱反应(我实在WIN2000下测试的,我的及其有两个不同牌子的光驱。对软驱动作不响应!
        感谢楼上各位,此问题似乎还没有很简捷的方法在WINNT和WIN98下解决!
      

  6.   

    在DOS下有办法的,我曾经见到过,好像是有相关的函数调用,不过windows下能否这样,我就不清楚了。