Port série de l'énumération en Delphi en utilisant SetupDiGetClassDevs

Je vais essayer d'énumérer les "noms" pour les ports COM. Les ports peuvent changer dynamiquement comme USB-série périphériques sont connectés et déconnectés lors de l'exécution.

Fondée sur des méthodes décrites dans cette question, j'essaie d'utiliser le SetupDiGetClassDevs méthode.

J'ai trouvé cet exemple de code, mais il est écrit pour une version plus ancienne de la setupapi l'unité (le lien d'origine de homepages.borland.com ne fonctionne pas bien sûr).

J'ai essayé d'utiliser le setupapi unité de l'actuel JVCL(JVCL340CompleteJCL221-Build3845), mais il ne semble pas être compatible avec Delphi 7. Je reçois des erreurs du compilateur:

if SetupDiGetDeviceRegistryProperty(DevInfoHandle,DeviceInfoData,
    RegProperty,
    @PropertyRegDataType,
    @S1[1],RequiredSize,@RequiredSize) then begin

Dans l'appel à la fonction SetupDiGetDeviceRegistryProperty,
Je reçois le message d'erreur "Types réels et les paramètres formels doivent être identiques" sur les paramètres @PropertyRegDataType, et @RequiredSize.

La Delphi3000 site me dit que le code a été écrit en 2004 et est prévu pour Delphi 7, donc je ne sais pas pourquoi il ne fonctionne pas avec Delphi 7 maintenant, à moins que setupapi a changé. Est quiconque est familier avec les changements de setupapi que pourrait causer ces problèmes?

Je suis en essais avec un simple programme de console. Le utilise l'instruction est " de windows,
sysutils,
classes,
setupAPI,
Registre;"

Le programme principal est:

  begin
  ComPortStringList := SetupEnumAvailableComPorts;
  for Index := 0 to ComPortStringList.Count - 1 do
      writeln(ComPortStringList[Index]);
  end;
  end.

OriginalL'auteur tim11g | 2011-02-15