/************************************************************************
    FileName:main.cpp
    Descript:获取显卡信息
    Author:绝望的老猫
    Date:2012/12/23
************************************************************************/

#include <Windows.h>
#include <iostream>
#include <DXGI.h>
#include <vector>

using namespace std;

int main()
{
    // 参数定义
    IDXGIFactory * pFactory;
    IDXGIAdapter * pAdapter;    
    std::vector <IDXGIAdapter*> vAdapters;          // 显卡
    // 显卡的数量
    int iAdapterNum = 0;            
    // 创建一个DXGI工厂
    HRESULT hr = CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)(&pFactory) );

    if (FAILED(hr))
        return -1;
    // 枚举适配器
    while(pFactory->EnumAdapters(iAdapterNum, &pAdapter) != DXGI_ERROR_NOT_FOUND) 
    { 
        vAdapters.push_back(pAdapter); 
        ++iAdapterNum; 
    } 

    // 信息输出 
    cout<<"===============获取到"<<iAdapterNum<<"块显卡==============="<<endl;
    for (size_t i=0;i<vAdapters.size(); i++)
    {
        // 获取信息
        DXGI_ADAPTER_DESC adapterDesc;
        vAdapters[i]->GetDesc(&adapterDesc);

        // 输出显卡信息
        cout<<"系统视频内存:"<<adapterDesc.DedicatedSystemMemory/1024/1024<<"M"<<endl;
        cout<<"专用视频内存:"<<adapterDesc.DedicatedVideoMemory/1024/1024<<"M"<<endl;
        cout<<"共享系统内存:"<<adapterDesc.SharedSystemMemory/1024/1024<<"M"<<endl;
        cout<<"设备描述:"<<adapterDesc.Description<<endl;
        cout<<"设备ID:"<<adapterDesc.DeviceId<<endl;
        cout<<"PCI ID修正版本:"<<adapterDesc.Revision<<endl;
        cout<<"子系统PIC ID:"<<adapterDesc.SubSysId<<endl;
        cout<<"厂商编号:"<<adapterDesc.VendorId<<endl;

        // 输出设备
        IDXGIOutput * pOutput;
        std::vector<IDXGIOutput*> vOutputs;
        // 输出设备数量
        int iOutputNum = 0;
        while(vAdapters[i]->EnumOutputs(iOutputNum,&pOutput)!= DXGI_ERROR_NOT_FOUND)
        {
            vOutputs.push_back(pOutput);
            iOutputNum++;
        }

        cout<<"-----------------------------------------"<<endl;
        cout<<"获取到"<<iOutputNum<<"个显示设备:"<<endl;
        cout<<endl;

        for (size_t n=0;n<vOutputs.size();n++)
        {
            // 获取显示设备信息
            DXGI_OUTPUT_DESC outputDesc;
            vOutputs[n]->GetDesc(&outputDesc);

            // 获取设备支持
            UINT uModeNum = 0;
            DXGI_FORMAT format = DXGI_FORMAT_R8G8B8A8_UNORM;
            UINT flags         = DXGI_ENUM_MODES_INTERLACED;

            vOutputs[n]->GetDisplayModeList( format, flags, &uModeNum, 0);
            DXGI_MODE_DESC * pModeDescs = new DXGI_MODE_DESC[uModeNum];
            vOutputs[n]->GetDisplayModeList( format, flags, &uModeNum, pModeDescs);

            cout<<"显示设备名称:"<<outputDesc.DeviceName<<endl;
            cout<<"显示设备当前分辨率:"<<outputDesc.DesktopCoordinates.right-outputDesc.DesktopCoordinates.left <<"*"<<outputDesc.DesktopCoordinates.bottom-outputDesc.DesktopCoordinates.top<<endl;
            cout<<endl;

            // 所支持的分辨率信息
            cout<<"分辨率信息:"<<endl;
            for (UINT m=0;m<uModeNum;m++)
            {
                cout<<"== 分辨率:"<<pModeDescs[m].Width<<"*"<<pModeDescs[m].Height<<"     刷新率"<<(pModeDescs[m].RefreshRate.Numerator)/(pModeDescs[m].RefreshRate.Denominator)<<endl;
            }
        }
        vOutputs.clear();
    }
    vAdapters.clear();
    system("pause");
    return 0;
}

在链接器中加入DXGI.lib
20171124114559028.png
如果没安装显驱动,无法获取GPU信息

版权声明:本文为CSDN博主「sagakiss」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sagakiss/article/details/8396571

最后修改:2019 年 12 月 01 日
如果觉得我的文章对你有用,请随意赞赏