如何列出多核处理器(使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

Win32:计算多核/多处理器系统中的线程 CPU 利用率

多核CPU的利用率怎么计算

如何使用 WMI 了解进程的 CPU 和内存使用情况?

国产CPU性能测试:多核华为排第一,单核兆芯排第一

多核CPU的主频怎么算

在多处理中如何将 CPU 内核分配给 python 进程?