Некоторая информация о процессоре - PullRequest
5 голосов
/ 16 февраля 2011

Ну, мы работаем над контроллером ЦП, который показывает все данные ЦП.Мне удалось получить версию Windows, пакет обновления Windows, имя процессора, скорость процессора, идентификатор процессора (хотя Registry Vals).Но теперь я понятия не имею, как получить инструкции процессора, кеши, информацию о видеокарте (имя видеокарты, доступную память, общий объем памяти), информацию о южном мосту (информация о Ethernet)Я смотрю на WinAPI, но мне очень тяжело работать.Я просмотрел Google 3 часа, но ничего.:/ Любая идея?(

Ответы [ 4 ]

3 голосов
/ 16 февраля 2011

Немного расширим ответ cppanda:

Что касается видеокарт, то в системе иногда их больше одного.Лучший способ получить на них много информации - это использовать 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*/; }

Перечислять подключенные выходы [IE 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, SharedSystemMemory и AdapterLuid.AdapterLuid является системным уникальным идентификатором для карты, но все остальные должны быть очень очевидны с учетом названий.

Кроме того, он становится специфичным для поставщика.

Для DirectX 9, которая доступна для Windows 2000, немного отличается.Сначала вы должны создать основной объект 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*/;    }
}

Опять же, большинство полей должны быть самоочевидными.WHQLLevel - это информация о том, когда и когда Microsoft проверила совместимость этого драйвера с Windows, и по большей части может быть безопасно проигнорирована.Используя тот же метод, что и выше, вы также можете получить возможности устройства, используя GetDeviceCaps, что даст вам больше информации.

Как сказала cppanda, вы можете использовать IDirect3DDevice9 :: GetAvailableTextureMem (), но для этого вам нужносоздать устройство, прежде чем запрашивать его.Ничто из вышеперечисленного не указывает на необходимость создания устройства перед его извлечением.

Надеюсь, это поможет ~

[Примечание: многое из этого было извлечено из DirectX SDK, так что их кодне мой.]

3 голосов
/ 16 февраля 2011

Вы смотрели на WMI ? Это указывает на то, что вы можете получить информацию о SouthBridge через WMI.

2 голосов
/ 16 февраля 2011

Хорошо, инструкция CPUID дает немного информации.Не все, что вам нужно, но это начало.

2 голосов
/ 16 февраля 2011

Взгляните на:

MEMORYSTATUSEX status;
GlobalMemoryStatusEx(&status);

Для оперативной и виртуальной памяти

Для видеопамяти Vista:

CreateDXGIFactory API via GetProcAddress()

Ниже Vista, d3d9 API

GetAvailableTextureMemory()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...