获取系统的串口个数

第一个思路应该是用建立串口的方式来取得串口名,若建立失败,则此串口不存在
void  GetComList() { 
  CString strCom;
  
int  nCom  =   0 ;
  
int  count  =   0 ;
  HANDLE hCom;
  
do  {
    nCom
++ ;
    strCom.Format(
" COM%d " , nCom);
    hCom 
=  CreateFile(strCom,  0 0 0 , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  0 );
    
if  (INVALID_HANDLE_VALUE  ==  hCom)
      
break ;
    m_cbComList.AddString(strCom);
    CloseHandle(hCom);
  } 
while  ( 1 );


// -------------------------------------------------------------- -

第二个思路是获取注册表中记录的信息

//  串口信息都是保存在注册表的这个位置的 // HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM 
HKEY hKey; 
LONG ret; 
OSVERSIONINFO osvi; 
BOOL bOsVersionInfoEx; 
char  keyinfo[ 100 ], 
     comm_name[
40 ], 
     ValueName[
40 ];
int  i; 
DWORD sType, 
      Reserved, 
      cbData, 
      cbValueName;
hIcon 
=  AfxGetApp()  -   >  LoadIcon(IDI_HARDWARE); 
SetIcon(hIcon, 
false ); 
ZeroMemory( 
&  osvi, sizeof(OSVERSIONINFO)); 
osvi.dwOSVersionInfoSize 
=  sizeof(OSVERSIONINFO); 
memset(keyinfo, 
0 100 ); 
strcpy(keyinfo, 
" HARDWARE/DEVICEMAP/SERIALCOMM " ); 
=   0
sType 
=  REG_SZ; 
Reserved 
=   0
bOsVersionInfoEx 
=  GetVersionEx(  &  osvi); 
ret 
=  RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyinfo,  0 , KEY_ALL_ACCESS,  &  hKey);
if  (ret  ==  ERROR_SUCCESS) { 
  
if  (osvi.dwPlatformId  ==  VER_PLATFORM_WIN32_WINDOWS) {
    
for  (i  =   1 ; i  <=   128 ; i ++ ) {
      sprintf(comm_name, 
" COM%d " , i);
      
if  (CommPortIsUsed(comm_name)  ==   1
        m_comlist.AddString(comm_name);
    }
  } 
else   if  (osvi.dwPlatformId  ==  VER_PLATFORM_WIN32_NT) {
    
do  {
      cbData 
=   40 ;
      cbValueName 
=   40 ;
      memset(comm_name, 
0 40 );
      memset(ValueName, 
0 40 );
      ret 
=  RegEnumValue(hKey, i, ValueName,  &  cbValueName, NULL,  &  sType, (LPBYTE) comm_name,  &  cbData);
      
if  (ret  ==  ERROR_SUCCESS) {
        
if  (CommPortIsUsed(comm_name)  ==   1 ) m_comlist.AddString(comm_name);
        i
++ ;
      }
    } 
while  (ret  ==  ERROR_SUCCESS);
  }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值