2014-10-05 105 views
1

我使用下面的代碼VB6獲取當前正在運行的CPU ID如何列出多核處理器(含WMI)中的所有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爲我的軟件進行許可,並且當客戶端計算機將處理器轉換爲我未註冊的處理器時,許可的計算機將被宣告爲未經許可。

+1

我預計每個物理處理器有一個CPU ID。我不希望看到每核心一個。您只能找出一個處理器中的核心數量(請參見['NumberOfCores'屬性](http://msdn.microsoft.com/zh-cn/library/aa394373%28v=vs.85%29.aspx) )。 – Tomalak 2014-10-05 07:18:28

+0

我不希望看到每核心一個......我可能是錯的,但顯然cpu id確實在多個核心場景中發生了變化。然後,我必須等待客戶打電話給我,以便爲其他cpu-id註冊它們。我希望有經驗的人能爲我澄清。 – webzy 2014-10-06 00:02:57

回答

1

您正在使用的查詢應該獲取計算機上的所有物理處理器。如果您的軟件真正安裝在多處理器機器上,則可以始終註冊所有處理器ID。否則,快速實驗會在我的雙核筆記本電腦上返回一個處理器ID。

MSDN ProcessorID文檔:

ProcessorId

Data type: string 
Access type: Read-only 

Processor information that describes the processor features. 

對於x86的類CPU,場格式取決於處理器支持的 CPUID指令。如果支持指令,則屬性 包含2(2)個DWORD格式的值。第一個是 08h-0Bh的偏移量,它是CPUID指令返回的EAX值, 輸入EAX設置爲1.第二個偏移量爲0Ch-0Fh,即指令返回的 EDX值。只有 屬性的前兩個字節是重要的,並且包含CPU重置時DX 寄存器的內容 - 其他所有寄存器都設置爲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 

結果:

Result

如果您還沒有呢,Win23_Processor類文檔可以在這裏找到。 http://msdn.microsoft.com/en-us/library/aa394373%28VS.85%29.aspx

+0

我很欣賞這一點。除了在筆記本電腦上顯示BFEBFBFF000010676之外,還有另外一個處理器ID。我希望有一個代碼或從一開始就知道該處理器ID是什麼的方式。問題是我們如何循環處理其他處理器? – webzy 2014-10-05 23:55:39

+0

@webzy我相信你錯了。它似乎是1個處理器,1個ID和2個(在這種情況下)核心。 – jac 2014-10-06 00:24:52

+0

謝謝。我的多個ID的來源似乎來自另一個來源....閱讀磁盤驅動器ID來做一個複合ID ....「從Win32_physicalMedia選擇*」。你的回答幫助我更好地檢查我的編碼。 – webzy 2014-10-23 04:10:38

相關問題