获取系统的所有串口

博客提出一种思路,即通过建立串口的方式来获取串口名,若建立失败,则表明该串口不存在。

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

None.gifvoid 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, 000, 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, 
0100); 
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, 
040);
None.gif      memset(ValueName, 
040);
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、付费专栏及课程。

余额充值