标签:
http://blog.csdn.net/cnjet/article/details/7827827
由于实际项目中显卡制造商在一些细节上会有特别处理,所以很多程序也需要检测显卡,并根据情况作处理。如何检测显卡信息呢?
参考1:http://www.nvidia.com/object/device_ids.html
参考2:http://developer.amd.com/download/pc_vendor_id/pages/default.aspx
这是两大独立显卡制造商给出的检测示例。
通过总结,可以归纳为如下几点:
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关于显卡检测的一个示例程序源码。
源代码
----------------------------------
//-----------------------------------------------------------------------------
// 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;
}
标签:
原文地址:http://www.cnblogs.com/gamekk/p/4779937.html