最近写了个winform程序
是手持机与数据库交互导数据
厂家提供了通讯历程,可以检查到手持机连接的USB口所映射的端口号C#怎样实现呢?

解决方案 »

  1.   

    看看 
    SerialPort m_Port= new SerialPort();        /// <summary>
            /// 打开串口
            /// </summary>
            public void OpenDevice(string Com,int bote)
            {
                try
                {
                    //m_Port.Close();
                    m_Port.PortName = Com;//串口号
                    m_Port.BaudRate = bote;//波特率
                   // m_Port.Handshake = Handshake.RequestToSendXOnXOff;
                    m_Port.RtsEnable = true; //关键 U口转串口设备
                    m_Port.DtrEnable = true;
                    m_Port.ReceivedBytesThreshold = 100;
                    m_Port.ReadBufferSize = 90000;
                    m_Port.Open();
                    m_Port.DataReceived += new SerialDataReceivedEventHandler(m_Port_DataReceived);
                    //Thread readThread = new Thread(Read);
                    //readThread.Start(); 
                }
                catch (Exception ex)
                {
                    MessageBox.Show("串口打开失败,系统不能运行,系统提示:" + ex.Message + "!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     
                }
            }
      

  2.   

    查询注册表。这个你自己有设备才能找到。
    受人渔:
    远程连接,查看设备上的注册表,你首先知道连接的com口,尝试在注册表中搜索:com2(假设是com2)。找到后。尝试在其他的设备上依然找这个注册表。就可以得到一个通用的寻找usb对应端口的方法。
      

  3.   

    HKEY   hKey; 
    LONG   ret; 
    OSVERSIONINFO     osvi; 
    BOOL   bOsVersionInfoEx; 
    char   keyinfo[100],comm_name[200],ValueName[200]; 
    int   i; 
    DWORD   sType,Reserved,cbData,cbValueName; hIcon=AfxGetApp()-> LoadIcon(IDI_HARDWARE); 
    SetIcon(hIcon,false); 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){ 
    //   10-25 
          if   (osvi.dwPlatformId   ==   VER_PLATFORM_WIN32_WINDOWS)   
          { 
          for(i=1;i <=128;i++) 
          {         
                sprintf(comm_name, "COM%d ",i); 
        if   (CommPortIsUsed(comm_name)==1)   m_comlist.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   (ret==ERROR_SUCCESS) 

                                  if   (CommPortIsUsed(comm_name)==1)   m_comlist.AddString(comm_name); 
          i++; 

        }while   (ret==ERROR_SUCCESS); 
          } 
    } RegCloseKey(hKey); 
      

  4.   

    以上为转发的某检测 COM 端口的程序。