获取系统串口号

原来C++Builder6在XP下获取串口的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void  TTools::GetSystemPortList(TStringList * pList)
{
         TRegistry *regkey= new  TRegistry();
         pList->Clear();
         regkey->RootKey=HKEY_LOCAL_MACHINE;
         TStringList *KeyNames;
         KeyNames= new  TStringList();
         regkey->OpenKey( "HARDWARE\\DEVICEMAP\\SERIALCOMM" , false );
         regkey->GetValueNames(KeyNames);
         for ( int  i=0;i<=(KeyNames->Count-1);i++)
         {
            AnsiString a = regkey->ReadString(KeyNames->Strings[i]);
            pList->Add(a);
         }
        
         regkey->CloseKey();
         delete  KeyNames;
         delete  regkey;
}

这种方法,编译好的程序,在Win10下无效,需要管理员权限执行才行.
在Win10直接用API读注册表获取,代码如下:

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
void  TTools::GetSystemAllPort(TStringList * pList)
{
     HKEY  hKey;
     DWORD  result;
     TCHAR  valueName[255];
     TCHAR  data[255];
     DWORD  valueNameSize,dataSize;
     DWORD  i;
     result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  "Hardware\\DeviceMap\\SerialComm"
              NULL, KEY_READ, &hKey); //读取注册表串口信息
     if (ERROR_SUCCESS == result)
     {
         for (i=0;i<256 ;i++)
         {
             valueNameSize = dataSize =  sizeof (valueName) /  sizeof ( TCHAR );
             result = RegEnumValue(hKey, i, valueName, &valueNameSize, NULL, NULL, 
                      ( LPBYTE )data, &dataSize);
             if (ERROR_NO_MORE_ITEMS == result )
             {
                 break ;
             }
             else
             {
                pList->Add(( char *)data);
             }
         }
     }
     else
     {
         ::MessageBox(0, "PORT ERROR!" , "Error" ,0);
     }
     RegCloseKey(hKey);
}















本文转自Chinayu201451CTO博客,原文链接: http://blog.51cto.com/9233403/2067175 ,如需转载请自行联系原作者


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值