379上位机VC MFC通过注册表获取串口数量及串口号
获取串口数量及串口号
功能展示
串口在我们工业控制领域中是极为常用的一种通讯方式,串口通讯前都得设置串口的端口号如COM1等,我们当前例程就实现系统全部串口的获取 ,效果如图,点击<获取全部串口>例程会读取注册表中的全部安装串口,并显示出来
要点提示
系统中串口的相关信息保存在子键HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM下,有时子键SERIALCOMM并未找到,程序也就无法打开子键,这是因为系统未安装任何的串口,插入一根USB转串口数据线,在串口驱动安装成功就会自动创建子键SERIALCOMM,并在子键下生成键值项;
实现功能
1.新建基于对话框的应用程序
2.添加列表控件,关联变量CListCtrl m_List;,添加按钮<获取全部串口>关联点击函数
void CGkbc8Dlg::OnGet()
{
if(!AllRegKeyValue(HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM") )
MessageBox("未找到串口");
}
4.初始化控件,再添加上面的自定义函数
m_List.ModifyStyle(0,LVS_REPORT,NULL);
m_List.InsertColumn(0,"索引",LVCFMT_LEFT,90);
m_List.InsertColumn(1,"串口号",LVCFMT_LEFT,300);
BOOL CGkbc8Dlg::AllRegKeyValue(HKEY hRootKey, CString sSubKey)
{
HKEY hSubKey;
long lResult;
lResult = RegOpenKeyEx(hRootKey, sSubKey, 0, KEY_READ, &hSubKey);// 打开注册表
if(ERROR_SUCCESS != lResult)
return FALSE;
//<>
const UINT nSize = 256;
UINT nIndex = 0; //枚举索引
CString sTemp;
TCHAR Name[nSize] = {0}; // 键/值名称
DWORD NameSiz = nSize*sizeof(TCHAR);
DWORD Type = REG_SZ; // 值类型
TCHAR sData[nSize] = {0}; // 值数据
DWORD DataSiz = nSize*sizeof(TCHAR);
lResult = RegEnumValue(hSubKey,nIndex,Name,&NameSiz,0,&Type, (unsigned char *)sData, &DataSiz);
while (lResult == ERROR_SUCCESS)
{
sTemp.Format("%d",nIndex);
m_List.InsertItem(m_List.GetItemCount(), sTemp);//插入一行
m_List.SetItemText(m_List.GetItemCount()-1, 1, sData);
//<>
nIndex++;
NameSiz = nSize*sizeof(TCHAR);//必须重新赋值
DataSiz = nSize*sizeof(TCHAR);
lResult = RegEnumValue(hSubKey,nIndex,Name,&NameSiz,0,&Type, (unsigned char *)sData, &DataSiz);
}
RegCloseKey(hSubKey);
if(!nIndex)
return FALSE;
return TRUE;
}
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|