#include <string> #include <list> #include <iostream> #include <Windows.h> using namespace std; bool EnumSerialPort(OUT list<int> &m_SerialPortNum) //枚举串口 { list<string> m_arrSerialPort; // 串口链表 HKEY hKey; char data_Set[] = "HARDWARE//DEVICEMAP//SERIALCOMM//"; long ret0 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey); if(ret0 != ERROR_SUCCESS) { return false; } unsigned long dwIndex = 0; while (true) { long Status; char Name[256]={0}; unsigned char szPortName[80]={0}; unsigned long dwName; unsigned long dwSizeofPortName; unsigned long Type; dwName = sizeof(Name); dwSizeofPortName = sizeof(szPortName); Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type, szPortName, &dwSizeofPortName); if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA)) { string str((char *)szPortName); m_arrSerialPort.push_back(str); } else { break; } } RegCloseKey(hKey); if (m_arrSerialPort.size() == 0) return false; list<string>::iterator it = m_arrSerialPort.begin(); string tmp; int portNum= 0; while (it != m_arrSerialPort.end()) { tmp = *it; tmp = tmp.substr(3,tmp.size()); portNum = atoi(tmp.data()); m_SerialPortNum.push_back(portNum); it++; } return true; } int main(void) { list<int> m_arrSerialPort; // 串口链表 bool iRet = EnumSerialPort(m_arrSerialPort); if (!iRet) { return 1; } list<int>::iterator it = m_arrSerialPort.begin(); while (it != m_arrSerialPort.end()) { cout<<*it<<endl; it++; } getchar(); return 0; } 呵呵呵