怎样获取笔记本电脑串口的个数和名称(COM1,COM2...)?(200分)

Y

ykjiang

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手都知道一般的笔记本电脑只有一个串口,名称是COM1,本人现在在笔记本
电脑的PCMCIA槽里插了一块串口扩展卡,能再扩展出个2串口,但是我在三个笔记本电脑上
安装该卡后结果却不一样,在设备管理器的端口下看到的端口名称各不相同,
分别是:COM4和COM5;COM5和COM6;COM3和COM5,也许还有其它的组合,给我的编程带来
了不便。
我现在希望在程序中获取本机的串口的名称及串口的个数,请各位高手指教。
 
可以用下面的笨办法:

function Init_RS232(com_name:pChar):boolean;
var
hCom: Thandle;
begin
Result := true;
hCom:=CreateFile(com_name,generic_read or
generic_write,0,nil,open_existing,
file_flag_overlapped,0);//打开串行口
if hCom=invalid_handle_value then
begin
CloseHandle(hCom);
Result:=false;
exit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
ComName: string;
begin
for i:=1 to 255 do
begin
ComName := 'com'+inttostr(i);
if Init_RS232(pchar(ComName)) then ListBox1.Items.Add(ComName);
end;
end;
 
去读注册表中HARDWARE/DEVICEMAP/SERIALCOMM'下面的键值

以下是从我的一段程序里面Copy出来的,自己改一下了

var TheReg: TRegistry;
// KeyInfo:TRegKeyInfo;
KeyName: string;
Val: TStringList;
i: integer;
begin
try
TheReg := TRegistry.Create;
val := TStringList.Create;
TheReg.RootKey := HKEY_LOCAL_MACHINE;
KeyName := 'HARDWARE/DEVICEMAP/SERIALCOMM'; //有该键则打开,没有则创建
if TheReg.KeyExists(KeyName) then
begin
if TheReg.OpenKey(KeyName, False) then
begin
TheReg.GetValueNames(Val);
cBoxCom.Items.Clear;
for I := 0 to Val.Count - 1 do
begin
cBoxCom.Items.Add(TheReg.ReadString(Val.Strings));
end;
end
else
ShowMessage('Error Open Registry!');
TheReg.CloseKey;
end;
finally
TheReg.Free;
Val.Free;
end;
end;
 
谢谢gog! 谢谢zw8461!
 
顶部