获取系统的所有串口

第一个思路应该是用建立串口的方式来取得串口名,若建立失败,则此串口不存在

None.gif void  GetComList() { 
None.gif  CString strCom;
None.gif  
int  nCom  =   0 ;
None.gif  
int  count  =   0 ;
None.gif  HANDLE hCom;
None.gif  
do  {
None.gif    nCom
++ ;
None.gif    strCom.Format(
" COM%d " , nCom);
None.gif    hCom 
=  CreateFile(strCom,  0 0 0 , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,  0 );
None.gif    
if  (INVALID_HANDLE_VALUE  ==  hCom)
None.gif      
break ;
None.gif    m_cbComList.AddString(strCom);
None.gif    CloseHandle(hCom);
None.gif  } 
while  ( 1 );
None.gif
None.gif
None.gif
// -------------------------------------------------------------- - 
None.gif

None.gif
//  串口信息都是保存在注册表的这个位置的 // HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM 
None.gif
HKEY hKey; 
None.gifLONG ret; 
None.gifOSVERSIONINFO osvi; 
None.gifBOOL bOsVersionInfoEx; 
None.gif
char  keyinfo[ 100 ], 
None.gif     comm_name[
40 ], 
None.gif     ValueName[
40 ];
None.gif
int  i; 
None.gifDWORD sType, 
None.gif      Reserved, 
None.gif      cbData, 
None.gif      cbValueName;
None.gifhIcon 
=  AfxGetApp()  -   >  LoadIcon(IDI_HARDWARE); 
None.gifSetIcon(hIcon, 
false ); 
None.gifZeroMemory( 
&  osvi, sizeof(OSVERSIONINFO)); 
None.gifosvi.dwOSVersionInfoSize 
=  sizeof(OSVERSIONINFO); 
None.gifmemset(keyinfo, 
0 100 ); 
None.gifstrcpy(keyinfo, 
" HARDWARE\DEVICEMAP\SERIALCOMM " ); 
None.gif
=   0
None.gifsType 
=  REG_SZ; 
None.gifReserved 
=   0
None.gifbOsVersionInfoEx 
=  GetVersionEx(  &  osvi); 
None.gifret 
=  RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyinfo,  0 , KEY_ALL_ACCESS,  &  hKey);
None.gif
if  (ret  ==  ERROR_SUCCESS) { 
None.gif  
if  (osvi.dwPlatformId  ==  VER_PLATFORM_WIN32_WINDOWS) {
None.gif    
for  (i  =   1 ; i  <=   128 ; i ++ ) {
None.gif      sprintf(comm_name, 
" COM%d " , i);
None.gif      
if  (CommPortIsUsed(comm_name)  ==   1
None.gif        m_comlist.AddString(comm_name);
None.gif    }
None.gif  } 
else   if  (osvi.dwPlatformId  ==  VER_PLATFORM_WIN32_NT) {
None.gif    
do  {
None.gif      cbData 
=   40 ;
None.gif      cbValueName 
=   40 ;
None.gif      memset(comm_name, 
0 40 );
None.gif      memset(ValueName, 
0 40 );
None.gif      ret 
=  RegEnumValue(hKey, i, ValueName,  &  cbValueName, NULL,  &  sType, (LPBYTE) comm_name,  &  cbData);
None.gif      
if  (ret  ==  ERROR_SUCCESS) {
None.gif        
if  (CommPortIsUsed(comm_name)  ==   1 ) m_comlist.AddString(comm_name);
None.gif        i
++ ;
None.gif      }
None.gif    } 
while  (ret  ==  ERROR_SUCCESS);
None.gif  }
None.gif}

 

转载于:https://www.cnblogs.com/liukun966123/archive/2004/08/30/37699.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值