2,640
社区成员
发帖
与我相关
我的任务
分享
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;
}
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);
}