c#串口操作中怎么实时检测到我计算机连接上了串口还是拔掉了串口,还要能检测到是COM口几??望高手指导!

解决方案 »

  1.   


    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);
    通过检测注册表实现,你自己把代码写成C#的吧
      

  2.   

    楼上的可能会错楼主的意思了,楼主的意思是想动态实时的监测计算机的串口有无设备的插拔。
    这种方法只能用类似PING的方式实现:
    程序打开计算机上所有的串口,不停的向串口发送ping命令(此命令类似于网络通信中的心跳包),下位机在收到返回后,按照协议规定的格式响应数据包,程序收到下位机的回复后就可以判断出是否监测出设备,是哪个串口插入了设备了。
      

  3.   

    2个方法
    1.通讯协议里定义心跳包,定时检测。
    2.直接看连续时间是否有串口数据,比如定一个定时器,到时间就提示连接断开,每次进入到DataReceived中断事件的时候重置一次定时器,当连续一个周期没重置,定时器触发,提示断线。
      

  4.   

    串口并非即插即用设备.
    串口在释放前只能被绑定一次.心跳线程会占用端口影响通讯,最好还是利用中断等手段来监控串口缓存中的数据流.类似的软件 COMGrasp
    http://download.csdn.net/source/1982031
      

  5.   


    动态实时的监测计算机的串口有无设备的插拔。如果设备有变动,windows 会发送消息 WM_DEVICECHANGE。