如何列出多核处理器(使用 WMI)中的所有 CPU ID?
Posted
技术标签:
【中文标题】如何列出多核处理器(使用 WMI)中的所有 CPU ID?【英文标题】:How to list all CPU IDs in a multiple core processor (with WMI)? 【发布时间】:2014-10-05 05:27:52 【问题描述】:我正在使用下面的 vb6 代码来获取当前运行的 cpu id
Dim CpuId As String
Dim objWMIService, colItems, objItem
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem In colItems
CpuId = objItem.ProcessorId
Next
msgbox cpuid
这适用于单个 cpu 处理器。 但是现在许多计算机都具有多个处理器,双核,核心 i 3 等。 如何列出所有现有的处理器 ID。
我正在使用处理器 ID 为我的软件进行许可,当客户端计算机将处理器切换到我未注册的处理器时,许可机器被宣布为未许可。
【问题讨论】:
我希望每个 物理 处理器都有一个 CPU ID。我不希望每个核心看到一个。您只能找出一个处理器中的内核数(参见NumberOfCores
property)。
我不希望每个核心看到一个......我可能是错的,但显然 cpu id 在多核心场景中确实发生了变化。然后我必须等待客户给我打电话,以便为他们注册另一个 cpu-id。我希望有经验的人可以为我澄清。
【参考方案1】:
您使用的查询应该获取机器上的所有物理处理器。如果您的软件真正安装在多处理器机器上,您总是可以注册所有处理器 ID。否则,快速实验会在我的双核笔记本电脑上返回单个处理器 ID。
MSDN ProcessorID 文档:
处理器ID
Data type: string Access type: Read-only Processor information that describes the processor features.
对于 x86 类 CPU,字段格式取决于处理器支持 CPUID 指令。如果支持该指令,则属性 包含 2(两个)DWORD 格式的值。第一个是偏移量 08h-0Bh,这是 CPUID 指令返回的 EAX 值 输入 EAX 设置为 1。第二个是 0Ch-0Fh 的偏移量,即 指令返回的 EDX 值。只有前两个字节 该属性很重要并且包含 DX 的内容 CPU 复位时的寄存器——所有其他寄存器都设置为 0(零),并且内容 是 DWORD 格式。
Private Sub GetInformation()
Dim CpuId As String
Dim objWMIService, colItems, objItem
List1.Clear
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
'this loop runs once for each physical processor
For Each objItem In colItems
List1.AddItem "Processor description: " & objItem.Description
List1.AddItem "Processor name: " & objItem.Name
List1.AddItem "Processor ID: " & objItem.ProcessorId
List1.AddItem "Device ID: " & objItem.DeviceID
List1.AddItem "Unique ID: " & objItem.UniqueId
List1.AddItem "Number of cores: " & objItem.NumberOfCores
List1.AddItem "Number if Logical processors: " & objItem.NumberOfLogicalProcessors
Next
End Sub
结果:
如果您还没有,可以在此处找到 Win23_Processor 类文档。 http://msdn.microsoft.com/en-us/library/aa394373%28VS.85%29.aspx
【讨论】:
我很感激。唯一的问题是,除了笔记本电脑中显示的 BFEBFBFF000010676 之外,还有另一个处理器 ID。我希望有一个代码或某种方式从一开始就知道该处理器ID是什么。问题是我们如何为另一个处理器循环? @webzy 我相信你错了。它似乎是 1 个处理器,具有 1 个 ID 和 2 个(在本例中)内核。 谢谢。我的多个 id 的来源似乎来自另一个来源....读取磁盘驱动器 id 以制作复合 id....“从 Win32_physicalMedia 中选择 *”。您的回答帮助我更好地检查了我的编码。以上是关于如何列出多核处理器(使用 WMI)中的所有 CPU ID?的主要内容,如果未能解决你的问题,请参考以下文章