首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请教用程序怎么判断串口是被占用,还是串口不存在?小弟我用的是spcomm控件

2012-03-25 
请问用程序如何判断串口是被占用,还是串口不存在?我用的是spcomm控件。我用的是spcomm控件。我现在是用这种

请问用程序如何判断串口是被占用,还是串口不存在?我用的是spcomm控件。
我用的是spcomm控件。

我现在是用这种方法:

if     ComPortAvailable( 'COM1: ')     then
    begin
          //ShowMessage( 'com1口可以使用.! ');
    end
else
    begin
              try
                      comm1.CommName:= 'com1 ';
                      comm1.StopComm;
                      sleep(500);
                      comm1.StartComm;
                      Lblopencom.Caption:= '当前使用的串口为:com1 ';
                      exit;
              except
                      showmessage( '不存在串口1或被占用。 ');
              end;
    end;

所用的函数:
function     ComPortAvailable(Port:PChar):boolean;
Var
        DeviceName:Array[0..80]   of   Char;
        ComFile:THandle;
begin
        StrPCopy(DeviceName,Port);
        ComFile:=CreateFile(DeviceName,GENERIC_READ     or     GENERIC_WRITE,0,Nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
        Result:=ComFile <> INVALID_HANDLE_VALUE;
        CloseHandle(ComFile);
end;

上述的程序最大的一个问题是不能区分该串口是被占用,还是不存在。

请高手指点,谢谢。

[解决办法]
查询注册表: \HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM, 可以获得当前计算机中所有可用串口的名称, 然后再逐一检测它们是否被占用。
[解决办法]
自己用createfile打开看看就知道了,不过无法知道串口是被使用还是不存在
注册表方法不行,里面有的,不一定表示就真的有,没有的也不表示真的没有
用别的程序应该关不了的!

热点排行