读取Nvidia驱动版本号

2024-09-03 10:58
文章标签 读取 驱动 版本号 nvidia

本文主要是介绍读取Nvidia驱动版本号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Solution 1
读取注册表信息,不可取。很多电脑的注册表信息丢失不全。
Solution 2
通过dxgi读取显卡版本号。在台式机上正常,双显卡的笔记本电脑端,由于默认的显卡为核显,所以读取的为核显版本号。
Solution 3
通过调用命令行管道,执行Nvidia Driver目录下的exe,截取返回信息中的版本号

#include <string>
#include "Windows.h"#include <QDebug>

字符转换

//将string转换成wstring
std::wstring string2wstring(std::string str)
{std::wstring result;//获取缓冲区大小,并申请空间,缓冲区大小按字符计算int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);TCHAR* buffer = new TCHAR[len + 1];//多字节编码转换成宽字节编码MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);buffer[len] = '\0';             //添加字符串结尾//删除缓冲区并返回值result.append(buffer);delete[] buffer;return result;
}//将wstring转换成string
std::string wstring2string(std::wstring wstr)
{std::string result;//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);char* buffer = new char[len + 1];//宽字节编码转换成多字节编码WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);buffer[len] = '\0';//删除缓冲区并返回值result.append(buffer);delete[] buffer;return result;
}

管道命令

std::wstring ExeCmd(std::wstring pszCmd)
{// 创建匿名管道SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};HANDLE hRead, hWrite;if (!CreatePipe(&hRead, &hWrite, &sa, 0)){return TEXT(" ");}// 设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWriteSTARTUPINFO si = {sizeof(STARTUPINFO)};GetStartupInfo(&si);si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;si.wShowWindow = SW_HIDE;si.hStdError = hWrite;si.hStdOutput = hWrite;// 启动命令行PROCESS_INFORMATION pi;if (!CreateProcess(NULL, (LPWSTR)pszCmd.c_str(), NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)){return TEXT("Cannot create process");}// 立即关闭hWriteCloseHandle(hWrite);// 读取命令行返回值std::string strRetTmp;char buff[1024] = {0};DWORD dwRead = 0;strRetTmp = buff;while (ReadFile(hRead, buff, 1024, &dwRead, NULL)){strRetTmp += buff;}CloseHandle(hRead);LPCSTR pszSrc = strRetTmp.c_str();int nLen = MultiByteToWideChar(CP_ACP, 0, buff, -1, NULL, 0);if (nLen == 0)return std::wstring(L"");wchar_t* pwszDst = new wchar_t[nLen];if (!pwszDst)return std::wstring(L"");MultiByteToWideChar(CP_ACP, 0, pszSrc, -1, pwszDst, nLen);std::wstring strRet(pwszDst);delete[] pwszDst;pwszDst = NULL;return strRet;
}

测试部分

std::wstring cmdstr = L"C:/Program Files/NVIDIA Corporation/NVSMI/nvidia-smi.exe";std::wstring resultwstr =  ExeCmd(cmdstr);std::string resultstr = wstring2string(resultwstr);std::string driverVersionInfo = "Driver Version:";int VersionStartLocation = resultstr.find(driverVersionInfo) + driverVersionInfo.size() + 1;std::string versionNumber = resultstr.substr(VersionStartLocation,6);qDebug() << QString::fromStdString(versionNumber);

正常来说显卡驱动都安装在默认位置。。。

这篇关于读取Nvidia驱动版本号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132775

相关文章

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Python读取TIF文件的两种方法实现

《Python读取TIF文件的两种方法实现》本文主要介绍了Python读取TIF文件的两种方法实现,包括使用tifffile库和Pillow库逐帧读取TIFF文件,具有一定的参考价值,感兴趣的可以了解... 目录方法 1:使用 tifffile 逐帧读取安装 tifffile:逐帧读取代码:方法 2:使用

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

下载/保存/读取 文件,并转成流输出

最近对文件的操作又熟悉了下;现在记载下来:学习在于 坚持!!!不以细小而不为。 实现的是:文件的下载、文件的保存到SD卡、文件的读取输出String 类型、最后是文件转换成流输出;一整套够用了; 重点: 1:   操作网络要记得开线程; 2:更新网络获取的数据 切记用Handler机制; 3:注意代码的可读性(这里面只是保存到SD卡,在项目中切记要对SD卡的有无做判断,然后再获取路径!)

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的