21xrx.com
2024-12-22 23:45:24 Sunday
登录
文章检索 我的文章 写文章
C++读取显卡型号和显存大小
2023-07-05 02:49:59 深夜i     --     --
C++ 读取 显卡型号 显存大小

在编写计算机图形学和游戏开发软件时,经常需要获取计算机的显卡型号和显存大小以便进行相应的优化和适配。C++语言提供了一种简单的方法来获取这些信息。

首先,需要包含Windows.h头文件,该文件中提供了许多系统级别的函数和宏定义。其次,可以使用EnumDisplayDevices函数来获取系统中的所有显示设备(包括多个显示器),并且可以获取设备的名称、标识符和状态信息。

一般情况下,显存大小可以通过DirectX或OpenGL的API函数来进行查询。但是如果不想使用其他库或API,则可以使用SetupAPI库提供的一些函数来实现。

具体来说,需要通过SetupDiGetClassDevs函数获取系统中所有显示适配器的设备信息。使用SetupDiEnumDeviceInfo函数获取设备的属性信息,其中属性包括硬件标识符和设备实例ID等。然后可以使用SetupDiGetDeviceRegistryProperty函数来获取设备的属性值,例如显存大小等信息。

最后,使用SetupDiDestroyDeviceInfoList函数销毁设备信息列表以释放内存。以下是一个简单的C++代码示例,可以获取显示设备型号和显存大小:


#include <Windows.h>

#include <SetupAPI.h>

#include <iostream>

#pragma comment(lib, "SetupAPI.lib")

int main(void)

{

  HDEVINFO hDevInfo;

  SP_DEVICE_INTERFACE_DATA devInfoData = { 0 };

  SP_DEVINFO_DATA devInfo = { 0 };

  DWORD dwType;

  TCHAR szData[1024]; // 显卡型号和显存大小都不会超过1K

  // 获取所有显示适配器设备信息

  hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);

  if (hDevInfo == INVALID_HANDLE_VALUE)

    return 1;

  // 遍历所有设备信息,找到显示适配器

  for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &devInfo); i++)

  {

    // 获取设备实例ID

    if (!SetupDiGetDeviceInstanceId(hDevInfo, &devInfo, szData, sizeof(szData), NULL))

      continue;

    // 只处理显示适配器设备

    if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfo, SPDRP_CLASSGUID, &dwType, (BYTE*)szData, sizeof(szData), NULL) ||

      _tcsicmp(szData, _T("{4d36e968-e325-11ce-bfc1-08002be10318}")) != 0)

      continue;

    // 获取Display Name属性值作为显卡型号

    if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfo, SPDRP_DISPLAYNAME, &dwType, (BYTE*)szData, sizeof(szData), NULL))

      std::wcout << L"显卡型号:" << szData << std::endl;

    // 获取HardwareID属性值作为显存大小

    if (SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfo, SPDRP_HARDWAREID, &dwType, (BYTE*)szData, sizeof(szData), NULL))

    {

      TCHAR* pMem = _tcsstr(szData, _T("RAM"));

      if (pMem)

      {

        pMem--;

        while (*pMem != _T('\\') && pMem > szData) pMem--;

        std::wcout << L"显存大小:" << pMem + 1 << std::endl;

      }

    }

  }

  // 销毁设备信息列表

  SetupDiDestroyDeviceInfoList(hDevInfo);

  return 0;

}

总的来说,使用C++获取显卡型号和显存大小是一件相对简单的事情。有些时候,这种方法比直接使用API函数还要可靠,因为API函数的返回值很容易出现错误。并且,通过这种方法获取设备信息,可以方便地集成到自己的应用程序中,而不需要依赖其他库和外部程序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章