
如何枚举系统COM串口
int nCount = 0; \\\/\\\/系统COM端口的注册表信息就在该目录下。
if(RegKey.Open(HKEY_LOCAL_MACHINE, Hardware\\\\\\\\DeviceMap\\\\\\\\SerialComm) == ERROR_SUCCESS) { while(true) { TCHAR ValueName[_MAX_PATH]; \\\/\\\/记录键名 BYTE ValueData[_MAX_PATH]; \\\/\\\/记录键值 DWORD nValueSize = _MAX_PATH; DWORD nDataSize = _MAX_PATH; DWORD nType; \\\/\\\/逐个枚举出注册表目录下的键名和键值。
if(::RegEnumValue(HKEY(RegKey), nCount, ValueName, &nValueSize, NULL, &nType, ValueData, &nDataSize) == ERROR_NO_MORE_ITEMS) { break; } cout< if(RegKey.Open(HKEY_LOCAL_MACHINE, Hardware\\\\\\\\DeviceMap\\\\\\\\SerialComm) == ERROR_SUCCESS) { while(true) { TCHAR ValueName[_MAX_PATH]; \\\/\\\/记录键名 BYTE ValueData[_MAX_PATH]; \\\/\\\/记录键值 DWORD nValueSize = _MAX_PATH; DWORD nDataSize = _MAX_PATH; DWORD nType; \\\/\\\/逐个枚举出注册表目录下的键名和键值。 if(::RegEnumValue(HKEY(RegKey), nCount, ValueName, &nValueSize, NULL, &nType, ValueData, &nDataSize) == ERROR_NO_MORE_ITEMS) { break; } cout< 注册表被损坏,如果你有备份的话,就恢复一下,如果没有,那就只有重装系统了. 我的是VC6.0 没办法,我改了下你的代码,编译通过:================================================================#include stdafx.h#include 如果是XP 会在注册表中保留的,可以在注册表中查找,然后读取出来.如果打开失败就是被占用了var rCom : TRegistry; lCom : TStrings;rCom := TRegistry.Create; lCom := TStringList.Create; cbCom.Clear; try rCom.RootKey := HKEY_LOCAL_MACHINE; if rCom.OpenKey('HARDWARE\\\\DEVICEMAP\\\\SERIALCOMM', false) then begin \\\/\\\/rCom.GetKeyNames(lCom); rCom.GetValueNames(lCom); for I := 0 to lCom.Count - 1 do begin sComName := rCom.ReadString(lCom.Strings[I]); if (sComName[1] = 'C') and (sComName[2] = 'O') and (sComName[3] = 'M') then cbCom.Items.Add(sComName); \\\/\\\/要找的COM口名字,其他信息你自己分析吧. end; finally lCom.Free; rCom.Free; end; 注册表被损坏,如果你有备份的话,就恢复一下,如果没有,那就只有重装系统了. class function TSysMethod.GetSysComList: TStringListvarKeyHandle: HKEYErrCode, Index: IntegerValueName, Data: stringValueLen, DataLen, ValueType: DWORDTmpPorts: TStringListegiErrCode := RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'HARDWARE\\\\DEVICEMAP\\\\SERIALCOMM', 0,KEY_READ, KeyHandle)if ErrCode <> ERROR_SUCCESS theShowMessage('打开串口列表的注册表项出错')TmpPorts := TStringList.CreatetryIndex := 0repeatValueLen := 256DataLen := 256SetLength(ValueName, ValueLen)SetLength(Data, DataLen)ErrCode := RegEnumValue(KeyHandle, Index, PChar(ValueName),Cardinal(ValueLen), nil, @ValueType, PByte(PChar(Data)), @DataLen)if ErrCode = ERROR_SUCCESS theegiSetLength(Data, DataLen)TmpPorts.Add(Data)Inc(Index)endelse if ErrCode <> ERROR_NO_MORE_ITEMS theShowMessage('打开串口列表的注册表项出错')until (ErrCode <> ERROR_SUCCESS)TmpPorts.SortResult := TmpPortfinallyRegCloseKey(KeyHandle)endend注册表枚举失败怎么办
电脑网络无法枚举注册表项值什么意思?
关于delphi串口的枚举问题
注册表枚举失败怎么办
请教Delphi下如何枚举系统当前可用的串口



