OpenHardwareMonitor.h头文件
时间: 2023-07-19 15:36:18 浏览: 50
以下是OpenHardwareMonitor.h头文件的示例代码,你可以将它保存为OpenHardwareMonitor.h文件,然后在你的VC2010项目中引用它:
```c++
#pragma once
#include <Windows.h>
#include <vector>
#include <string>
namespace OHM
{
enum class SensorType
{
Voltage,
Clock,
Temperature,
Load,
Fan,
Flow,
Control,
Level,
Factor,
Power,
Data,
SmallData,
Throughput,
None
};
enum class HardwareType
{
Mainboard,
SuperIO,
CPU,
RAM,
GpuNvidia,
GpuAti,
TBalancer,
Heatmaster,
HDD,
SSD,
Heatcore,
Generic,
None
};
struct Sensor
{
std::string Name;
std::string Identifier;
float Value;
SensorType SensorType;
float Min;
float Max;
float DefaultMin;
float DefaultMax;
Sensor(const std::string& name, const std::string& identifier, float value, SensorType sensorType, float min, float max, float defaultMin, float defaultMax)
: Name(name), Identifier(identifier), Value(value), SensorType(sensorType), Min(min), Max(max), DefaultMin(defaultMin), DefaultMax(defaultMax)
{
}
};
struct Hardware
{
std::string Name;
std::string Identifier;
HardwareType HardwareType;
std::vector<Sensor*> Sensors;
Hardware(const std::string& name, const std::string& identifier, HardwareType hardwareType)
: Name(name), Identifier(identifier), HardwareType(hardwareType)
{
}
~Hardware()
{
for (Sensor* sensor : Sensors)
{
delete sensor;
}
Sensors.clear();
}
void Update()
{
for (Sensor* sensor : Sensors)
{
if (sensor)
{
float value;
if (GetSensorValue(Identifier.c_str(), sensor->Identifier.c_str(), &value))
{
sensor->Value = value;
}
}
}
}
};
class OpenHardwareMonitor
{
public:
OpenHardwareMonitor()
{
LoadLib();
Init();
}
~OpenHardwareMonitor()
{
Close();
UnloadLib();
}
bool IsValid() const
{
return m_IsValid;
}
std::vector<Hardware*> GetHardware() const
{
std::vector<Hardware*> hardware;
if (m_GetHardware)
{
int count = m_GetHardware(nullptr, 0);
if (count > 0)
{
OHM::Hardware** hw = new OHM::Hardware*[count];
m_GetHardware(hw, count);
for (int i = 0; i < count; i++)
{
hardware.push_back(hw[i]);
}
delete[] hw;
}
}
return hardware;
}
private:
bool LoadLib()
{
m_Lib = LoadLibraryA("OpenHardwareMonitorLib.dll");
if (m_Lib)
{
m_Init = (bool(*)())GetProcAddress(m_Lib, "OpenHardwareMonitor_Initialize");
m_Close = (void(*)())GetProcAddress(m_Lib, "OpenHardwareMonitor_Close");
m_GetHardware = (int(*)(OHM::Hardware**, int))GetProcAddress(m_Lib, "OpenHardwareMonitor_GetHardware");
m_GetSensorValue = (bool(*)(const char*, const char*, float*))GetProcAddress(m_Lib, "OpenHardwareMonitor_GetSensorValue");
return true;
}
return false;
}
void UnloadLib()
{
if (m_Lib)
{
FreeLibrary(m_Lib);
m_Lib = nullptr;
}
}
bool Init()
{
if (m_Init)
{
m_IsValid = m_Init();
}
return m_IsValid;
}
void Close()
{
if (m_Close)
{
m_Close();
}
}
bool GetSensorValue(const char* hardware, const char* sensor, float* value) const
{
if (m_GetSensorValue)
{
return m_GetSensorValue(hardware, sensor, value);
}
return false;
}
private:
HMODULE m_Lib = nullptr;
bool m_IsValid = false;
bool(*m_Init)() = nullptr;
void(*m_Close)() = nullptr;
int(*m_GetHardware)(OHM::Hardware**, int) = nullptr;
bool(*m_GetSensorValue)(const char*, const char*, float*) = nullptr;
};
}
```
需要注意的是,使用Open Hardware Monitor需要将它的DLL文件放到可执行文件所在目录下。在VC2010中,可以将它的DLL文件复制到项目目录下,或者将它的路径添加到系统环境变量中。