我建议你告诉我们你为什么想知道CPU是Intel i3/i5/i7还是不知道的原因;所以我们可以告诉你,你错了,你应该使用由CPUID或其他东西返回的功能标志。基本上没有足够的信息提供给你你需要的答案(只有足够的信息才能给你所要求的答案)。 :-)
SYSTEM_INFO结构的“wProcessorLevel”和“wProcessorRevision”字段实际上是无用的,因为您不知道CPU制造商是谁。您可以使用CPUID中的VendorID(试图)确定制造商,但如果您这样做,则可以同时获得家族/型号/步进信息。
“wProcessorLevel”看起来像是直接从“CPUID.family”中获取的。对于“wProcessorLevel = 6”,它可以是从Pentium II到最新的Nehalem的任何Intel CPU,不包括基于Netburst的CPU(例如Pentium 4)。它也可能是AMD K7,Cyrix M2,VIA C3或其他。
“wProcessorRevision”字段看起来像是从“(CPUID.model < < 8)+ CPUID.stepping”派生的。步进部分应该被忽略。 “CPUID.model”部分(与CPUID /系列部分结合)不足以确定它是最近的Intel Nehalem还是来自不同制造商的旧CPU(恰好使用相同的“CPUID.family”和“ CPUID.model“)忽略”wProcessorLevel“,只依赖于”CPUID.model“部分只会让事情变得更糟
当然,即使有来自CPUID的完整识别信息,也很难区分在i3/i5/i7和基于Nehalem的基于Xeon或Nehalem的Celeron之间,或者英特尔感觉使用的任何其他品牌名称(但如果实际上确实意味着“i3/i5或i7”),或者确定CPU未来英特尔的发布不是i3/i5/i7(没有办法预测英特尔未来可能使用哪些家族/型号/步进值)。另外,不要忘记一些CPU允许CPUID返回的信息被修改,所以没有严格保证返回“vendorID = Intel,family = 6,model = 30”的CPU不是完全不同的因此没有严格保证“wProcessorRevision”和“wProcessorRevision”的信息是正确的);如果这是一个问题,你需要比CPUID的供应商/家族/模型更深入。
“我确实使用CPUID&VendorID找到了所有可能的CPU检测的详尽代码,但现在我想远离它”< - 为什么? – 2011-01-06 21:04:48
,因为GetSystemInfo似乎可以做到几乎没有实现 - 因为msdn会保持其文档是最新的。 – Alex 2011-01-06 22:13:46