原来C++Builder6在XP下获取串口的方法:

voidTTools::GetSystemPortList(TStringList*pList){TRegistry*regkey=newTRegistry();pList->Clear();regkey->RootKey=HKEY_LOCAL_MACHINE;TStringList*KeyNames;KeyNames=newTStringList();regkey->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM",false);regkey->GetValueNames(KeyNames);for(inti=0;i<=(KeyNames->Count-1);i++){AnsiStringa=regkey->ReadString(KeyNames->Strings[i]);pList->Add(a);}regkey->CloseKey();deleteKeyNames;deleteregkey;}

这种方法,编译好的程序,在Win10下无效,需要管理员权限执行才行.
在Win10直接用API读注册表获取,代码如下:

voidTTools::GetSystemAllPort(TStringList*pList){HKEYhKey;DWORDresult;TCHARvalueName[255];TCHARdata[255];DWORDvalueNameSize,dataSize;DWORDi;result=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Hardware\\DeviceMap\\SerialComm",NULL,KEY_READ,&hKey);//读取注册表串口信息if(ERROR_SUCCESS==result){for(i=0;i<256;i++){valueNameSize=dataSize=sizeof(valueName)/sizeof(TCHAR);result=RegEnumValue(hKey,i,valueName,&valueNameSize,NULL,NULL,(LPBYTE)data,&dataSize);if(ERROR_NO_MORE_ITEMS==result){break;}else{pList->Add(data);}}}else{::MessageBox(0,"PORTERROR!","Error",0);}RegCloseKey(hKey);}