c++ - 在 C++ (Windows) 上获取显卡名称

标签 c++ winapi

我需要检索有关安装在 Windows 上的视频卡的信息。 显卡名称。我该怎么做?我可以使用 Windows API 吗? 请提供一些 sample 。

最佳答案

下方code将有助于获取视频卡的名称

#define _WIN32_DCOM
#include <iostream>
#include <tchar.h>
#include <comdef.h>
#include <Wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hres;
    hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres)) return 0;
    hres =  CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
    if (FAILED(hres)) {
        CoUninitialize();
        return 0;
    }
    IWbemLocator *pLoc = NULL;
    hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc);
    if (FAILED(hres)) {
        CoUninitialize();
        return 0;
    }
    IWbemServices *pSvc = NULL;
    hres = pLoc->ConnectServer( _bstr_t(L"root\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc);
    if (FAILED(hres)) {
        pLoc->Release();
        CoUninitialize();
        return 0;
    }
    hres = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
    if (FAILED(hres)) {
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 0;
    }
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(bstr_t("WQL"),
                           bstr_t("SELECT * FROM Win32_VideoController"),
                           WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
    if (FAILED(hres)) {
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 0;
    }
    IWbemClassObject *pclsObj;
    ULONG uReturn = 0;
    while(pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
        if(0 == uReturn)break;
        VARIANT vtProp;
        hr = pclsObj->Get(L"Caption", 0, &vtProp, 0, 0);
        wcout << " OS Name : " << vtProp.bstrVal << endl;
        VariantClear(&vtProp);
    }
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    pclsObj->Release();
    CoUninitialize();

    return 0;
}


编译:cl.exe/EHsc main.cpp
输出:操作系统名称:Intel(R) HD Graphics 520

关于c++ - 在 C++ (Windows) 上获取显卡名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55842134/

相关文章:

c++ - Windows 事件查看器锁定了我的 EXE 文件

c++ - HTML 渲染器插件,C++ 代码

c++ - 聚合的默认初始化

c++ - 反向查找指向 cstring 中第 n 次出现的字符的指针

c - 我如何确定一个线程在哪里接触另一个线程的堆栈?

c++ - SS_NOTIFY 和 WM_SETCURSOR

c# - GUID 在 C++ 中的使用 :

c++ - 执行构造函数时未分配全局常量变量

c++ - C++中如何检查字符串的结尾?

c - 使用 C 从 Windows 注册表读取