#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;
然后就可以了