uses
Windows, SysUtils, Classes, Registry;
function EnumSerialComm(const S: TStrings): Integer;
var
Index: Integer;
PortNo: Integer;
Str: String;
Names: TStringList;
begin
Result := 0;
S.Clear;
{ Create temporary string list object }
Names := TStringList.Create;
try
{ Create and open registry key }
with TRegistry.Create do
begin
try
RootKey := HKEY_LOCAL_MACHINE;
OpenKeyReadOnly('\HARDWARE\DEVICEMAP\SERIALCOMM');
try
{ Get names }
GetValueNames(Names);
{ Read key values }
for Index := 0 to Names.Count - 1 do
begin
if GetDataType(Names.Strings[Index]) = rdString then
begin
Str := ReadString(Names.Strings[Index]);
if CompareText(Copy(Str,1,3),'COM') = 0 then
begin
PortNo := StrToIntDef(Copy(Str,4,Length(Str)),-1);
if PortNo > 0 then
begin
S.AddObject(Str,Pointer(PortNo));
if Result < PortNo then
begin
Result := PortNo;
end;
end;
end;
end;
end;
finally
{ Close registry key }
CloseKey;
end;
finally
Free;
end;
end;
finally
{ Release local objects }
Names.Free;
end;
end;
取り込んだシリアルポートはソートされていない(レジストリのエントリ順)なので、必要に応じてソートしてから使用しましょう。
2008年7月11日
シリアルポートの列挙
PC上で使用できるシリアルポートはレジストリの"HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM"上の"COM"で始まるエントリを列挙すればよい。ただしこのエントリはOpenKeyReadOnlyで開かないとユーザ権限によってはエラーになるので要注意。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿