使用SetupDiGetClassDevs在Delphi中进行串行端口枚举

前端之家收集整理的这篇文章主要介绍了使用SetupDiGetClassDevs在Delphi中进行串行端口枚举前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试枚举COM端口的“友好名称”.随着USB串行设备在运行时连接和断开,端口可能会动态变化.

基于this question中描述的可能方法,我试图使用SetupDiGetClassDevs方法.

我找到了this example code,但它是为旧版本的setupapi单元编写的(homepages.borland.com的原始链接当然不起作用).

我尝试使用当前JVCL(JVCL340CompleteJCL221-Build3845)中的setupapi单元,但它似乎与Delphi 7不兼容.我收到编译器错误

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

函数SetupDiGetDeviceRegistryProperty的调用中,
我在参数@PropertyRegDataType和@requiredSize上得到错误“实际和形式参数的类型必须相同”.

Delphi3000站点说该代码是在2004年编写的,适用于Delphi 7,所以我不知道为什么它现在不适用于Delphi 7,除非setupapi已经改变.是否有人熟悉setupapi可能导致这些问题的更改?

我正在测试一个简单的控制台程序.用法声明是“窗口,
sysutils的,
类,
SETUPAPI,
注册;”

主要计划是:

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

解决方法

看起来PDAord类型的一些参数被SetupApi.pas中的var DWord替换.您只需要在代码中从这些参数中删除“@”,如下所示:
if SetupDiGetDeviceRegistryProperty(DevInfoHandle,PropertyRegDataType,requiredSize) then begin

猜你在找的Delphi相关文章