Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.11;
Скачать: CL | DM;

Вниз

Как получить информацию о температуре процессора   Найти похожие ветки 

 
Net_Angel ©   (2002-09-10 13:55) [0]

Как получить информацию о температуре процессора, оборотах кулера


 
ResTec   (2002-09-10 21:39) [1]

Вообще влоб эта задача не решается. И вот почему...
-1) данные возможности должна поддерживать материнка, а вернее чипсет установленный на ней, а материнка предоставить возможность считать данные с чипсета.
-2) если она (т.е. материнка) эти возможности и поддерживает,
то ВОПРОС как ими воспользоваться?
ОТВЕТ нужен оригинальный (т.е. от производителя мамки) драйвер (если угодно "интерфейс"), ну или ходя-бы адреса где материнка прячет эту информацию.
Я год назад занимался данной проблемацией, и кое что накопал.
Вот адресок программы которая может смотреть динамическую тех. информацию большинства ныне популярных мамок []. Посмотрев как она это делает думаю поймешь как вообще возможна реализация таких возможностей.

А вот исходник того как делал я. Сразу скажу, что это работает с VIA"вским чипсетом, и нужны еще два файла поставляемые с материнкой "Viahm.dll" и "Viahm.vxd". Это файлы от стандартной програмки "VIA Hardware Monitor" прилагаемой к мамке. Да и еще один знакомай пробовал на не VIA"вской мамке (VIA"вская мамка следует понимать как материнская плата с чипсетом от VIA) и говорит вроде работало (возможно у разных производителей подходы одни). И еще - данные читаются без проблем, но вот грабли. При считывании тепературы процессора выдается какая-то краказябра, поначалу я думал что это тем-пра в фаренгейтах, но это не так, куча эксперементов, преобразований данных не дали результата, а со скоростью вращения кулёров все нормально, всё кажет как пологается. Если кто разберется с температурой буду рад.
Ну думаю про все грабли пропел, а вот сам код.


 
ResTec   (2002-09-10 21:40) [2]

это интерфейс общения с DLL"ой, просто подключи юнит к проге.

unit RThmd;
{©2001 Studio ResTec®}

interface

uses windows;

var
VIAHMClose : function{(Val : DWORD)} : DWORD; stdcall;
VIAHMGetFan1Divide : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetFan1Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetFan2Divide : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetFan2Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetTsens1Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetTsens2Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetV12Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetV25Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetV33Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetV5Reg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMGetVcoreReg : function(Val : PDWORD) : DWORD; stdcall;
VIAHMInit : function{(Val : DWORD)} : DWORD; stdcall;
VIAHMOpen : function{(Val : DWORD)} : DWORD; stdcall;
VIAHMSearchDevice : function(Val : PDWORD) : DWORD; stdcall;

function InitDLL(LibName : string): THandle;
procedure DeitDLL;

implementation

var
HM_DLL : THANDLE = 0;

function InitDLL(LibName : string): THandle;
begin
if (HM_DLL = 0) then begin
HM_DLL := LoadLibrary(PChar(LibName));
if (HM_DLL <> 0) then begin
@VIAHMClose := GetProcAddress(HM_DLL,"VIAHMClose" );
@VIAHMGetFan1Divide := GetProcAddress(HM_DLL,"VIAHMGetFan1Divide");
@VIAHMGetFan1Reg := GetProcAddress(HM_DLL,"VIAHMGetFan1Reg" );
@VIAHMGetFan2Divide := GetProcAddress(HM_DLL,"VIAHMGetFan2Divide");
@VIAHMGetFan2Reg := GetProcAddress(HM_DLL,"VIAHMGetFan2Reg" );
@VIAHMGetTsens1Reg := GetProcAddress(HM_DLL,"VIAHMGetTsens1Reg" );
@VIAHMGetTsens2Reg := GetProcAddress(HM_DLL,"VIAHMGetTsens2Reg" );
@VIAHMGetV12Reg := GetProcAddress(HM_DLL,"VIAHMGetV12Reg" );
@VIAHMGetV25Reg := GetProcAddress(HM_DLL,"VIAHMGetV25Reg" );
@VIAHMGetV33Reg := GetProcAddress(HM_DLL,"VIAHMGetV33Reg" );
@VIAHMGetV5Reg := GetProcAddress(HM_DLL,"VIAHMGetV5Reg" );
@VIAHMGetVcoreReg := GetProcAddress(HM_DLL,"VIAHMGetVcoreReg" );
@VIAHMInit := GetProcAddress(HM_DLL,"VIAHMInit" );
@VIAHMOpen := GetProcAddress(HM_DLL,"VIAHMOpen" );
@VIAHMSearchDevice := GetProcAddress(HM_DLL,"VIAHMSearchDevice" );
end;
end;
Result := HM_DLL;
end;

procedure DeitDLL;
begin
if (HM_DLL <> 0) then FreeLibrary(HM_DLL);
end;

initialization
finalization
if (HM_DLL <> 0) then FreeLibrary(HM_DLL);
end.


далее пример реализации


var
Form1: TForm1;
HDLL : THandle;

implementation

uses RThmd; // <<<<<<<<<<<<<< !!!!!!!!!!!!!!!

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject); // Load DLL
var // Инициализация DLL"ки
v : DWORD;
begin
HDLL := InitDLL("Viahm.dll");
if HDLL <> 0 then begin
if VIAHMOpen = 0 then begin
ShowMessage("Error!...Dll Not Initialize";
Exit;
end;
VIAHMInit;
end;
end;

procedure TForm1.Button2Click(Sender: TObject); // Close DLL
begin //Закрытие ДЛЛы
if HDLL <> 0 then VIAHMClose;
end;

procedure TForm1.Button3Click(Sender: TObject); // Read Values
var
v : DWORD;
begin
if HDLL <> 0 then begin
Label1.Caption := IntToStr(VIAHMGetFan1Reg(@v));
Label2.Caption := FormatFloat(######, 655535 / V );// Скорость первого кулёра

Label3.Caption := IntToStr(VIAHMGetFan2Reg(@v));
Label4.Caption := FormatFloat(######, 655535 / V );// Скорость второго кулёра
end;
end;



Если возникнут вопросы мыльте...



Страницы: 1 вся ветка

Текущий архив: 2002.11.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-33954
vixic
2002-11-01 11:56
2002.11.11
Добавление объектов!


3-33885
Alexxx9801
2002-10-21 15:45
2002.11.11
TClientDataSet и RefreshRecord


14-34199
Rouse_
2002-10-21 04:41
2002.11.11
Проблемы с почтовиком The BAT


14-34177
MBo
2002-10-21 12:55
2002.11.11
Длинный гудок на маме - что значит?


7-34276
Infinity2
2002-09-10 22:55
2002.11.11
Надо отследить изменения время в системе.