请问用程序如何判断串口是被占用,还是串口不存在?我用的是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打开看看就知道了,不过无法知道串口是被使用还是不存在
注册表方法不行,里面有的,不一定表示就真的有,没有的也不表示真的没有
用别的程序应该关不了的!