Текущий архив: 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.47 MB
Время: 0.011 c