小弟是个新手,遇到了以下几个问题1、向ListView中添加大量数据时,如何判断所有的数据全部添加完毕?我要在数据全部添加完毕后执行另一个过程;2、程序运行期间,如何知道指定的光驱被弹出(最好也能检测虚拟光驱的弹出)?3、Delphi中如何分辨物理光驱和虚拟光驱?问题解决,立即给分;

解决方案 »

  1.   

    转贴:检测虚拟光驱监测是否是虚拟光驱,没有测试,:(
    给你一个函数,(可以区分真实光驱和虚拟光驱):
    Function IsCDROM(Drv : Char):BOOLEAN;
    Var 
      CDR   : string;
      cnt   : byte;
      Count,First : word;
    begin
      Result := false;
      CDR := '';
      asm
        mov ax, 1500h
        xor bx, bx
        int $2f           
        les di, COUNT
        mov es:[di], bx
        les di, FIRST
        mov es:[di], cx
      end;
      if Count > 0 then
        for cnt := 0 to (Count-1) do
          CDR := CDR + char(First + Byte('A') + cnt);
      Result := (Pos(upcase(Drv),CDR) > 0);
    end;
      

  2.   

    转贴自超级猛料
    ------------------
    检测光驱是否就绪
    function CDROMReady(DRV:char):boolean;
    var
      i:dword;
      buf:array[0..MAX_PATH] of char;
      pd:DWORD;
    begin
      pd:=0;
      GetVolumeInformation(DRV+':\',buf,i,@pd,i,i,buf,i);
      result:=pd<>0;
    end;
    -------------------
    监视光驱是否有光盘拦截消息WM_DEVICECHANGE即可!
    //响应该消息
    procedure Tform1.WMDEVICECHANGE(var msgx :Tmessage);
    const
      DBT_DEVICEARRIVAL=$8000;
      DBT_DEVICEREMOVECOMPLETE=$8004;
    begin
      inherited;
      case msgx.WParam of
        DBT_DEVICEARRIVAL:Caption :='有了!';
        DBT_DEVICEREMOVECOMPLETE:Caption :='取走了';
      end;
    end;
      

  3.   

    1.你是不是采用数据循环加入的方式把大量数据加到ListView中的,则在循环完备后即执行另一个过程即可,如果是在进程中,则把另一个过程也写到该加入过程中,不就可以了!第2、3问题,请参考楼上的方法!
      

  4.   

    WMDEVICECHANGE(var msgx :Tmessage) 是Delphi自带的还是自定义的???
      

  5.   

    WMDEVICECHANGE(var msgx :Tmessage)是一个消息处理函数,需要自己定义type
      TForm1 = class(TForm)
      private
        { Private declarations }
          procedure WMDEVICECHANGE(var msgx: TWMChar); message WM_DEVICECHANGE;
      public
        { Public declarations }
      end;
      

  6.   

    检测虚拟光驱的那段代码无法执行,提示如下
      les di, COUNT
    [Error] Invalid combination of opcode and operands
      les di, FIRST
    [Error] Invalid combination of opcode and operands
    不过我的问题已经解决了,谢谢各位大侠了,如果哪位能将上述问题解决地话,再发个帖子,不胜感激结帖给分了