IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 实时检测串口连接状态 -> 正文阅读

[C++知识库]实时检测串口连接状态

废话不多说,在此记录一个实时检测串口链接状态的操作。


struct SerialPortInfo
{
	std::string portName;
	std::string description;
};

std::string wstringToString(const std::wstring& wstr)
{

	if (wstr.empty())
	{
		return std::string();
	}

	int size = WideCharToMultiByte(CP_ACP, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL);
	std::string ret = std::string(size, 0);
	WideCharToMultiByte(CP_ACP, 0, &wstr[0], (int)wstr.size(), &ret[0], size, NULL, NULL); // CP_UTF8

	return ret;
}

bool enumDetailsSerialPorts(vector<SerialPortInfo>& portInfoList)
{
	bool bRet = false;
	std::string strPortName;
	HANDLE m_handle;
	TCHAR portName[2048] = { 0 };
	SerialPortInfo m_serialPortInfo;

	for (int i = 1; i <= 255; i++)
	{
		bRet = false;

		_sntprintf(portName, sizeof(portName), _T("COM%d"), i);

		m_handle = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

		if (m_handle == INVALID_HANDLE_VALUE)
		{
			if (ERROR_ACCESS_DENIED == GetLastError())
			{
				bRet = true;
			}
		}
		else
		{
			bRet = true;
		}

		if (bRet)
		{
#ifdef UNICODE
			strPortName = wstringToString(portName);
#else
			strPortName = std::string(portName);
#endif
			m_serialPortInfo.portName = strPortName;
			portInfoList.push_back(m_serialPortInfo);
		}

		CloseHandle(m_handle);
	}

	return bRet;
}


int main() {	
	vector<SerialPortInfo> spInfo;
	enumDetailsSerialPorts(spInfo);
	for (int i = 0; i < spInfo.size(); i++)
	{
		std::cout << i << " - " << spInfo[i].portName << " " << spInfo[i].description << std::endl;
	}
	return 0;
	
}

上面是核心函数,剩下的仅需要写一个线程去实时调用该函数即可,或者在qt中设置一个定时器,做一个实时扫描工作。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:10:02  更:2022-03-08 22:13:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:05:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码