请教MFC里面识别硬件端口的方法

leixp3636 2008-11-20 10:45:00
比如,现在我只是找到了“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;
}


但是这样没有对端口的描述:
请教解决办法
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一条晚起的虫 2008-11-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/lfchen/archive/2006/05/16/741686.aspx

//找出名称中带COM的设备就是你需要的。
leixp3636 2008-11-20
  • 打赏
  • 举报
回复
能说详细点吗?谢谢
闪破风浪 2008-11-20
  • 打赏
  • 举报
回复
MFC又一个控件,直接可以用~
ilovedrv 2008-11-20
  • 打赏
  • 举报
回复
推荐一个已经封装好的类,直接使用即可

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)"

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧