-
五月 8
有些软件,可以获得电脑的一些运行状态,比如温度,这个是大家比较关心的,早期的硬件普遍没有内置温度传感器,所以这些参数无法获得,但是目前很多硬件就内嵌了温度传感器,所以就可以方便的获得啦。
有个问题需要注意,不同厂商的硬件参数是不一样的,比如CPU有Intel和AMD,显卡有Nvidia和ATI还有Intel,所以,我们就没有一个统一的办法去处理,在分析了一些主流软件后,终于知道了获取方法,真是不容易呀
先说CPU,就拿最近2年的CPU来说吧,厂商已经内置了温度传感器,获取方法需要用汇编指令去读取,以intel为例,需要读取IA32_THERM_STATUS_MSR和IA32_TEMPERATURE_TARGET,具体代码google一下会有,当然,这还需要加载一个WinRing0.sys(64位系统要加载WinRing0x64.sys)驱动,才能读取汇编寄存器。这两个sys也可以搜索下载到。
关于显卡,这个老实说没办法,必须使用显卡驱动才能获得,Nvidia可以使用nvapi.dll(64位系统nvapi64.dll),该dll提供一个接口nvapi_QueryInterface,可以查询显卡所有的硬件信息,ATI显卡则需要使用atiadlxy.dll或者atiadlxx.dll,这两个dll根据不同的显卡型号会提供一个。这几个dll文件不仅可以获取温度,还能获取当前的GPU频率,缓存等信息
附录:Nvidia驱动dll的函数和ATI驱动dll的函数
NVIDIA:
NvAPI_GPU_GetThermalSettings
_NvAPI_GPU_GetFullName
NvAPI_EnumNvidiaDisplayHandle
NvAPI_GetPhysicalGPUsFromDisplay
NvAPI_EnumPhysicalGPUs
NvAPI_GPU_GetTachReading
NvAPI_GPU_GetAllClocks
NvAPI_GPU_GetPStates
NvAPI_GPU_GetUsages
NvAPI_GPU_GetCoolerSettings
NvAPI_GPU_SetCoolerLevels
NvAPI_GPU_GetMemoryInfo
NvAPI_GetDisplayDriverVersion
_NvAPI_GetInterfaceVersionString
NvAPI_GPU_GetPCIIdentifiers
ATI:
ADL_Main_Control_Create
ADL_Adapter_AdapterInfo_Get
ADL_Main_Control_Destroy
ADL_Adapter_NumberOfAdapters_Get
ADL_Adapter_ID_Get",
ADL_Display_AdapterID_Get
ADL_Adapter_Active_Get
ADL_Overdrive5_CurrentActivity_Get
ADL_Overdrive5_Temperature_Get
ADL_Overdrive5_FanSpeed_Get
ADL_Overdrive5_FanSpeedInfo_Get
ADL_Overdrive5_FanSpeedToDefault_Set
ADL_Overdrive5_FanSpeed_Set
主板温度和硬盘温度,这个就很简单了,WMI就可以读取,网上代码已经很多了。
先暂时告一段落,总之知道了方法也就好办多了
- 评论(0)
发表评论 TrackBack
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。