Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一些CPU信息_C++_Windows - Fatal编程技术网

C++ 一些CPU信息

C++ 一些CPU信息,c++,windows,C++,Windows,嗯,我想我们正在研究一个CPU控制器,它显示所有的CPU数据。我已设法获得Windows版本、Windows Service Pack、处理器名称、处理器速度、处理器标识符(通过注册表VAL)。 但现在我不知道如何获取处理器指令、缓存、视频卡信息(视频卡名称、可用内存、总内存)、Southbridge信息(以太网信息) 嗯,我一直很喜欢WinAPI,但我觉得它很难工作。我在谷歌上搜索了3个小时,但什么都没有有什么想法吗(看看: MEMORYSTATUSEX status; GlobalMemor

嗯,我想我们正在研究一个CPU控制器,它显示所有的CPU数据。我已设法获得Windows版本、Windows Service Pack、处理器名称、处理器速度、处理器标识符(通过注册表VAL)。 但现在我不知道如何获取处理器指令、缓存、视频卡信息(视频卡名称、可用内存、总内存)、Southbridge信息(以太网信息)

嗯,我一直很喜欢WinAPI,但我觉得它很难工作。我在谷歌上搜索了3个小时,但什么都没有有什么想法吗(

看看:

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