如何使用window的api获取串口名称和串口数量

这篇文章讲解一下如何使用window的api获取串口名称和串口数量

#include <Windows.h>
#include <iostream>
#include <vector>

// 获取串口名称的函数
std::vector<std::wstring> GetSerialPorts() {
    std::vector<std::wstring> portNames;

    // 定义注册表路径
    wchar_t keyName[] = L"HARDWARE\\DEVICEMAP\\SERIALCOMM";

    // 打开注册表项
    HKEY hKey;
    LONG result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, keyName, 0, KEY_READ, &hKey);

    // 检查是否成功打开注册表项
    if (result == ERROR_SUCCESS) {
        // 定义变量用于遍历注册表值
        DWORD index = 0;
        WCHAR valueName[256];
        DWORD valueNameSize = sizeof(valueName) / sizeof(valueName[0]);
        BYTE valueData[256];
        DWORD valueDataSize = sizeof(valueData);

        // 遍历注册表项的值
        while (RegEnumValueW(hKey, index++, valueName, &valueNameSize, nullptr, nullptr, valueData, &valueDataSize) == ERROR_SUCCESS) {
            // 将注册表值转换为串口名称
            std::wstring portName(reinterpret_cast<WCHAR*>(valueData));
            portNames.push_back(portName);

            // 重置变量以便下一次迭代
            valueNameSize = sizeof(valueName) / sizeof(valueName[0]);
            valueDataSize = sizeof(valueData);
        }

        // 关闭注册表项
        RegCloseKey(hKey);
    } else {
        // 打开注册表项失败,输出错误信息
        std::cout << "Error opening registry key." << std::endl;
    }

    // 返回获取到的串口名称列表
    return portNames;
}

int main() {
    // 调用获取串口信息的函数
    std::vector<std::wstring> serialPorts = GetSerialPorts();

    // 输出获取到的串口信息
    if (!serialPorts.empty()) {
        std::cout << L"Serial Ports:" << std::endl;
        for (const auto& port : serialPorts) {
            std::cout << port << std::endl;
        }
    } else {
        std::cout << L"No serial ports found." << std::endl;
    }

    return 0;
}

这段代码使用 Windows API 中的 RegOpenKeyExWRegEnumValueW 函数来打开和遍历注册表项,具体来说是 HARDWARE\\DEVICEMAP\\SERIALCOMM。在遍历过程中,获取了每个注册表值(即串口名称)并存储在 std::vector<std::wstring> 中。最后,输出获取到的串口信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公孙无语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值