自动识别当前插入电脑的设备的串口号
需要的头文件#include<Dbt.h>
1.添加消息映射:
ON_WM_DEVICECHANGE()
2.创建消息映射函数
afx_ mg BOOL OnDeviceChange(UINT nEventType ,DWORD_PTR dwData);
3.响应函数实现
OnDeviceChange(UINT nEventType ,DWORD_PTR dwData)
{
if(nEventType == DBT_DEVNODES_CHANGED)
FindPort();
}
4.声明 void FindPort();
5. 定义:
void CWaterStepDlg::FindComPort()
{
HKEY hKey;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Hardware\\DeviceMap\\SerialComm"),NULL,
KEY_READ,&hKey) == ERROR_SUCCESS)
{
TCHAR szPortName[256], szComName[256]; //设备名,串口名
DWORD dwLong, dwSize;
int nCount = 0;
CString str;
while(TRUE)
{
dwLong = dwSize = 256;
if(RegEnumValue(hKey,nCount,szPortName,&dwLong,NULL,NULL,(PUCHAR)szComName,&dwSize) == ERROR_NO_MORE_ITEMS)
break;
nCount++;
str.Format(_T("%s"),szComName);
int len = str.GetLength();
str = str.Right(len-3);
ComX.push_back(atoi(str));
}
RegCloseKey(hKey);
}
else
{
AfxMessageBox(_T("注册表错误:无法打开有关的hKEY!"));
return;
}
}