如何知道系统有几个串口?(100分)

  • 主题发起人 主题发起人 bszhu
  • 开始时间 开始时间
B

bszhu

Unregistered / Unconfirmed
GUEST, unregistred user!
我想是否可以从注册表里得到答案,因为我现在的做法是强行访问串口,
看有没有异常。
 
HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/SERIALCOMM
NT:
Serial0 "com1"
Serial1 "com2"
....



WIN95
COM1 "COM1"
COM2 "COM2"
.....
 
I see and have a try, but I have only COM1, but in win95
there is "com1" and "com2"
 
My NT only Serial1 "COM2"
 
这就不明白了
我的机器上是对的呀!
不过如果只是主办上提供的端口是可以
在注册表其他地方找到的
 
I use "RegMon" to monitor the action performed by
"Async Pro", it tried from COM1 to COM50, but found noting.
 
以前用汇编的时候记得在内存的某个位置有这个信息,
不过不记得是具体什么位置了
 
微型机系统仅提供二个串口, 早期的机器称为RS232, RS232C,但OS在访问外设时
是通过口地址访问的,如LPT1:为3f8H等,我想,你可通过读取这些端口可实现对
Com1~com4的访问(com1,com3共用一个地址;com2,com4共用一个地址).
 
The following example demonstrates enumerating the communications
ports that are installed and listed in the Win32 registry.

Example:

uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
reg : TRegistry;
ts : TStrings;
i : integer;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware/devicemap/serialcomm',
false);
ts := TStringList.Create;
reg.GetValueNames(ts);
for i := 0 to ts.Count -1 do begin
Memo1.Lines.Add(reg.ReadString(ts.Strings));
end;
ts.Free;
reg.CloseKey;
reg.free;
end;


主板上一般是提供两个以上通信口,(有些原装机例外)但有的没有接出来,
在COMS可以设置第二个通信口是否有效,你可以在COMS中将其Disable掉,
再查注册表中的值,看有什么不一样。
 
多人接受答案了。
 
后退
顶部