97、windows检查串口端口号是否存在

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "stdbool.h"

/****************************************
@function:windows端口检查是否存在
@param:port--端口号
@return:
@note:此函数不分辨串口是否已被打开使用
****************************************/
bool Windows_UART_PortCheck_driver(int port)
{
    HKEY hKey;//返回注册表项的句柄
    char Name[25] = {0};
	DWORD dwName = 0,dwSizeofPortName = 0,dwIndex = 0,Type = 0;
	unsigned char szPortName[25];
	long Status = ERROR_SUCCESS;
    int num = 0;
    bool flag = false;

    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM\\", 0, KEY_READ, &hKey) != ERROR_SUCCESS)return false;//打开注册表
    dwName = sizeof(Name);
    dwSizeofPortName = sizeof(szPortName);
	while((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA))
	{
		Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type, szPortName, &dwSizeofPortName); //列举注册表的值
		if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA))
		{
            sscanf((const char*)szPortName,"COM%d",&num);
            if(num == port){flag = true;break;}
		}
		dwName = sizeof(Name); 
		dwSizeofPortName = sizeof(szPortName); 
	}
	RegCloseKey(hKey);//关闭注册表
    return flag;
}

 
int main() {
    if(Windows_UART_PortCheck_driver(34)){printf("存在");}
    else printf("不存在");
 
    return 0;
}

在这里插入图片描述

在这里插入图片描述
如果没有tchar.h文件也可以删除此头文件,然后将DWORD 改为int

	int dwName = 0,dwSizeofPortName = 0,dwIndex = 0,Type = 0;

然后就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值