c ++ - Nogle CPU-oplysninger

Indlæg af Hanne Mølgaard Plasc

Problem



Nå arbejder jeg på en CPU-controller, som viser alle CPU-data. Jeg har formået at få Windows Version, Windows Service Pack, Processornavn, Processor Speed, Processor Identifier (Selvom Registry Vals).
Men nu har jeg ingen ide om, hvordan man får processoren Instruktioner, Caches, Video Card Information (Video Card Navn, Tilgængelig Hukommelse, Total Hukommelse), Southbridge Information (Ethernet Information)


Nå, jeg har været loking på WinAPI, men jeg får det meget svært at arbejde. Jeg har set over Google 3 timer, men ingenting. :/Enhver ide? :(

Bedste reference


Se på:


MEMORYSTATUSEX status;
GlobalMemoryStatusEx(&status);


Til RAM og Virtual RAM


Til videohukommelse
vista:


CreateDXGIFactory API via GetProcAddress()


Under vista, d3d9 API


GetAvailableTextureMemory()

Andre referencer 1


Har du kigget på WMI? Dette tyder på, at du kan få SouthBridge-info via WMI. [22] [23]

Andre referencer 2


Vil udvide cppandas svar lidt:


Med hensyn til videokort er der nogle gange mere end én i systemet. Den bedste måde at få information om dem på er at bruge DirectX.


Hvis det er meningen at være kompatibelt med Vista og op, kan du bruge DXGI, som er renere og lettere at bruge efter min mening.


Første ting først, du skal oprette en DXGI fabrik ...


IDXGIFactory* DXGIFactoryPtr = 0;
HRESULT RetVal = CreateDXGIFactory(\_\_uuidof(IDXGIFactory), (void**)&DXGIFactoryPtr);
if (FAILED(RetVal)) {/*Error Checking*/;}


brug derefter den til at løbe gennem hver adapter ...


unsigned short I = 0;
IDXGIAdapter* AdapterPtr = 0;
std::vector<IDXGIAdapter*> Adapters;
while (DXGIFactoryPtr->EnumAdapters(I, &AdapterPtr) != DXGI\_ERROR\_NOT\_FOUND)
{
    Adapters.push\_back(AdapterPtr);
    ++I;
}


Herfra kan du se om Direct3D 10 understøttes:


if (Adapters[I]->CheckInterfaceSupport(\_\_uuidof(ID3D10Device), 0) == S\_OK)
{   /*D3D10 is supported for this device*/; }


Opregne tilsluttede udgange [[I.E. Moniters]], som kan være nyttige til at kontrollere hvilke beslutninger der understøttes og sådan:


unsigned short J = 0;
IDXGIOutput* OutputPtr = 0;
std::vector<IDXGIOutput*> Outputs;
while (Adapter[I]->EnumOutputs(J, &OutputPtr) != DXGI\_ERROR\_NOT\_FOUND)
{
    Outputs.push\_back(OutputPtr);
    ++J;
}


og få en beskrivelse:


DXGI\_ADAPTER\_DESC AdapterDescription;
Adapter[I]->GetDesc(&AdapterDescription);


AdapterDeskription har felterne Description, VenderId, DeviceId, SubSysId, Revision, DedicatedVideoMemory, DedicatedSystemMemory, SharedSystemMemory]] og AdapterLuid.
AdapterLuid er en systemspecifik unik identifikator for kortet, men alle de andre bør være meget indlysende givet navnene.


Udover det bliver det sælgerspecifik, jeg tror.


For DirectX 9, som er tilgængelig til Windows 2000, er det lidt anderledes. Først skal du oprette kerne Direct3D9 objekt:


IDirect3D9* D3D9 = Direct3DCreate9(D3D\_SDK\_VERSION);
if (D3D9 == 0)
{   /* Error checking*/;    }


Få derefter adapteren tæller:


unsigned short AdapterCount = (unsigned short)D3D9->GetAdapterCount();


Gå derefter igennem dem og få deres identifikatorer:


D3DADAPTER\_IDENTIFIER9* Identifiers = new D3DADAPTER\_IDENTIFIER9[AdapterCount];
HRESULT RetVal = 0;
for (unsigned short I = 0; I < AdapterCount; ++I)
{
    RetVal = D3D9->GetAdapterIdentifier(I, 0, &Identifiers[I]);
    if (FAILED(RetVal))
    {   /* Error checking*/;    }
}


Igen skal de fleste felter være selvforklarende. WHQLLevel er information om, hvornår og hvornår Microsoft testede driverens kompatibilitet med Windows og for det meste sikkert kan ignoreres. Ved at bruge næsten samme metode ovenfor kan du også erhverve en enheds kapacitet ved hjælp af GetDeviceCaps, hvilket ville give du mere information.


Som cppanda sagde, kan du bruge IDirect3DDevice9 :: GetAvailableTextureMem (), men det kræver, at du opretter enheden, før du spørger den. Alt hvad de to ovenstående ikke angiver, kræver oprettelse af enheden, før den hentes.


Håber det hjælper ~


[[Sidebesked, meget af dette blev trukket ud af DirectX SDK så kode er deres, ikke min.]]

Andre referencer 3


Nå giver CPUID instruktionen en smule info. Ikke alt, hvad du har brug for, men det er en start. [24]