DelphiでのシステムComポートのリストの列挙
-
03-07-2019 - |
質問
目的: 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;
所属していません StackOverflow