2014-10-05 5 views
1

나는 현재 실행중인 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 프로세서 잘 작동을 얻기 위해 아래 VB6 코드를 사용하고 있습니다. 그러나 요즘 많은 컴퓨터가 여러 개의 프로세서, 듀얼 코어, 코어 i 3 등을 가지고 있습니다. 어떻게 모든 기존 프로세서 ID를 나열 할 수 있습니까?

내 소프트웨어에 대한 라이센스를 부여하기 위해 프로세서 ID를 사용하고 있으며 클라이언트 컴퓨터가 등록하지 않은 프로세서로 프로세서를 검색하면 라이센스가 부여 된 시스템이 라이센스가없는 것으로 선언됩니다.

+1

* 실제 * 프로세서 당 하나의 CPU ID가 있어야합니다. 코어마다 하나씩 볼 것으로 기대하지는 않습니다. 하나의 프로세서에서만 코어 수를 확인할 수 있습니다 (['NumberOfCores' 속성] (http://msdn.microsoft.com/en-us/library/aa394373%28v=vs.85%29.aspx)). – Tomalak

+0

코어 당 하나를 볼 것으로 기대하지 않을 것입니다 ... 내가 틀릴 수도 있지만 분명히 CPU ID는 여러 핵심 시나리오에서 변경됩니다. 그리고 나서 고객이 저에게 전화해서 다른 cpu-id에 등록 할 때까지 기다려야합니다. 나는 경험 많은 사람이 나를 위해 명확히 해줄 수 있기를 바랍니다. – webzy

답변

1

사용중인 쿼리는 컴퓨터의 모든 물리적 프로세서를 가져야합니다. 소프트웨어가 멀티 프로세서 시스템에 실제로 설치된 경우 항상 모든 프로세서 ID를 등록 할 수 있습니다. 그렇지 않으면 빠른 실험을 통해 듀얼 코어 랩톱에 단일 프로세서 ID가 반환됩니다.

MSDN ProcessorID 문서 :

ProcessorId에 x86 클래스 CPU 용

Data type: string 
Access type: Read-only 

Processor information that describes the processor features. 

는 필드 포맷 CPUID 명령의 프로세서 지원에 의존한다. 명령이 지원되면 속성에는 2 (2) 개의 DWORD 형식 값이 포함됩니다. 첫 번째는 오프셋 08h-0Bh입니다. 이는 CPUID 명령어가 입력 EAX를 1로 설정하여 반환하는 EAX 값입니다. 두 번째는 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

+0

@webzy 나는 당신이 잘못 본 것을 믿습니다. 1 개의 프로세서와 1 개의 ID 및 2 개의 코어 (이 경우) 코어가있는 것으로 보입니다. – jac

+0

감사합니다. 여러 ID의 소스가 다른 소스에서 나온 것 같습니다 .... 디스크 ID를 읽는 디스크 ID를 읽는 중 .... "Win32_physicalMedia에서 선택 *". 귀하의 대답은 제가 코딩을 더 잘 점검 할 수 있도록 도와주었습니다. – webzy