64,637
社区成员
发帖
与我相关
我的任务
分享
//以下为枚举串口的代码
HKEY hKey;
LPCTSTR lpSubKey = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM\\");
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
return FALSE;
}
#define NAME_LEN 100
WCHAR szValueName[NAME_LEN];
BYTE szPortName[NAME_LEN];
LONG status;
DWORD dwIndex = 0, i = 0;
DWORD dwSizeValueName = 100;
DWORD dwSizeofPortName = 100;
DWORD Type;
CString str;
dwSizeValueName = NAME_LEN;
dwSizeofPortName = NAME_LEN;
do
{
status = RegEnumValue(hKey, dwIndex++, szValueName, &dwSizeValueName, NULL, &Type,
szPortName, &dwSizeofPortName);
if ((status == ERROR_SUCCESS))
{
m_comb1.InsertString(i,(LPCTSTR)szPortName);
}
i++;
//每读取一次dwSizeValueName和dwSizeofPortName都会被修改
//注意一定要重置,否则会出现很离奇的错误,本人就试过因没有重置,出现读不了COM大于10以上的串口
dwSizeValueName = NAME_LEN;
dwSizeofPortName = NAME_LEN;
} while ((status != ERROR_NO_MORE_ITEMS));
RegCloseKey(hKey);
//CString str;
//int t;
//for (t = 0; t<9; t++) //添加1到9号串口
//{
// str.Format(_T("COM %d"), t + 1);
// m_comb1.InsertString(t, str);
//}
m_comb1.SetCurSel(1);//预置COM口