質問

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

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

QueryDosDevice()の使用を参照する記事も見つかりましたが、 thisを試してみましたサンプルコードでは、COMポートをまったく表示しないようです。

質問: WindowsマシンのCOMポートをリストする最も信頼性の高い方法(不明なWindowsバージョン間)は何ですか?

役に立ちましたか?

解決

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

ランタイムの信頼性が必要な場合は、このメソッドを使用します。

他のヒント

C ++で記述されたURLを参照してください

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

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

これは、すべてのウィンドウバージョンで使用可能なデバイスマネージャーの原理から機能するため、すべてのウィンドウバージョンで機能します。

これは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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top