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;
取り込んだシリアルポートはソートされていない(レジストリのエントリ順)なので、必要に応じてソートしてから使用しましょう。
0 件のコメント:
コメントを投稿