Delphi 枚举串口

1、根据ClassName 'Ports' 找出相应的GUID。

2、根据GUID找到已安装设备的信息。

3、枚举设备集中的设备信息。

4、打开设备的注册表项特定的配置信息。

5、根据返回的注册表项查找‘PortName’对应的串口号。

//Delphi 7中枚举系统串口
function
EnumSystemSerial: TStringList; stdcall; var Key: HKEY; GUID: TGUID; Buffer: PChar; Index: Integer; Judge: Boolean; BufferType: DWORD; RequiredSize: DWORD; hDeviceInfo: HDEVINFO; SerialList: TStringList; DeviceInfo: SP_DEVINFO_DATA; begin Index := 0; SerialList := TStringList.Create; if not SetupDiClassGuidsFromName('Ports',@GUID,1,@Requiredsize) then begin Result := SerialList; Exit; end; hDeviceInfo := SetupDiGetClassDevs(@GUID, nil, 0, DIGCF_PRESENT or DIGCF_PROFILE); if Cardinal(hDeviceInfo) = INVALID_HANDLE_VALUE then begin Result := SerialList; Exit; end; DeviceInfo.cbSize := SizeOf(SP_DEVINFO_DATA); while True do begin Judge := SetupDiEnumDeviceInfo(hDeviceInfo, Index, @DeviceInfo); if (Judge = False) and (GetLastError = ERROR_NO_MORE_ITEMS) then begin Break; end; Key := SetupDiOpenDevRegKey(hDeviceInfo, @DeviceInfo, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ); RegQueryValueEx(Key, 'PortName', nil, @BufferType, nil, @RequiredSize); GetMem(Buffer, RequiredSize); RegQueryValueEx(Key, 'PortName', nil, @BufferType, PByte(Buffer), @RequiredSize); SerialList.Add(Buffer); Inc(Index); end; SetupDiDestroyDeviceInfoList(hDeviceInfo); Result := SerialList; end;

转载于:https://www.cnblogs.com/fred-rk/archive/2012/10/31/2748545.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值