比如,现在我只是找到了“com1”,"com2"
但我想把“通信端口 (com1)”,“通信端口 (com2)”这整个字符串都找出来我现在的方法如下:bool GetComportList(vector<string>& vecComportList)
{
//reset the vector
vecComportList.clear(); //从注册表中获取所有的串口,\HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm
HKEY hKey = HKEY_LOCAL_MACHINE;
byte strKeyDat[128] = {0};
DWORD Type = REG_SZ;
DWORD length=128;
LPTSTR lpValueName = "HARDWARE\\DEVICEMAP\\SERIALCOMM";
if(ERROR_SUCCESS != ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpValueName,
0,KEY_READ,&hKey))
return false; //先用函数RegQueryInfoKey取得值的个数,再用RegEnumValue取得每个值的名称和数据。
/*CHAR     achKey[128]; */  // buffer for subkey name
    /*DWORD    cbName;    */               // size of name string 
CHAR     achClass[MAX_PATH] = "";  // buffer for class name 
DWORD    cchClassName = MAX_PATH;  // size of class string 
DWORD    cSubKeys=0;               // number of subkeys 
DWORD    cbMaxSubKey;              // longest subkey size 
DWORD    cchMaxClass;              // longest class string 
DWORD    cValues;              // number of values for key 
DWORD    cchMaxValue;          // longest value name 
DWORD    cbMaxValueData;       // longest value data 
DWORD    cbSecurityDescriptor; // size of security descriptor 
FILETIME ftLastWriteTime;      // last write time  DWORD i, retCode;  CHAR  achValue[128]={0}; 
DWORD cchValue = 128;  // Get the class name and the value count. 
retCode = RegQueryInfoKey(
hKey,                    // key handle 
achClass,                // buffer for class name 
&cchClassName,           // size of class string 
NULL,                    // reserved 
&cSubKeys,               // number of subkeys 
&cbMaxSubKey,            // longest subkey size 
&cchMaxClass,            // longest class string 
&cValues,                // number of values for this key 
&cchMaxValue,            // longest value name 
&cbMaxValueData,         // longest value data 
&cbSecurityDescriptor,   // security descriptor 
&ftLastWriteTime);       // last write time  // Enumerate the key values. 
if (cValues) 
{
for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 

cchValue = 128; 
length = 128;
achValue[0] = '\0'; 
retCode = RegEnumValue(hKey, i, 
achValue, 
&cchValue, 
NULL, 
NULL,
strKeyDat, //value data
&length); if (retCode == ERROR_SUCCESS ) 

string strComport = (char*)strKeyDat;
vecComportList.push_back(strComport);

}//for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
}//if (cValues)  //close the key
::RegCloseKey(hKey); return true;
}
但是这样没有对端口的描述:
请教解决办法

解决方案 »

  1.   

    MFC又一个控件,直接可以用~
      

  2.   

    http://blog.csdn.net/lfchen/archive/2006/05/16/741686.aspx//找出名称中带COM的设备就是你需要的。
      

  3.   

    推荐一个已经封装好的类,直接使用即可http://www.codeguru.com/Cpp/W-P/system/hardwareinformation/article.php/c5721/
    添加里面的“ EnumSerial.cpp ”和“ EnumSerial.h ”两个文件,并且将 Setupapi.lib 包含进你的工程文件中就行了调用方式如下:
    CArray<SSerInfo,SSerInfo&> asi;
      // Populate the list of serial ports.
      EnumSerialPorts(asi,FALSE/*include all*/);  for (int ii=0; ii<asi.GetSize(); ii++) {
        CString str = (asi[ii].strFriendlyName);
    }
    返回的字符串含有你需要的信息"通信端口 (com1)"