比如,现在我只是找到了“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;
}
但是这样没有对端口的描述:
请教解决办法
但我想把“通信端口 (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;
}
但是这样没有对端口的描述:
请教解决办法
解决方案 »
- ADO处理Access数据库 数据长度导致写入失败问题
- Hook如何给当前程序发送一个按钮消息
- ADO+VC+SQL遇到的多个问题,求救!
- 怎样把一个2进制的转换成ASCII码?
- 用VC++6.0写局域网即时通讯工具?
- 一个对话框程序调用dll中函数的问题!
- 超菜鸟问题:wprintf(L"中国");怎么打印不出来啊?
- SOCKET网络编程 IPV4地址问题
- 有谁读过《Programming Windows》,据说这是进入金山公司的必读课本?
- 难道vc真的没有用了么?
- 麻烦哪位对位操作比较熟悉的帮忙看下 谢谢
- error LNK2019: unresolved external symbol "class CMsgAutoStApp & __cdecl GetMsgAuStApp(void)"
添加里面的“ 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)"