请问怎么检测串口是否存在?
一般计算机提供的串口有可能被占用了,怎么知道呢?
用以太网虚拟的串口又怎么检测呢?
谢谢

解决方案 »

  1.   

    用OpenFile来检查,如果被占用,返回FALSE。
      

  2.   

    //从注册表读取存在的串口。
    HKEY hKEY;
    long hResult=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM",0,KEY_READ,&hKEY);
    if(hResult!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行
    {
    ShowMessage("错误:无法打开有关注册表项");
    return FALSE;
    }
    char owner_Get[20],str[30];
    DWORD type_1=REG_SZ;
    DWORD cbData_1=20;
    DWORD aa=30,num=0,a1,a2,a3,a4,a5,a6,a7;
    hResult=::RegQueryInfoKey(hKEY,str,&a7,NULL,&a3,&a1,&a2,&num,&a4,&a5,&a6,NULL);
    if(hResult!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行
    {
    ShowMessage("错误:无法打开有关注册表项");
    return FALSE;
    }
    // hResult=RegQueryValueEx(hKEY,"\\Device\\Serial0",NULL,&type_1,(BYTE*)str,&aa);
    for(DWORD i=0;i<num;i++)
    {
    aa=30;cbData_1=20;
    hResult=::RegEnumValue(hKEY,i,str,&aa,NULL,&type_1,(BYTE*)owner_Get,&cbData_1);
    if(hResult==ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行
    {
    m_com.AddString(owner_Get);
    }
    }
    RegCloseKey(hKEY); 然后对找到的每个串口OpenFile来检查,如果被占用,返回FALSE。