本人不会c++,在网上搜了很多,都说用SetupDiGetDeviceInstanceId.可是并不知道怎么使用.
在csdn中看到一篇文章,贴到程序上之后返回的HID class,并不是想要的结果.而且那个博主已经年多没登陆过了.
所以在这求教各位高人了.
需要完整的代码.谢谢.

解决方案 »

  1.   

    http://blog.csdn.net/tongxuechen1982/archive/2008/05/26/2483123.aspx
    在这里看到了一些相关的,可是试了一下,没什么作用.有哪位高人指点一下啊.
      

  2.   

    我记得有一个API,可以得到设备范例ID,然后可以解析出PID和VID.
      

  3.   

    我知道那个api可是我不会用
    另外现在我通过wmi列举出来vid和pid但是又无法对应其端口了
    例如我有一个USB转串口设备是com7,其vid0403,pid6001现在就是想通过这个找到com7要如何去做呢?
      

  4.   

    我有段代码。
    通过它实现对usb设备的字节读写,我只用了读的部分(做usb skype phone),有兴趣可以一起讨论下
      

  5.   

    http://download.csdn.net/source/1640723你可以在我的资源下载代码了
    接分!
      

  6.   

    目前确实还是没有能和设备联系起来
    如果用SerialPort.GetPortName()
    只能得到可用的端口.
    然后用wmi中的查询只能列举出系统中所有的win32_usbhub
    其中包括vid,pid但是又没有端口号
    昨天想了一下,打算自己从注册表中去找
    可是发现c#只能访问到第四层节点,再往下就没权限了,如果哪位高人能指点一下c#的权限,不胜感激.
    (我已经试过在程序属性中,改安全级别为full trus可是仍然不起作用,然后又单独的把注册表节点一个一个添加到信任项中仍然不起作用.)
      

  7.   

    full trust没权限的话别的语言也没有权限的。要VID和PID来做什么?
    一些底层代码需要在ring 0才可以执行
      

  8.   

    通过vid,pid和对应的端口号来自动锁定端口啊.
    这样就不用手动来选了.
      

  9.   

    USB哪来的端口号……串口才有。
      

  10.   

    让用户自己选了,设备厂商不太可能写个虚拟设备还要照顾开发人员的需求再写个API让你从USB获得串口端口信息
      

  11.   

    我看了,和我想要的有些差距,另外其实我知道可以调系统的api去弄,可是一碰到托管的那些东西确实有点头大.这个问题先放下,因为还要照顾进度.还是谢谢.
      

  12.   

    libusbdotnethttp://sourceforge.net/projects/libusbdotnet/files/
      

  13.   

       從以上的這幾種方法來看,由於每個方法都是通過對於系統的設備進行掃描然後得出U盤盤符、PID/VID,序列號…等。而且由於這些信息是通過多種方法獲得的,儅計算機連接多個usb設備時,那麽以上的這些信息就無法正確的對應起來,尤其是U盤盤符與其唯一標識Serial Number無法對應,這樣很不利于我們正確的選擇目標usb設備。下面我們來看如何通過U盤盤符找到對應的設備序列號。   第一步,我們仍可以按照方法1种所提到的通過遍歷盤符屬性來找到所有連接到機器上的U盤盤符,然後CreateFile獲得設備句柄。   第二步,在應用DeviceIoControl函數的時候,我們需要引入一個新的查詢方式IOCTL_STORAGE_GET_DEVICE_NUMBER,如STORAGE_DEVICE_NUMBER sdn;DWORD dwBytesReturned = 0;// 用IOCTL_STORAGE_GET_DEVICE_NUMBER取设备號    bResult = ::DeviceIoControl(hDevice, // 设备句柄        IOCTL_STORAGE_GET_DEVICE_NUMBER,    // 取设备属性信息        NULL, 0,                          // 输入数据缓冲区        sdn, sdn ->Size,        // 输出数据缓冲区        & dwBytesReturned,                  // 输出数据地址        (LPOVERLAPPED)NULL);             // 用同步I/O    DeviceNumber = pDevDesc.DeviceNumber;   這樣我們可以獲得該盤符對應的設備號,同樣我們可以通過QueryDosDevice來找到該盤符對應的dos設備名:QueryDosDevice(szDevicePath,         //設備路徑,如:“F:”szDosDeviceName,     //查詢返回的dos設備名MAX_PATH);           到現在爲止,我們通過盤符獲得了兩個信息:DeviceNumber,szDosDeviceName。第三步用下面這樣一個函數來找到相應的設備序列號:DEVINST GetDrivesDevInstByDiskNumber (long DiskNumber, char *szDosDeviceName){…//函數的前半部分與方法2种提到的方法相同目的是爲了獲得一個DivicePath;…//注意這裡用到的GUID應該是DiskClassGuid;      HANDLE hDrive = CreateFile(pspdidd->DevicePath,                                   0,                                   FILE_SHARE_READ | FILE_SHARE_WRITE,                                   NULL, OPEN_EXISTING, NULL, NULL);   if ( hDrive != INVALID_HANDLE_VALUE )   {       STORAGE_DEVICE_NUMBER sdn;       DWORD dwBytesReturned = 0;       //通過這樣一個句柄,用同樣的方法也可以得到一個設備號。       res = DeviceIoControl(hDrive, 
                         IOCTL_STORAGE_GET_DEVICE_NUMBER,                    NULL, 
                        0
                        &sdn, 
             sizeof(sdn),                                                                                                         &dwBytesReturned, NULL); if ( res ){ //這句是關鍵,通過這兩种方法獲得的.DeviceNumber,進行比較,以DeviceNumber
           //作爲橋梁,找到了對應的設備         if ( DiskNumber == (long)sdn.DeviceNumber )            {              CloseHandle(hDrive);              SetupDiDestroyDeviceInfoList(hDevInfo);              return spdd.DevInst;           //這裡是來返回一個DeviceInstance。                 }      }      CloseHandle(hDrive);    …   }   Return 0;}            調用以上這個函數,我們獲得了一個DEVINST,這樣我們就可以通過DDK中CM_Get_Device_ID來獲得設備ID:char Buf[MAX_PATH];CM_Get_Device_ID(DevInst,Buf,MAX_PATH,0);其中的Buf中返回的就是DeviceInstanceID,這是一個形如“USBSTOR\DISK&VEN________&PROD_FREEDIK-LWFORMAT&REV_2.23\2004063008241001”的字符串,我們可以看到字符串的最後一串數字就是我們想要得到的SerialNumber。
      

  14.   

    有没有好心人,提供一下啊,偶也在求U盘的VID,PID,序列号等信息。这方面应该有专家的哈。
      

  15.   

    一样的纠结啊!试了很多次,在lab/cvi下面就是不行啊!
      

  16.   

    想问一下,新连入一个设备怎么查看这个设备的Pid和Vid啊?