CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

如何检测那几个串口可用?

楼主flyjalor(飞帆)2004-11-03 19:31:32 在 VC/MFC / 网络编程 提问

在vc中如何检测那几个串口可用? 问题点数:40、回复次数:7Top

1 楼kingzai(stevenzhu)回复于 2004-11-03 19:43:52 得分 5

http://search.csdn.net/Expert/topic/773/773547.xml?temp=.9784967  
  里面有段可用的代码,是VB的,翻译成VC即可Top

2 楼alon21(Alon.飘一族)回复于 2004-11-03 20:17:34 得分 30

转贴一篇,希望对你有用  
   
  //检测本机的Com口的个数  
  主                 题:     如何检测本机的Com口的个数?我的情况比较特殊。    
  作                 者:     sks   (可子)    
  描述:  
  手机,用usb连电脑,没连的时候,电脑只有两个com口,连了手机后,有4个。拔下来,又剩两个。我需要访问com3控制手机,如果我把手机插上,再连,没问题。  
  如果我不插手机,用程序连接com3,会报告连接失败,如果这时候把手机连接到电脑上,再试图连接com3,无论如何也不能成功的创建连接。必须重新启动计算机。  
  我想,有两个方法能解决  
  1,有什么方法能把连接失败的后果清掉。  
  2,在连接之前判断一下有哪些com口,这个过程绝对不能用尝试连接的方法来确定。应该有专门的函数吧。  
  请高人指点。  
  谢谢。  
  回复人:   cqiu2000(算死草)  
  ClearCommError  
  回复人:   zhangnanonnet(pizizhang)  
  检查注册表这个位置就行了  
  HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM  
  所有的串口注册信息都在这  
  回复人:   masterz()  
  #include   "stdafx.h"  
  #include   <stdio.h>  
  #include   <windows.h>  
  #include   <setupapi.h>  
  #include   <devguid.h>  
  #include   <regstr.h>  
  #pragma   comment(lib,"Setupapi.lib")  
  void   printdata(LPVOID   pdata,DWORD   datalen,DWORD   type);  
  int   main(   int   argc,   char   *argv[   ],   char   *envp[   ]   )  
  {  
  HDEVINFO   hDevInfo;  
  SP_DEVINFO_DATA   DeviceInfoData;  
  DWORD   i;  
  //   Create   a   HDEVINFO   with   all   present   devices.  
  hDevInfo   =   SetupDiGetClassDevs(NULL,   0,   0,   DIGCF_PRESENT   |   DIGCF_ALLCLASSES   );  
  if   (hDevInfo   ==   INVALID_HANDLE_VALUE)  
  {  
  return   1;  
  }  
  //   Enumerate   through   all   devices   in   Set.  
  int   nComCount   =   0;  
  DeviceInfoData.cbSize   =   sizeof(SP_DEVINFO_DATA);  
  for   (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,  
  &DeviceInfoData);i++)  
  {  
  DWORD   DataT;  
  LPTSTR   buffer   =   NULL;  
  DWORD   buffersize   =   0;  
  //  
  //   Call   function   with   null   to   begin   with,    
  //   then   use   the   returned   buffer   size    
  //   to   Alloc   the   buffer.   Keep   calling   until  
  //   success   or   an   unknown   failure.  
  //    
  while   (!SetupDiGetDeviceRegistryProperty(  
  hDevInfo,   &DeviceInfoData,   SPDRP_DEVICEDESC,   &DataT,   (PBYTE)buffer,   buffersize,   &buffersize))  
  {  
  if   (GetLastError()   ==   ERROR_INSUFFICIENT_BUFFER)  
  {  
  //   Change   the   buffer   size.  
  if   (buffer)   LocalFree(buffer);  
  buffer   =   (char*)LocalAlloc(LPTR,buffersize);  
  }  
  else  
  {  
  //   Insert   error   handling   here.  
  break;  
  }  
  }                  
  if(strcmp(buffer,"Communications   Port")==0)  
  nComCount++;  
   
  //printf("SPDRP_DEVICEDESC:[%s]\n",buffer);  
  if   (buffer)   LocalFree(buffer);  
  continue;  
  }  
  if   (   GetLastError()!=NO_ERROR   &&GetLastError()!=ERROR_NO_MORE_ITEMS   )  
  {  
  //   Insert   error   handling   here.  
  return   1;  
  }  
  printf("Communications   Port   count:%d   by   masterz\n",nComCount   );  
  //     Cleanup  
  SetupDiDestroyDeviceInfoList(hDevInfo);  
  return   0;  
  }    
  //HOWTO:   Force   Reenumeration   of   a   Device   Tree   From   an   Application   Q259697  
  版主点评:  
  Wonderful,   这个API   真的没听过,更别说用过了,相关API   已经记录在案,呵呵,佩服一下!  
   
  Top

3 楼iicup(双杯献酒)回复于 2004-11-03 20:27:31 得分 0

markTop

4 楼flyjalor(飞帆)回复于 2004-11-04 15:45:37 得分 0

首先感谢   alon21(飘一族.Alon)  
  但是你给那段程序不行啊,怎么死循环?  
  检测注册表我想过,但是我想动态的得到,建立了检测线程,问题是程序不行。  
  呵呵,麻烦你了!Top

5 楼gdy119(夜风微凉)回复于 2004-11-04 19:14:54 得分 0

MARK!Top

6 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-11-04 20:24:55 得分 5

开线程监测串口Top

7 楼flyjalor(飞帆)回复于 2004-11-05 11:01:21 得分 0

oyljerry,谢谢,线程可以,但是检测的方法?Top

相关问题

  • 如何在程序中检测到哪些串口是可用的,如COM1,COM2等
  • 如何检测串口数目
  • 有一个条码设备接在串口,如何检测串口有动作?
  • 如何检测计算机有多少个串口?
  • 如何检测串口设备已连接?
  • ★★★★★请问如何检测串口是否连有设备,该设备可以是任何串口设备。
  • 如何检测串口和并口上是否有设备存在???
  • 如何检测到串口的某个针脚的电平改变? 谢谢
  • 可用空闲串口?
  • 如何用VB得到计算机的可用的串口数目?

关键词

  • 检测
  • 连接
  • 手机
  • 电脑
  • null
  • 串口
  • hdevinfo
  • deviceinfodata
  • 可用
  • buffersize

得分解答快速导航

  • 帖主:flyjalor
  • kingzai
  • alon21
  • oyljerry

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo