سؤال

هدف: أود أن أكون قادرًا على سرد منافذ 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top