تعداد قائمة من منافذ COM للأنظمة في دلفي
-
03-07-2019 - |
سؤال
هدف: أود أن أكون قادرًا على سرد منافذ COM المتاحة على نظام في Delphi.
الواجب المنزلي:لقد قرأت هذه لذلك الخيط على تعداد منافذ LPT للنظام باستخدام السجل. لقد وجدت أيضًا أن منافذ COM مدرجة في السجل في HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
ولكن وجدت إيماءة لم تتم الإجابة عليها في نفس الموضوع أن هذا قد لا يكون موثوقًا به على أجهزة مختلفة وإصدارات مختلفة من Windows.
لقد وجدت أيضًا مقالات تشير إلى استخدام QueryDosdevice () ولكن عند المحاولة هذا الرمز النموذج, ، وجدت أنه لا يبدو أنه يسرد أي منافذ com على الإطلاق.
سؤال: ما هي الطريقة الأكثر موثوقية (عبر إصدارات Windows غير معروفة) لإدراج منافذ COM على جهاز Windows؟
المحلول
devicemap serialcomm جيد لجميع إصدارات NT. ربما ستحتاج إلى النظر تحت Dyn_data لـ Win9x.
يستخدم هذه الطريقة إذا كنت بحاجة إلى موثوقية وقت التشغيل.
نصائح أخرى
يرجى الذهاب عبر عنوان URL الذي كتب في C ++
http://www.codeproject.com/kb/system/serial_portsenum_fifo.aspx
ويمكن تنفيذ نفس النهج في دلفي أيضًا .. أو يمكن لأي شخص تحويلك إلى ذلك ..
سيعمل هذا على جميع إصدارات Windows نظرًا لأن هذا يعمل من مبدأ Manager Manager المتاح لجميع إصدارات النوافذ.
هذا رمز لـ Linux وليس لنظام التشغيل Windows ....
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;