MFC下边自动寻找串口

2023-11-03 09:38
文章标签 自动 串口 mfc 寻找 下边

本文主要是介绍MFC下边自动寻找串口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘自:http://blog.csdn.net/itas109/article/details/18359295

程序:http://blog.csdn.net/itas109/article/details/18359295

serial类里边的两个函数

void CSerialPort::Hkey2ComboBox(CComboBox& m_PortNO)
{HKEY hTestKey;bool Flag = FALSE;///仅是XP系统的注册表位置,其他系统根据实际情况做修改if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hTestKey) ){QueryKey(hTestKey);}RegCloseKey(hTestKey);int i = 0;m_PortNO.ResetContent();///刷新时,清空下拉列表内容while(i < MaxSerialPortNum && -1 != m_nComArray[i]){CString szCom; szCom.Format(_T("COM%d"), m_nComArray[i]);m_PortNO.InsertString(i, szCom.GetBuffer(5));++i;Flag = TRUE;if (Flag)///把第一个发现的串口设为下拉列表的默认值m_PortNO.SetCurSel(0);}}
///查询注册表的串口号,将值存于数组中
///本代码参考于mingojiang的获取串口逻辑名代码
//
void CSerialPort::QueryKey(HKEY hKey) 
{ #define MAX_KEY_LENGTH 255#define MAX_VALUE_NAME 16383//	TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name//	DWORD    cbName;                   // size of name string TCHAR    achClass[MAX_PATH] = TEXT("");  // 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; TCHAR  achValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; // 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 for (i=0;i<20;i++)///存放串口号的数组初始化{m_nComArray[i] = -1;}// Enumerate the key values. if (cValues > 0) {for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) { cchValue = MAX_VALUE_NAME;  achValue[0] = '\0'; if (ERROR_SUCCESS == RegEnumValue(hKey, i, achValue, &cchValue, NULL, NULL, NULL, NULL))  { CString szName(achValue);
//				if (-1 != szName.Find(_T("Serial")) || -1 != szName.Find(_T("VCom")) ){if (-1 != szName.Find(_T("Serial")) || -1 != szName.Find(_T("VCom")) || -1 != szName.Find(_T("Silabser"))){BYTE strDSName[10]; memset(strDSName, 0, 10);DWORD nValueType = 0, nBuffLen = 10;if (ERROR_SUCCESS == RegQueryValueEx(hKey, (LPCTSTR)achValue, NULL, &nValueType, strDSName, &nBuffLen)){int nIndex = -1;while(++nIndex < MaxSerialPortNum){if (-1 == m_nComArray[nIndex]) {m_nComArray[nIndex] = atoi((char*)(strDSName + 3));break;}}}}} }}else{AfxMessageBox(_T("本机没有串口....."));}}






这篇关于MFC下边自动寻找串口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/337273

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s