一些CPU信息

时间:2011-02-16 18:09:59

标签: c++ windows

好吧,我正在开发一个CPU控制器,它显示所有CPU数据。我已经设法获得Windows版本,Windows服务包,处理器名称,处理器速度,处理器标识符(虽然注册表Vals)。 但现在我不知道如何获得处理器指令,缓存,视频卡信息(视频卡名称,可用内存,总内存),南桥信息(以太网信息)

好吧,我一直在使用WinAPI,但我很难工作。我已经看了3个小时谷歌,但没有。 :/ 任何的想法? :(

4 个答案:

答案 0 :(得分:3)

你看过WMI了吗? This似乎建议您通过WMI获取SouthBridge信息。

答案 1 :(得分:3)

稍微扩大cppanda的答案:

关于视频卡,系统中有时不止一个。获取oodles大量信息的最佳方法是使用DirectX。

如果它与Vista及更高版本兼容,您可以使用DXGI,我认为它更干净,更易于使用。

首先,您需要创建一个DXGI工厂......

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

然后用它来遍历每个适配器...

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;
}

从这里,您可以看到是否支持Direct3D 10:

if (Adapters[I]->CheckInterfaceSupport(__uuidof(ID3D10Device), 0) == S_OK)
{   /*D3D10 is supported for this device*/; }

列举附加产出[I.E. Moniters],可用于检查支持哪些分辨率等等:

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;
}

并获得说明:

DXGI_ADAPTER_DESC AdapterDescription;
Adapter[I]->GetDesc(&AdapterDescription);

AdapterDescription包含字段DescriptionVenderIdDeviceIdSubSysIdRevisionDedicatedVideoMemoryDedicatedSystemMemory,{ {1}}和SharedSystemMemoryAdapterLuid是卡片的系统特定唯一标识符,但鉴于名称,所有其他标识符应该非常明显。

除此之外,我认为它已成为特定供应商。

对于适用于Windows 2000的DirectX 9,它有点不同。首先,您必须创建核心Direct3D9对象:

AdapterLuid

然后获取适配器计数:

IDirect3D9* D3D9 = Direct3DCreate9(D3D_SDK_VERSION);
if (D3D9 == 0)
{   /* Error checking*/;    }

然后遍历它们,获取它们的标识符:

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

同样,大多数领域都应该是自我解释的。 WHQLLevel是关于Microsoft是否以及何时测试该驱动程序与Windows的兼容性的信息,并且大部分都可以安全地忽略。使用接近上述相同的方法,您还可以使用GetDeviceCaps获取设备的功能,这将为您提供更多信息。

正如cppanda所说,您可以使用IDirect3DDevice9 :: GetAvailableTextureMem(),但这需要您在查询之前创建设备。上述两项内容均未指明在检索设备之前需要创建设备。

希望有所帮助〜

[旁注,其中很多是从DirectX SDK中删除的所以代码是他们的,而不是我的。]

答案 2 :(得分:2)

看看:

MEMORYSTATUSEX status;
GlobalMemoryStatusEx(&status);

用于RAM和虚拟RAM

用于视频内存 远景:

CreateDXGIFactory API via GetProcAddress()

在vista下面,d3d9 API

GetAvailableTextureMemory()

答案 3 :(得分:2)

嗯,CPUID指令给出了一些信息。不是你需要的全部,但这是一个开始。