博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
串口编程-枚举遍历串口、获取PC所有串口名称、遍历注册表项、RegEnumValue用法
阅读量:3974 次
发布时间:2019-05-24

本文共 1067 字,大约阅读时间需要 3 分钟。

在网上找了几个关于遍历串口的例子,要么代码不完整,要么就有Bug,如读不了串口号大于10以上的。 

经过本人的整理,现分享最终代码,vs2008下编译通过。 
//此方法同样适用于遍历windows开机启动项,只需稍加修改即可. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void
CEnumPortDlg::enumPort(
void
)
{
 
HKEY
hKey;
LPCTSTR
lpSubKey=
"HARDWARE\\DEVICEMAP\\SERIALCOMM\\"
;
 
if
(RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey)!= ERROR_SUCCESS)
{
  
return
;
}
#define NAME_LEN 100
 
char
szValueName[NAME_LEN];
BYTE
szPortName[NAME_LEN];
LONG
status;
DWORD
dwIndex = 0;
DWORD
dwSizeValueName=100;
DWORD
dwSizeofPortName=100;
DWORD
Type;
dwSizeValueName = NAME_LEN;
dwSizeofPortName = NAME_LEN;
do
{
  
status = RegEnumValue(hKey, dwIndex++, szValueName, &dwSizeValueName, NULL, &Type,
   
szPortName, &dwSizeofPortName);
  
if
((status == ERROR_SUCCESS))
  
{
   
m_lstPort.AddString((
char
*)szPortName);
    
  
}
  
//每读取一次dwSizeValueName和dwSizeofPortName都会被修改
  
//注意一定要重置,否则会出现很离奇的错误,本人就试过因没有重置,出现读不了COM大于10以上的串口
  
dwSizeValueName = NAME_LEN;
  
dwSizeofPortName = NAME_LEN;
}
while
((status!= ERROR_NO_MORE_ITEMS));
RegCloseKey(hKey);
 
}

  

转载地址:http://uahki.baihongyu.com/

你可能感兴趣的文章
游标(Cursor)
查看>>
复合语句(compound statement)
查看>>
DB2 物化查询表
查看>>
IF 语句
查看>>
循环语句
查看>>
DB2 临时表
查看>>
ITERATE、LEAVE、GOTO和RETURN
查看>>
异常处理
查看>>
存储过程
查看>>
动态SQL(Dynamic SQL)
查看>>
在存储过程之间传递数据
查看>>
迁移存储过程
查看>>
GET DIAGNOSTIC 语句
查看>>
Python 简介
查看>>
Python 注释
查看>>
Python 变量
查看>>
Python 数据类型 -- 数字
查看>>
Spring 管理对象
查看>>
Spring 自定义对象初始化及销毁
查看>>
Spring Batch 环境设置
查看>>