Question

Objectif: j'aimerais pouvoir répertorier les ports COM disponibles sur un système Delphi.

Devoirs: J'ai lu ce sujet SO sur l'énumération du LPT ports d’un système utilisant le registre. J'ai également constaté que les ports COM sont répertoriés dans le registre sous HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM , mais j'ai trouvé une gesticulation sans réponse dans même fil que cela pourrait ne pas être fiable sur différentes machines et différentes versions de Windows.

J'ai également trouvé des articles faisant référence à l'utilisation de QueryDosDevice (), mais après avoir essayé cela exemple de code , j’ai constaté qu’il ne semblait pas lister de ports COM du tout.

Question: Quel est le moyen le plus fiable (à travers des versions Windows inconnues) de répertorier les ports COM sur un ordinateur Windows?

Était-ce utile?

La solution

DEVICEMAP \ SERIALCOMM est bon pour toutes les versions de NT. Vous devrez probablement regarder sous DYN_DATA pour Win9x.

Utilisez cette méthode si vous avez besoin de la fiabilité de l'exécution.

Autres conseils

Veuillez passer par l'URL qui est écrite en C ++

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

et la même approche peut également être mise en œuvre dans Delphi .. ou quelqu'un peut convertir pour vous dans SO ..

Cela fonctionnera pour toutes les versions de Windows, car il fonctionne selon le principe du gestionnaire de périphériques, qui est disponible pour toutes les versions de fenêtres.

Ceci est le code pour LINUX pas pour 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top