我想获得nVidia显卡的驱动程序版本。 所以我使用WMI并从“Win32_VideoController”类的“DriverVersion”对象获取数据。 但它就像“9.18.13.1106”(文件版本),我想要的是像“311.06”(treiber版本)。 我在哪里可以获得这些信息? 如果WMI不可能,我想知道其他方法。 感谢。
答案 0 :(得分: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部署工具包。
无论如何,是的,我至少在一定程度上对此进行了测试。在我的桌面上打印出来:
nVidia Driver version: 314.22
...与我安装的相匹配。