Ha lennél szíves rákeresni a regisztrációs adatbázisban valamelyik COM port nevére (pl.: COM1 vagy akár COM6) akkor megtudhatnád, hogy pontoson hová is van bejegyezve. Mint említettem több helyen is előfordulhat (ennek sok oka lehet, most nem részletezném).
Itt a unit forráskódja, ami nálam működik és egy TMemo-ba írja a listát:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Registry;
type
{ TForm1 }
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
reg: TRegistry;
st: TStrings;
i: Integer;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
// reg.OpenKey('hardware\devicemap\serialcomm', False);
reg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\Ports', False);
st := TStringList.Create;
reg.GetValueNames(st);
for i := 0 to st.Count - 1 do
Memo1.Lines.Add(st.Strings[i]+': '+reg.ReadString(st.Strings[i])); // nevek és értékek kettősponttal elválasztva
Memo1.Lines.Add(''); // üres sor elválasztóként
Memo1.Lines.Add(st.Text); // és most csak a nevek
st.Free;
reg.CloseKey;
reg.Free;
end;
end.