码迷,mamicode.com
首页 > Windows程序 > 详细

Windows系统下显卡检测

时间:2015-09-03 10:22:41      阅读:426      评论:0      收藏:0      [点我收藏+]

标签:

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关于显卡检测的一个示例程序源码。

 

[cpp] view plaincopy
 
  1. //-----------------------------------------------------------------------------  
  2. // File: DeviceID.cpp  
  3. // Copyright (c) 2006 ATI Technologies Inc. All rights reserved.  
  4. //-----------------------------------------------------------------------------  
  5.   
  6.   
  7.   
  8. #include <windows.h>  
  9. #include <stdio.h>  
  10.   
  11. int WINAPI WinMain(HINSTANCE hThisIns, HINSTANCE hLastIns, LPSTR lpszCmdLine, int nCmdShow){  
  12.     char string[1024];  
  13.   
  14.     DISPLAY_DEVICE dev;  
  15.     dev.cb = sizeof(DISPLAY_DEVICE);  
  16.     int i = 0;  
  17.     while (EnumDisplayDevices(NULL, i, &dev, 0)){  
  18.         if (dev.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE){  
  19.             char *str = string + sprintf(string, "%s\n\n", dev.DeviceString);  
  20.   
  21.             char *vendorID = strstr(dev.DeviceID, "VEN_");  
  22.             char *deviceID = strstr(dev.DeviceID, "DEV_");  
  23.   
  24.             char *st = dev.DeviceID;  
  25.             while ((st = strchr(st, ‘&‘)) != NULL){  
  26.                 *st = ‘\0‘;  
  27.                 st++;  
  28.             }  
  29.   
  30.             if (vendorID) str += sprintf(str, "VendorID: 0x%s\n", vendorID + 4);  
  31.             if (deviceID) str += sprintf(str, "DeviceID: 0x%s\n", deviceID + 4);  
  32.   
  33.             MessageBox(NULL, string, "Device", MB_OK | MB_ICONINFORMATION);  
  34.             return 0;  
  35.         }  
  36.         i++;  
  37.     }  
  38.   
  39.     MessageBox(NULL, "No primary device found", "Error", MB_OK | MB_ICONERROR);  
  40.     return -1;  
  41. }  

 

源代码

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

//-----------------------------------------------------------------------------
// 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;
}

Windows系统下显卡检测

标签:

原文地址:http://www.cnblogs.com/gamekk/p/4779937.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!