好吧,我正在开发一个CPU控制器,它显示所有CPU数据。我已经设法获得Windows版本,Windows服务包,处理器名称,处理器速度,处理器标识符(虽然注册表Vals)。 但现在我不知道如何获得处理器指令,缓存,视频卡信息(视频卡名称,可用内存,总内存),南桥信息(以太网信息)
好吧,我一直在使用WinAPI,但我很难工作。我已经看了3个小时谷歌,但没有。 :/ 任何的想法? :(
答案 0 :(得分:3)
答案 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包含字段Description
,VenderId
,DeviceId
,SubSysId
,Revision
,DedicatedVideoMemory
,DedicatedSystemMemory
,{ {1}}和SharedSystemMemory
。
AdapterLuid
是卡片的系统特定唯一标识符,但鉴于名称,所有其他标识符应该非常明显。
除此之外,我认为它已成为特定供应商。
对于适用于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指令给出了一些信息。不是你需要的全部,但这是一个开始。