本文主要总结一个串口(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;

}