当前位置:首页 > Windows程序 > 正文

Windows系统下显卡检测

2021-03-26 Windows程序

由于实际项目中显卡制造商在一些细节上会有特别处理,所以很多程序也需要检测显卡,,并根据情况作处理。如何检测显卡信息呢?

参考1:

参考2:

这是两大独立显卡制造商给出的检测示例。

通过总结,可以归纳为如下几点:

1 通过EnumDisplayDevices函数来枚举出显示设备,获取显卡信息;

2 DISPLAY_DEVICE结构体中的DeviceString表示显卡设备型号字符串;

3 DISPLAY_DEVICE结构体中的DeviceID表示了显卡设备的具体型号参数,常见的如VendorID(VEN_后四位)和设备ID(DEV_后四位);

至此相关型号信息已经获得了。具体ID值含义需要参考制造商的定义,例如:

NVIDIA的Vender ID是0x10DE;ATI的Vendor ID是0x1002;Intel的Vendor ID是0x8086。

以下为ATI关于显卡检测的一个示例程序源码。

[cpp] view plaincopy

 

//-----------------------------------------------------------------------------  

// File: DeviceID.cpp  

// Copyright (c) 2006 ATI Technologies Inc. All rights reserved.  

//-----------------------------------------------------------------------------  

  

  

  

#include <windows.h>  

#include <stdio.h>  

  

int WINAPI WinMain(HINSTANCE hThisIns, HINSTANCE hLastIns, LPSTR lpszCmdLine, int nCmdShow){  

    char string[1024];  

  

    DISPLAY_DEVICE dev;  

    dev.cb = sizeof(DISPLAY_DEVICE);  

    int i = 0;  

    while (EnumDisplayDevices(NULL, i, &dev, 0)){  

        if (dev.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE){  

            char *str = string + sprintf(string, "%s\n\n", dev.DeviceString);  

  

            char *vendorID = strstr(dev.DeviceID, "VEN_");  

            char *deviceID = strstr(dev.DeviceID, "DEV_");  

  

            char *st = dev.DeviceID;  

            while ((st = strchr(st, ‘&‘)) != NULL){  

                *st = ‘\0‘;  

                st++;  

            }  

  

            if (vendorID) str += sprintf(str, "VendorID: 0x%s\n", vendorID + 4);  

            if (deviceID) str += sprintf(str, "DeviceID: 0x%s\n", deviceID + 4);  

  

            MessageBox(NULL, string, "Device", MB_OK | MB_ICONINFORMATION);  

            return 0;  

        }  

        i++;  

    }  

  

    MessageBox(NULL, "No primary device found", "Error", MB_OK | MB_ICONERROR);  

    return -1;  

}  

源代码

----------------------------------

//-----------------------------------------------------------------------------
// File: DeviceID.cpp
// Copyright (c) 2006 ATI Technologies Inc. All rights reserved.
//-----------------------------------------------------------------------------

#include <windows.h>
#include <stdio.h>

int WINAPI WinMain(HINSTANCE hThisIns, HINSTANCE hLastIns, LPSTR lpszCmdLine, int nCmdShow){
char string[1024];

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/67760.html