如何用VC把计算机中一共有几个串口检测出来?

解决方案 »

  1.   

    http://www.codeguru.com/Cpp/W-P/system/hardwareinformation/article.php/c5721
      

  2.   

    HKEY hKey;
    LONG ret;
    OSVERSIONINFO  osvi;
    BOOL bOsVersionInfoEx;
    char keyinfo[100],comm_name[200],ValueName[200], Uart[16];
    int i;
    DWORD sType,Reserved,cbData,cbValueName; ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

    memset(keyinfo,0,100);
    strcpy(keyinfo,"HARDWARE\\DEVICEMAP\\SERIALCOMM");
        i=0; sType=REG_SZ;Reserved=0;
    bOsVersionInfoEx =GetVersionEx(&osvi);
        ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,keyinfo,0,KEY_ALL_ACCESS,&hKey);
    if (ret==ERROR_SUCCESS){
       if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) 
       {
       for(i=1;i<=128;i++)
       {    
          sprintf(comm_name,"COM%d",i);
      m_Uart.AddString(comm_name);
       }
       }
           else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
       {
        do 
      {
        cbData=200;cbValueName=200;
        memset(comm_name,0,200); 
        memset(ValueName,0,200);
        ret=RegEnumValue(hKey,i,ValueName,&cbValueName,NULL,&sType,(LPBYTE)comm_name,&cbData);
    if (strlen(comm_name) > 0)
    {
    // 检测出来的串口
    }
        i++;
      }while (ret==ERROR_SUCCESS);
       }
    }

    RegCloseKey(hKey);
      

  3.   

    从com1一直到Comn一个一个的打开,我以前好像这么干过,呵呵