2013-04-09 51 views
3

我想获得nVidia显卡的驱动程序版本。 因此,我使用WMI并从“Win32_VideoController”类的“DriverVersion”对象中获取数据。 但它就像“9.18.13.1106”(文件版本),我想要的是像“311.06”(treiber版本)。 我在哪里可以得到这些信息? 如果在WMI上是不可能的,我想知道其他方式来获取它。 谢谢。来自WMI的nVidia驱动版本不是我想要的

+0

注册表显示你想要什么(没有NVidia驱动程序存在检查我自己) – 2013-04-09 02:11:43

回答

1

您可以使用nVidia的Tesla Deployment Kit的NVML做到这一点。您可以检索内部驱动版本(一个你见惯了的nVidia驱动),像这样的代码:

#include <iostream> 
#include <string> 
#include <stdlib.h> 
#include <nvml.h> 
#include <windows.h> 

namespace { 
typedef nvmlReturn_t (*init)(); 
typedef nvmlReturn_t (*shutdown)(); 
typedef nvmlReturn_t (*get_version)(char *, unsigned); 

class NVML { 
    init nvmlInit; 
    shutdown nvmlShutdown; 
    get_version nvmlGetDriverVersion; 

    std::string find_dll() { 
     std::string loc(getenv("ProgramW6432")); 
     loc += "\\Nvidia Corporation\\nvsmi\\nvml.dll"; 
     return loc; 
    } 

public:  
    NVML() { 
     HMODULE lib = LoadLibrary(find_dll().c_str()); 
     nvmlInit = (init)GetProcAddress(lib, "nvmlInit"); 
     nvmlShutdown = (shutdown)GetProcAddress(lib, "nvmlShutdown"); 
     nvmlGetDriverVersion = (get_version)GetProcAddress(lib, "nvmlSystemGetDriverVersion"); 

     if (NVML_SUCCESS != nvmlInit()) 
      throw(std::runtime_error("Unable to initialize NVML")); 
    } 

    std::string get_ver() { 
     char buffer[81]; 
     nvmlGetDriverVersion(buffer, sizeof(buffer)); 
     return std::string(buffer); 
    } 

    ~NVML() { 
     if (NVML_SUCCESS != nvmlShutdown()) 
      throw(std::runtime_error("Unable to shut down NVML")); 
    } 
}; 
} 

int main() { 
    std::cout << "nVidia Driver version: " << NVML().get_ver(); 
} 

需要注意的是,如果你纯粹是为了自己使用的机器,其中在写这你可以自由地编辑PATH,你可以简化这一点。大多数代码处理的事实是,它使用NVML.DLL,它位于通常不在路径中的目录中,因此代码动态加载,并使用GetProcAddress来查找我们需要使用的函数。在这种情况下,我们只使用了三个函数,所以它不是很难处理,但它仍然大大增加了代码的长度。

如果我们能忽略所有的废话,真正的代码将刚出来的东西这个一般顺序:

nvmlInit(); 
nvmlSystemGetDriverVersion(result, sizeof(result)); 
std::cout << result; 
nvmlShutdown(); 

总之,构建它,你需要一个命令行类似:

cl -Ic:\tdk\nvml\include nv_driver_version.cpp 

...假设您已经在c:\tdk上安装了Tesla Deployment Kit。

无论如何,是的,我已经测试过,至少在某种程度上。在我的桌面上打印出来:

nVidia Driver version: 314.22 

...这与我所安装的相符。

+1

我真的很感谢你:) – mayTree 2013-04-09 05:59:55

+0

这不适用于32位应用程序(Windows)。 – 2016-09-01 13:07:56

相关问题