如题,不想使用类似于for(int i=0;i<n;i++)Open Comi这样的轮循的方法,有没有什么API或者有什么注册表的键值记录了可用串口信息,各位大虾帮帮忙...

解决方案 »

  1.   

    在注册表的“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 );}
      

  2.   

    显示注册表打开错误。。lResult=2