在 c++ (Windows) 上获取视频卡名称
Get video card name on c++ (Windows)
我需要检索有关Windows上安装的视频卡的信息。显卡名称。我该怎么做?我可以使用 Windows API 吗?请提供一些样品。
下面的代码将有助于获取视频卡的名称
#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;
}
compile: cl.exe /EHsc main.cpp
output: OS Name : Intel(R) HD Graphics 520
纯粹基于 GDI 的解决方案将使用 EnumDisplayDevices
。以下代码在联机 c++ 编译器中运行。
//Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64
#include <iostream>
#include <windows.h>
#pragma comment(lib,"user32.lib")
int main()
{
for(int i=0; ;i++)
{
DISPLAY_DEVICE dd = {sizeof(dd), 0};
BOOL f = EnumDisplayDevices(NULL,i,&dd,EDD_GET_DEVICE_INTERFACE_NAME);
if(!f)
break;
std::cout << dd.DeviceString;
std::cout << "rn";
}
}
相关文章:
- 我们如何跳过帧,计算帧数并使用视频阅读器获取当前帧
- 检查HTML 5视频元素是否正在获取帧
- 如何在AMD视频卡上获得GPU负载百分比和GPU温度
- 在 c++ (Windows) 上获取视频卡名称
- 如何在Qt框架中从视频中逐个获取帧
- 如何使用C 中的FFMPEG获取视频fps
- 如何在OpenGL或Win32中获取图形卡模型名称
- 如何在 SDL2 中获取视频卡的所有支持分辨率
- 如果没有视频卡,谁会运行OpenGL着色器
- 如何验证视频卡驱动程序证书
- DirectX 11 获取图形卡的说明
- 如何在给定设备实例ID的情况下可靠快速地获取网卡的MAC地址
- 如何在C/C++中从给定的URL获取视频链接
- C++Directx 11多个视频卡
- While循环在计算着色器是崩溃我的视频卡驱动程序
- 如何在Qt应用程序中获取SD卡的总空间和已用空间
- 如何获取视频采集设备信息
- 当前渲染视频卡
- 获取视频的时长
- 获取视频经过的时间