#include <stdio.h>
#include <string>
#include <vector>
#include <algorithm>
#include <Windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;
void GetComList_Reg(std::vector<string>& comList)
{
HKEY hkey;
int result;
int i = 0;
result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("Hardware\\DeviceMap\\SerialComm"),
NULL,
KEY_READ,
&hkey);
if (ERROR_SUCCESS == result) // 打开串口注册表
{
TCHAR portName[0x100], commName[0x100];
DWORD dwLong, dwSize;
do
{
dwSize = sizeof(portName) / sizeof(TCHAR);
dwLong = dwSize;
result = RegEnumValue(hkey, i, portName, &dwLong, NULL, NULL, (LPBYTE)commName, &dwSize);
if (ERROR_NO_MORE_ITEMS == result)
{
// 枚举串口
break; // commName就是串口名字"COM4"
}
string m_str = "";
for (int j = 0; commName[j] != '\0'; j++)
{
m_str.push_back((char)commName[j]);
}
comList.push_back(m_str);
i++;
} while (1);
RegCloseKey(hkey);
}
}
//一下代码打开串口
vector<string> comList;
CString strComOpen;
int sum = 0;
int comNum;
CString m_cstr;
GetComList_Reg(comList);
comNum = (int)comList.size();
if (comNum > 0)
{
for (int i = 0; i < comNum; i++)
{
m_cstr = comList[i].c_str();
strComOpen = TEXT("\\\\.\\") + m_cstr; //需要打开的串口
AfxMessageBox(strComOpen);
hCom = CreateFile(strComOpen, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);//如果返回不为空则此串口可用
if (INVALID_HANDLE_VALUE != hCom)
{
m_cstr.Append(_T(" is opened!"));
AfxMessageBox(m_cstr);
sum++;
// CloseHandle(hCom);
// hCom = INVALID_HANDLE_VALUE;
}
else DWORD error = ::GetLastError();//取得错误信息
}
}
else
{
AfxMessageBox(_T("No COM Available!"));
}
//