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;
posted @ 2012-10-31 18:34  fred_rk  阅读(1494)  评论(0编辑  收藏  举报