1

目的: Delphi のシステムで利用可能な COM ポートを一覧表示できるようにしたいと考えています。

宿題:レジストリを使用したシステムの LPT ポートの列挙に関するこのSO スレッド を読みました。また、COM ポートがレジストリにリストされていることもわかりましたが、同じスレッドHKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMMで未回答のジェスチャーが見つかりました。これは、異なるマシンや異なるバージョンの Windows では信頼できない可能性があります。

QueryDosDevice() の使用について言及している記事も見つけましたが、このサンプル コードを試してみると、COM ポートがまったくリストされていないように見えました。

質問: Windows マシンの COM ポートを一覧表示する最も信頼できる方法 (Windows のバージョンが不明な場合) は何ですか?

4

3 に答える 3

1

DEVICEMAP \ SERIALCOMMは、すべてのNTバージョンに適しています。Win9xについては、おそらくDYN_DATAを調べる必要があります。

実行時の信頼性が必要な場合は、この方法を使用してください。

于 2009-03-05T01:14:28.583 に答える
1

C++で書かれたURLにアクセスしてください

http://www.codeproject.com/KB/system/serial_portsenum_fifo.aspx

同じアプローチをデルファイでも実装できます..または誰かがあなたのためにSOで変換できます..

これは、すべてのウィンドウ バージョンで使用できるデバイス マネージャーの原則に基づいて機能するため、すべての Windows バージョンで機能します。

于 2009-03-05T12:18:48.003 に答える
0

これは WINDOWS 用ではなく LINUX 用のコードです....

function GetSerialPortNames: string;
var
  Index: Integer;
  Data: string;
  TmpPorts: String;
  sr : TSearchRec;
begin
  try
    TmpPorts := '';
    if FindFirst('/dev/ttyS*', $FFFFFFFF, sr) = 0 then
    begin
      repeat
        if (sr.Attr and $FFFFFFFF) = Sr.Attr then
        begin
          data := sr.Name;
          index := length(data);
          while (index > 1) and (data[index] <> '/') do
            index := index - 1;
          TmpPorts := TmpPorts + ' ' + copy(data, 1, index + 1);
        end;
      until FindNext(sr) <> 0;
    end;
    FindClose(sr);
  finally
    Result:=TmpPorts;
  end;
end;
于 2009-03-05T11:50:08.150 に答える