2012年11月20日星期二

如何检测电脑中串口是否可用



在MFC程序初始化的时候,自动检测系统的串口是否存在或者被占用,可以使用如下的方法:
在基于对话框的设计中,我们常采用MSComm控件作为串口接口使用,但该控件没有提供检测所使用串口是否可用的函数(例如,我们的笔记本中经常缺少COM1),从而使程序出现异常,造成系统初始化不正常,为了解决这个问题,同时使我们的程序有更好的交互性,我们可以采用如下的方法来实现这个判断。
并列举出我们电脑中到底有几个可用的串口,代码一般放在OnInitDialog()中:

HANDLE  hCom;         //定义一个句柄,用来接受CreateFile()的返回值
CString str;               //存储设备名字的临时变量
int j=0;                   //记录已有的设备数
for(int i=1;i<20 i="i" nbsp="nbsp" span="span" style="color: lime;">//
假设计算机上有20个串口设备,一个一个的试
{
       str.Format(_T("COM%d"),i);
hCom=CreateFile(str,GENERIC_READGENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
              if(hCom != INVALID_HANDLE_VALUE)    //如果设备纯在
              {
                     m_cbPort.InsertString(j,str);           //将设备的名字放到ComboBox中
                     j++;
              }
              CloseHandle(hCom);
}
if(j == 0)                                          //如果没有一个设备,则显示无设备
{
       m_cbPort.InsertString(j,_T("无设备"));
}

这里的CreateFile函数起了很大的作用,可以用来创建系统设备文件,如果该设备不存在或者被占用,则会返回一个错误,即下面的INVALID_HANDLE_VALUE,据此可以判断可使用性。详细参见MSDN中的介绍。

没有评论: