使用MScomm控件时,无法得到串口数量。由于注册表记录了机器软硬件环境的各种信息,可以通过访问注册表得到串口的数量。在注册表的“HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/SERIALCOMM”键下面记录了串口的所有信息。VC中对注册表的操作函数很多,为了读取串口数量只需要下面的代码段。
CRegKey setreg;
LPCTSTR ps = _T("HARDWARE//DEVICEMAP//SERIALCOMM");
LONG lResult = setreg.Open(HKEY_LOCAL_MACHINE, ps, KEY_READ);
if (ERROR_SUCCESS != lResult)
{
AfxMessageBox(_T("注册表打开失败!"));
}
TCHAR pszName[80] , pvalue[80];
LPBYTE data = new BYTE [80];
DWORD pnNameLength = 80;
DWORD lpcvaluename =80;
DWORD size =80;
DWORD type = REG_SZ;
CStringArray CSAcomport;
CString name;
int index = 0;
lResult = RegEnumValue(setreg.m_hKey, index, pszName, &lpcvaluename, NULL, &type, data, &size );
while (lResult != ERROR_NO_MORE_ITEMS && lResult == ERROR_SUCCESS)
{
name.Format("%s", data);
CSAcomport.Add(name);
index ++;
lpcvaluename = 80;
size = 80;
lResult = RegEnumValue(setreg.m_hKey, index, pszName, &lpcvaluename, NULL, &type, data, &size );
}
执行完这段代码后,在字符串数组CSAcomport中就存储了所有的串口名称,如“COM1,COM2...”。