本文主要總結一個串口(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;
}