我需要获取视频卡适配器的唯一ID。在使用Windows的设备管理器搜索设备的属性时,我注意到有一个名为Hardware Ids
的属性,如下图所示。
我试图在我的winform应用程序中获取这些ID。我找到了这种方法:
string VideoCardInfoID()
{
ManagementObjectSearcher objvide = new ManagementObjectSearcher("select * from Win32_VideoController");
string output = string.Empty;
foreach (ManagementObject obj in objvide.Get())
{
output += (obj["PNPDeviceID"] + "\n");
}
return output;
}
此代码的输出是:
PCI\VEN_10DE&DEV_1055&SUBSYS_908A104D&REV_A1\4&F7451F8&0&0008
我有两个问题:
视频卡适配器的PNPDeviceID在所有计算机上是否都是唯一的?安装新的新Windows时会发生变化吗?我知道堆栈溢出中也存在一些类似的问题,但是它们没有明确的答案,例如,这个question和这个question。
为什么c#
函数(\4&F7451F8&0&0008
)的输出中还有其他字符?
更新:我尝试安装新的Windows,并且硬件ID和PNPDeviceID仍然相同,但是我仍然不知道PNPDeviceID在所有计算机上是否唯一(我的意思是与MAC地址相同)
答案 0 :(得分:3)
视频卡适配器的PNPDeviceID在所有计算机上是否都是唯一的?
不。该字符串的本质是
<Bus>\<Device ID>\<Instance ID>
Instance ID仅在当前系统的上下文中是唯一的,并且 甚至对于整个系统来说都不是唯一的,only for the device's bus。
也就是说,如果您在计算机中安装了两个相同的视频卡,则它们将具有相同的设备ID,但实例ID不同。
图形卡驱动程序可能在实例ID中使用其自己的序列号。因此,实例ID可能是全局唯一的,但WMI无法为所有PNP设备做出保证。
这时,如果可能的话,您可能必须使用按供应商记录的方式确定设备的序列号。