串口编程-枚举遍历串口、获取PC所有串口名称、遍历注册表项、RegEnumValue用法

120 篇文章 6 订阅
21 篇文章 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);
 
}

  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值