CPU Hersteller und CPU Namen auslesen
-
Hallo,
wie kann ich den Namen des CPU-Herstellers und den Namen der CPU auslesen/ermitteln?
-
WMI mit Win32_Processor
Da bekommst Du dann z.B. diese Infos:
AddressWidth: 32
Architecture: 0
Availability: 3
Caption: x86 Family 15 Model 3 Stepping 4
CpuStatus: 1
CreationClassName: Win32_Processor
CurrentClockSpeed: 3192
CurrentVoltage: 15
DataWidth: 32
Description: x86 Family 15 Model 3 Stepping 4
DeviceID: CPU0
ExtClock: 800
Family: 2
L2CacheSize: 0
Level: 15
LoadPercentage: 0
Manufacturer: GenuineIntel
MaxClockSpeed: 3192
Name: Intel(R) Pentium(R) 4 CPU 3.20GHz
PowerManagementSupported: False
ProcessorId: BFEBFBFF00000F34
ProcessorType: 3
Revision: 772
Role: CPU
SocketDesignation: Microprocessor
Status: OK
StatusInfo: 3
Stepping: 4
SystemCreationClassName: Win32_ComputerSystem
SystemName: PIV3200
UpgradeMethod: 4
Version: Modell 3, Stepping 4
-
...und wenn du wissen willst, wie sowas funktioniert: http://www-ti.informatik.uni-tuebingen.de/~heim/software/cpuid/cpuid-1.2.c
-
heftig, da bin ich ja richtig froh, dass es das schon fertig gibt.
danke
-
das wmi ding ist ziemlich umständlich, ich glaub ich werd einfach das von der uni nehmen
-
sehe gerade das von der uni ist unter der gpl, das ist schlecht
-
Bei dem WMI steig ich nicht durch, auf der Seite zu Win32_Processor in der MSDN gibts unten nen Link zu WMI-Beispielen, aber anscheinend ist das so ne Art Datenbank zumindest steht in dem Beispiel an einer Stelle nen SQL-Statement.
Wie komm ich denn an so nen Win32_Processor Objekt?
-
Hab gerade nen klasse Artikel zu WMI gefunden http://www.codeproject.com/system/UsingWMI.asp?df=100&forumid=185770&exp=0&select=1161161
-
-
Ich hab das mit WMI geschafft.
Leider ist ein WMI query 2 Sekunden lang.
Wenn ich nach dem query abfrage, kommt immer derselbe Wert heraus.
Bei einem AMD64 mit Cool'n'Quite ändert sich der Wert aber fortlaufend.
Wie komme ich schneller an neue WMI Daten ?#ifndef _WIN32_DCOM #define _WIN32_DCOM #endif #include <windows.h> #include <objbase.h> #include <atlbase.h> #include <iostream> #include <wbemidl.h> #include <comutil.h> int main( int argc, char** argv ) { HRESULT hr = CoInitializeEx( NULL, COINIT_MULTITHREADED ); // setup process-wide security context hr = CoInitializeSecurity( NULL, // we're not a server -1, // we're not a server NULL, // dito NULL, // reserved RPC_C_AUTHN_LEVEL_DEFAULT, // let DCOM decide RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL ); int result = 0; // we're going to use CComPtr<>s, whose lifetime must end BEFORE CoUnitialize is called { // connect to WMI CComPtr< IWbemLocator > locator; hr = CoCreateInstance( CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, reinterpret_cast< void** >( &locator ) ); if ( FAILED( hr ) ) { std::cerr << "Instantiation of IWbemLocator failed" << std::endl; return -1; } // connect to local service with current credentials CComPtr< IWbemServices > service; hr = locator->ConnectServer( L"root\\cimv2", NULL, NULL, NULL, WBEM_FLAG_CONNECT_USE_MAX_WAIT, NULL, NULL, &service ); if ( SUCCEEDED( hr ) ) { // execute a query CComPtr< IEnumWbemClassObject > enumerator; [b]hr = service->ExecQuery( L"WQL", L"SELECT * FROM Win32_Processor", <<<< dieser query braucht 2 sekunden :([/b] WBEM_FLAG_FORWARD_ONLY, NULL, &enumerator ); if ( SUCCEEDED( hr ) ) { // read the first instance from the enumeration (only one on single processor machines) CComPtr< IWbemClassObject > processor = NULL; ULONG retcnt; hr = enumerator->Next( WBEM_INFINITE, 1L, reinterpret_cast<IWbemClassObject**>( &processor ), &retcnt ); if ( SUCCEEDED( hr ) ) { if ( retcnt > 0 ) { // we have a processor installed :) // now extract a property value _variant_t var_val; [b]hr = processor->Get( L"CurrentClockSpeed", 0, &var_val, NULL, NULL );[/b] [b]^^^ leider immer selber Wert wenn ich hier eine Schleife mache :([/b] if ( SUCCEEDED( hr ) ) { _bstr_t str = var_val; [b]std::cout << "Processor speed: " << str << std::endl;[/b] } } } } } } CoUninitialize(); return result; }
-
Steht auch in der Registry
HKEY hkey; DWORD type; DWORD size; DWORD processorspeed = 0; DWORD dwData = sizeof(DWORD); char processorname[MAX_PATH]; char sendspeed[MAX_PATH]; char computername[MAX_PATH]; // (1) Get Processor Name RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_ALL_ACCESS,&hkey); RegQueryValueEx(hkey,"ProcessorNameString",0,&type,(LPBYTE)processorname,&size); // (2) Get Processor Speed RegQueryValueEx(hkey,"~MHz",0,0,(BYTE*)&processorspeed,&dwData); RegCloseKey(hkey); // Falls du die Geschwindigkeit in einem String brauchst ultoa(processorspeed,sendspeed,MAX_PATH);
-
nein, dort steht nur ein konstanter Wert.