怎样获知计算机上有几个串口??? ( 积分: 45 )

  • 主题发起人 主题发起人 lizi_you
  • 开始时间 开始时间
L

lizi_you

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样获知计算机上有几个串口??
 
怎样获知计算机上有几个串口??
 
用控件组Cport中的某一组件
 
To: gyh75
找不到控件组Cport!!
 
从注册表得到可用串口
procedure GetAvailableComPorts(ComPorts : TStrings);
var
Reg : TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('Hardware/devicemap/SerialComm',false);
Reg.GetValueNames(ComPorts);
Reg.Free;
end;
 
得到可用端口列表:
procedure EnumPorts( PortList: TStrings );
var
MaxPorts : integer;
hPort : THandle;
PortNumber : integer;
PortName : string;
begin
if PortList = nil then EXIT;
{ where are we running on? }
case Win32PlatForm of
VER_PLATFORM_WIN32_NT: MaxPorts := 256;
VER_PLATFORM_WIN32_WINDOWS: MaxPorts := 9;
end;
for PortNumber := 1 to MaxPorts do
begin
if PortNumber > 9 then
PortName := '//./COM' + IntToStr( PortNumber ) // ask Microsoft why...
else
PortName := 'COM' + IntToStr( PortNumber );
hPort := CreateFile( PChar( PortName ),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
0,
0 );
// 注意:如果端口已经被其它程序占用,这里不再列出
if not ( hPort = INVALID_HANDLE_VALUE ) then
PortList.Add( PortName );
CloseHandle( hPort );
end;
end;
 
var
reg : TRegistry;
ts : TStrings;
begin
reg := TRegistry.Create ;
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKey('hardware/devicemap/serialcomm',False) then
begin
ts := TStringList.Create ;
reg.GetValueNames(ts);
showmessage(inttostr(ts.Count));
end;
end;
 
最好的办法是用读注册表和CreateFile相结合的方法
如果计算机上使用过USB to RS232的转换线
那么即使线没接上,在注册表中也是有那么一项的
从注册表读出每个串口
每读一个就用CreateFile验证一下是否可用
这样所得到的串口就是所有可用串口了
比纯使用CreateFile的方法要省一些系统资源
关于具体的代码,楼上的几位给出的已经很详细了
 
鐩存帴鐢╟reatefile鏉ュ垽鏂?氨琛屻
 
从注册表
 
后退
顶部