Visual studio C++ MFC应用程序自动探测串口号

最近学习Visual studio C++的软件开发,做个串口工具,使用combo box下拉选项选择串口号,有两种方式,第一种自动添加串口号到工具代码中,比如常见的一些串口工具可以选择COM1~COM9的串口号,只需要在代码初始化的时候,加入串口号序列就可以,或者也可以在combo box属性菜单Data中添加“COM1;COM2;COM3;……COM9;”,此种办法在实际使用的时候,会比较麻烦,因为本来只有2个串口,却要在10来个序列中选择一个。

因此还有另外一种比较常见的处理方式,这种方式是在程序启动的时候自动探测系统当前有的串口号,然后将其串口号值加入到combo box控件当中,这样的话更加省事,但是代码要多写一些相关内容,通过百度,找到响应的代码。其运行效果如下,本人的计算机当前只有两个虚拟串口COM5和COM6

具体代码如下

 1 BOOL CMFC_Uart20160921Dlg::CheckComPort(void)
 2 {
 3     long lReg;
 4     HKEY hKey;
 5     DWORD MaxValueLength;
 6     DWORD dwValueNumber;
 7     lReg = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"),
 8         0, KEY_QUERY_VALUE, &hKey);
 9     if (lReg != ERROR_SUCCESS) //成功时返回ERROR_SUCCESS,
10     {
11         AfxMessageBox(TEXT("Open Registry Error!\n"));
12         return FALSE;
13     }
14
15     lReg = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL,
16         &dwValueNumber, &MaxValueLength, NULL, NULL, NULL);
17
18     if (lReg != ERROR_SUCCESS) //没有成功
19     {
20         AfxMessageBox(TEXT("Getting Info Error!\n"));
21         return FALSE;
22     }
23
24     TCHAR *pValueName, *pCOMNumber;
25     DWORD cchValueName, dwValueSize = 10;
26
27     for (int i = 0; i < dwValueNumber; i++)
28     {
29         cchValueName = MaxValueLength + 1;
30         dwValueSize = 10;
31         pValueName = (TCHAR*)VirtualAlloc(NULL, cchValueName, MEM_COMMIT, PAGE_READWRITE);
32         lReg = RegEnumValue(hKey, i, pValueName,
33             &cchValueName, NULL, NULL, NULL, NULL);
34
35         if ((lReg != ERROR_SUCCESS) && (lReg != ERROR_NO_MORE_ITEMS))
36         {
37             AfxMessageBox(TEXT("Enum Registry Error or No More Items!\n"));
38             return FALSE;
39         }
40
41         pCOMNumber = (TCHAR*)VirtualAlloc(NULL, 6, MEM_COMMIT, PAGE_READWRITE);
42         lReg = RegQueryValueEx(hKey, pValueName, NULL,
43             NULL, (LPBYTE)pCOMNumber, &dwValueSize);
44
45         if (lReg != ERROR_SUCCESS)
46         {
47             AfxMessageBox(TEXT("Can not get the name of the port"));
48             return FALSE;
49         }
50
51         CString str(pCOMNumber);
52         //m_ComboComControl.AddString(str); //把获取的值加入到ComBox控件中
53
54         VirtualFree(pValueName, 0, MEM_RELEASE);
55         VirtualFree(pCOMNumber, 0, MEM_RELEASE);
56     }
57
58     return TRUE;
59
60 }

最后我们只要在初始化代码中执行上述函数,然后默认让combo box选择第一个串口就可以了

CheckComPort();
m_ComboComControl.SetCurSel(0);//让combo box的control控件选择第一个串口号

第一种办法是让combo box关联一个CString变量m_comboCom,然后再初始化函数OnInitDialog()中添加下列代码

 1 m_comboCom.AddString(_T("COM1"));
 2     m_comboCom.AddString(_T("COM2"));
 3     m_comboCom.AddString(_T("COM3"));
 4     m_comboCom.AddString(_T("COM4"));
 5     m_comboCom.AddString(_T("COM5"));
 6     m_comboCom.AddString(_T("COM6"));
 7     m_comboCom.AddString(_T("COM7"));
 8     m_comboCom.AddString(_T("COM8"));
 9     m_comboCom.AddString(_T("COM9"));
10     m_comboCom.AddString(_T("COM10"));
11     //m_comboCom.AddString(_T("COM11"));
12     m_comboCom.SetCurSel(0);

或者使用控件的属性功能,如下图所示

时间: 2024-10-14 00:34:01

Visual studio C++ MFC应用程序自动探测串口号的相关文章

我的全栈之路-Java基础之macOS+Visual Studio Code开发Java程序

我的全栈之路-Java基础之macOS+Visual Studio Code开发Java程序 我的全栈之路 3.1 开发环境说明 首先说明下使用软件的版本,操作系统是基于macOS10.14.5,然后在macOS上安装了JDK11.03,如果想要了解macOS下JDK的安装,可以参考我的全栈之路-Java基础之macOS安装JDK,编辑器选用了微软公司开源的Visual Studio Code. 软件名称 软件版本 操作系统 macOS10.14.5 JDK JDK11.0.3 编辑器 Visu

c#小灶——使用visual studio编写第一个程序

虽然,写程序有文本编辑器和编译器就已经足够,但是,我们为了增加工作效率还是要使用IDE. 我们接下来所有的教程都将会在visual studio中实现,visual studio简称vs,是微软开发的一款IDE软件,使用这款软件,可以使开发效率事半功倍. 软件在哪里下载呢?首先推荐官网:https://visualstudio.microsoft.com/zh-hans/vs/ 这里有最新版本的vs下载,需要注意的是,vs有三个版本,分别是社区版.专业版.和企业版,推荐下载社区版,因为社区版是免

采用Visual Studio 2017编译c程序教程

第一步打开Visual Studio 2017 第二步按Ctrl+Shift+N打开项目或者依次点击文件-新建-项目 左边选中Win32右边选中第一项,下面是文件位置和文件名称 设置好后确定 点击下一步 按如图所示勾选点击完成然后 右键点击源文件,添加,新建项然后 中间框选择c++文件,下面名称位置原来是.cpp文件,这是编写c++的,如果要编写c程序的话要改成.c 然后就可以点击添加 然后各位小伙伴就可以编写c程序了 编写完后可以右击c程序文件编译,然后可以选择调试下拉菜单选择执行,或者直接按

Visual Studio Code使用typings拓展自动补全功能

转自:http://blog.csdn.net/liyijun4114/article/details/51658087 参考来源: 官方介绍: https://code.visualstudio.com/Docs/runtimes/nodejs#_intellisense-and-typings gyzhao写的”Visual Studio Code 使用 Typings 实现智能提示功能”: http://www.cnblogs.com/IPrograming/p/VsCodeTypings

使用Visual Studio 2015开发Android 程序

环境配置: 操作系统:win 7 64位 IDE:Visual Studio 2015 SDK:installer_r24.3.3-windows 安装前提: 编辑hosts文件(在附件可下载)因为安装过程中要联网更新和注册 安装完成VS之后直接新建android程序会提示: --------------------------- Microsoft Visual Studio --------------------------- 值不能为 null.参数名: path1 ----------

Rust初步(二):使用Visual Studio Code编写Rust程序(猜猜看游戏)

我是照着下面这篇帮助文档,完成了第一个完整的Rust程序: 猜猜看 游戏 http://kaisery.gitbooks.io/rust-book-chinese/content/content/3.1.Guessing%20Game%20%E7%8C%9C%E7%8C%9C%E7%9C%8B.html 我采用的开发工具是Visual Studio Code, 这应该是目前能找到的最"所见即所得"的编辑器了, 尤其对于我们这种重度Windows依赖症患者来说. 不过需要提出的是,我是在

[No00009D]使用visual studio 2015 update3打包程序安装包的简单方法(不需要InstallShield)

注意: 该方法只适用于小型软件的打包发布: 该打包向导可以预先检查需要的运行库支持: 由于visual studio自2012后取消掉了自带的打包程序,如果有需要打包安装,需要使用一个叫用InstallShield for Visual Studio 的插件来进行打包,但对于小型软件的发布,未免小题大做了. 具体步骤: 步骤 1:在单个要发布的项目上右键单击,选择发布. 步骤 3:选择生成安装向导文件的路径(不是以后软件安装的路径) 步骤 4:根据提示,下一步,下一步 这个是比较直接的,如果需要

使用Visual Studio 2015开发Qt程序

0.开发环境及工具 操作系统:Windows 7 x64 编译器:Visual Studio 2015 社区版 Qt版本:5.6.0 编程助手:Visual Assist X 2074. 1.安装 需要依次安装以下工具:vs2015.Qt 5.6.0 for Windows 32-bit (VS 2015).Perl. Qt安装路径:D:\Qt\Qt5.6.0_x86.安装完毕后添加如下路径到系统环境中:D:\Qt\Qt5.6.0_x86\5.6\msvc2015\bin. Perl安装路径:C

Windows 7中,用Visual Studio开发WPF应用程序,实现从Windows Explorer中拖拽文件到应用程序,始终显示“无法拖放”符号问题解决方案

Are you running your application or Visual Studio that hosts the app under administrative privilege? If that's the case, the Windows prevents the drag drop operation from happening. In Windows 7 or Vista, an application with a lower security privileg