C++ 一些CPU信息
嗯,我想我们正在研究一个CPU控制器,它显示所有的CPU数据。我已设法获得Windows版本、Windows Service Pack、处理器名称、处理器速度、处理器标识符(通过注册表VAL)。 但现在我不知道如何获取处理器指令、缓存、视频卡信息(视频卡名称、可用内存、总内存)、Southbridge信息(以太网信息) 嗯,我一直很喜欢WinAPI,但我觉得它很难工作。我在谷歌上搜索了3个小时,但什么都没有有什么想法吗(看看:C++ 一些CPU信息,c++,windows,C++,Windows,嗯,我想我们正在研究一个CPU控制器,它显示所有的CPU数据。我已设法获得Windows版本、Windows Service Pack、处理器名称、处理器速度、处理器标识符(通过注册表VAL)。 但现在我不知道如何获取处理器指令、缓存、视频卡信息(视频卡名称、可用内存、总内存)、Southbridge信息(以太网信息) 嗯,我一直很喜欢WinAPI,但我觉得它很难工作。我在谷歌上搜索了3个小时,但什么都没有有什么想法吗(看看: MEMORYSTATUSEX status; GlobalMemor
MEMORYSTATUSEX status;
GlobalMemoryStatusEx(&status);
用于RAM和虚拟RAM
视频存储器
vista:
在vista下,d3d9 API
GetAvailableTextureMemory()
你看了吗?似乎建议你可以通过WMI获取SouthBridge信息。好吧,说明给出了一些信息。不是你需要的全部,但这是一个开始。将稍微扩展cppanda的答案: 关于视频卡,系统中有时会有多个视频卡。获取大量视频卡信息的最佳方法是使用DirectX 如果要与Vista及以上兼容,可以使用DXGI,在我看来,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;
}
列举所附输出[即监视器],这可能有助于检查支持哪些分辨率,例如:
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;
}
AdapterDescription包含以下字段:描述
,供应商ID
,设备ID
,子系统ID
,修订版
,专用视频内存
,专用系统内存
,共享系统内存
,以及AdapterUID
。
adapterUID
是卡的特定于系统的唯一标识符,但所有其他的名称都应该非常明显
除此之外,我认为它还具有特定于供应商的特性
对于适用于Windows 2000以上版本的DirectX 9,它有点不同。首先,您必须创建核心Direct3D9对象:
IDirect3D9* D3D9 = Direct3DCreate9(D3D_SDK_VERSION);
if (D3D9 == 0)
{ /* Error checking*/; }
然后获取适配器计数:
unsigned short AdapterCount = (unsigned short)D3D9->GetAdapterCount();
然后循环遍历它们,获取它们的标识符:
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*/; }
}
D3DADAPTER_IDENTIFIER9*Identifiers=新的d3dadadapter_identier9[AdapterCount];
HRESULT RetVal=0;
for(无符号短I=0;IGetAdapterIdentifier(I、0和标识符[I]);
如果(失败(返回))
{/*错误检查*/;}
}
同样,大多数字段都应该是自解释的。WHQLLevel是有关Microsoft是否以及何时测试该驱动程序与Windows的兼容性的信息,在大多数情况下可以安全地忽略。使用与上述方法类似的方法,您还可以使用GetDeviceCaps获取设备的功能,这将为您提供更多信息
正如cppanda所说,您可以使用IDirect3DDevice9::GetAvailableTexturem(),但这要求您在查询设备之前创建设备。上述两种情况都不表明您需要在检索设备之前创建设备
希望有帮助~
[旁注,这其中很多都是从DirectX SDK中提取出来的,所以代码是他们的,不是我的。]是的,我一直在看。(视频)。我也看了MSDN。但我不知道。好吧。我已经做了:{LPDIRECT3D9 d3d=NULL;PDDirect3DDevice9 d3ddDevice=NULL;d3d=Direct3DCreate9(d3d_SDK_版本);D3DPRESENT_参数d3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp));HRESULT DeviceErr=d3d->CreateDevice(d3dapter_DEFAULT,D3DDEVTYPE_HAL,NULL,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&d3ddDevice);返回d3dpp->getAvailableTexturem();},但这不会返回任何内容。(现在我使用DLL获取内存)。是的。我已经这样做了。我不知道如何继续。:/{IDXGIFactory*工厂;CreateDXGIFactory(uuu uuidof(IDXGIFactory),(void**)&factory);UINT a=0;IDXGIAdapter*适配器;while(工厂->枚举适配器(a,&adapter)!=DXGI错误{++a;}哇,很好。谢谢。我基本上从来没有尝试过使用DirectX或OpenGL。因为我仍然没有任何好的游戏项目。:PGlad它很有帮助。如果你有任何问题或任何事情,请随时提问,我会关注这一主题几天,以确保你设置好:3 GetDesc做什么?当我尝试它时,我得到了0012E1F0.o.o,因为我做了&AdapterDDescription.Description,它返回了.o.OGetDesc是Get Description,它用不同的信息位填充一个DXGI_ADAPTER_descrip字段。如果0012E1F0是GetDesc返回的,它是一个返回代码,基本上意味着成功,还有一些其他信息位。如果你的意思是AdapterDescription->Description等于这个值,那么它就是指向包含适配器描述的宽字符串(Unicode)。您可以使用循环将宽字符串中的每个字符复制到新的字符字符串中,从而将其转换为ASCII字符串[可能会丢失数据]。请参见此处:
IDirect3D9* D3D9 = Direct3DCreate9(D3D_SDK_VERSION);
if (D3D9 == 0)
{ /* Error checking*/; }
unsigned short AdapterCount = (unsigned short)D3D9->GetAdapterCount();
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*/; }
}