本文主要总结一个串口(COM口)扫描函数,并将其封装成一个函数。当需要用MFC做一个计算机的串口扫描按钮时,可以直接调用下列函数,而不用再另费心思去写。全文主要分为三部分,第一部分是头文件源代码,第二部分是源文件源代码,第三部分是COM口函数调用示例。
一、头文件程序如下(可直接复制黏贴)CommScan.h
#pragma once
int CommScan(CComboBox* m_pComBox);
void closeHandle(HANDLE& handle);
二、源文件程序如下(可直接复制黏贴)CommScan.cpp
#include "stdafx.h"
#include "CommScan.h"
int CommScan(CComboBox* m_pComBox)
{
HANDLE hComm;
CString ComName;
m_pComBox->ResetContent(); //清空组合框内所有内容
for (int i = 1; i < 256; i++)
{
if (i<10) ComName.Format(_T("COM%d"), i);//注意:COM后面不能有分号,COM9以下。直接用"COM9" _T("COM8")
if (i >= 10) ComName.Format(_T("\\\\.\\COM%d"), i); //注意:COM10以上要用"\\\\.\\COM10"才行
hComm = (HANDLE)CreateFile(ComName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hComm != INVALID_HANDLE_VALUE)
{
CString string3;
string3.Format(_T("COM%d"), i);
m_pComBox->AddString(string3); //添加COM组合框内容
closeHandle(hComm); //关闭句柄
}
}
int ContentNo = m_pComBox->GetCount();//获得当前选中内容的数目
m_pComBox->SetCurSel(ContentNo - 1); //设置当前选中内容显示
return ContentNo;
}
void closeHandle(HANDLE& handle)
{
CloseHandle(handle);
handle = INVALID_HANDLE_VALUE;
}