如何判断串口已经被占用了呢?
例如COM1已经被仿真器使用了,程序如何检测到呢?

解决方案 »

  1.   

    if mscomm.portopen then
      showmessage('端口已打开!');
      

  2.   

    解决方法:
       在注册表的HKEY_LOCAL_MACHINE\hardware\devicemap\serialcomm下包含了已经使用的串口的名称实例:uses Registry;procedure TForm1.Button3Click(Sender: TObject);
    var 
        reg : TRegistry;
        ts : TStrings;
        i : integer;
    begin
        reg := TRegistry.Create;
        try
            reg.RootKey := HKEY_LOCAL_MACHINE;
            reg.OpenKey('hardware\devicemap\serialcomm',false);
            ts := TStringList.Create;
            try
                reg.GetValueNames(ts); //获得子键下的所有项
                for i := 0 to ts.Count -1 do
                begin //把每一项下的串值显示在Memo1中
                    Memo1.Lines.Add(reg.ReadString(ts.Strings[i]));
                end;
            finally
                ts.Free;
            end;
        finally
            reg.CloseKey;
            reg.free;
        end;
    end;
      

  3.   

    createfile()查看他的返回值即可
      

  4.   

    To :loxinheng () 
     menliwxj(有缘) 的方法不行吗??
      

  5.   

    hNewCommFile := CreateFile( PChar(FCommName),
                                     GENERIC_READ or GENERIC_WRITE,
                                     0, {not shared}
                                     nil, {no security ??}
                                     OPEN_EXISTING,
                                     FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);     if hNewCommFile = INVALID_HANDLE_VALUE then
            showmessage( 'Error opening serial port' );