状况:
  有个发送短信的设备,通过usb转com口的线连到pc上(Windows2000或XP),我在程序中(C语言)要在打开串口之前判断出,该设备插在了哪个串口上,即是COM几。问题:
  请问有什么方法可以实现?我现在的思路是枚举所有串口,取得串口信息,因为该设备插到串口上时,名称跟别的串口不一样。
但是不知道如何枚举,还请知道的大侠帮忙回答下,谢谢了。

解决方案 »

  1.   

    获取串口void GetComList() { 
    CString strCom;
    int nCom = 0;
    int count = 0;
    HANDLE hCom;
    do {
    nCom++;
    strCom.Format("COM%d", nCom);
    hCom = CreateFile(strCom, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (INVALID_HANDLE_VALUE == hCom)
    break;
    m_cbComList.AddString(strCom);
    CloseHandle(hCom);
    } while (1);
    } //-------------------------------------------------------------- - // 串口信息都是保存在注册表的这个位置的 // HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM 
    HKEY hKey; 
    LONG ret; 
    OSVERSIONINFO osvi; 
    BOOL bOsVersionInfoEx; 
    char keyinfo[100], 
    comm_name[40], 
    ValueName[40];
    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) { 
    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 = 40;
    cbValueName = 40;
    memset(comm_name, 0, 40);
    memset(ValueName, 0, 40);
    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);
    }
    }
      

  2.   

    传送门
    http://blog.csdn.net/tongxuechen1982/archive/2008/05/22/2469261.aspx