Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скорости, напряжения, температуры


ПЛОВ ©   (2005-10-17 16:30:00) 

Существуют ли какие-нибудь "общие" (API, ActiveX и т.п.) способы получить значение напряжения процессора, его температуры и скорости вращения вентиляторов на проце и шасси?
Если да, то подскажите, куда копать?


idx   (2005-10-17 19:48:00) [1]

http://forum.sources.ru/index.php?showtopic=116287


ПЛОВ   (2005-10-17 18:56:00) [2]

Выдает ошибку Privileged instruction


ПЛОВ   (2005-10-17 18:30:00) [3]

спасибо. все нашел. буду проверять.


idx   (2005-10-17 18:03:00) [4]

http://forum.sources.ru/index.php?showtopic=115758


ПЛОВ   (2005-10-17 17:57:00) [5]

Понятно... Уже нашел что это такое... А где взять Giveio.pas (.dcu)? Можно выслать на pro100max@mail.ru


idx   (2005-10-17 17:51:00) [6]

Это модуль для прямого доступа к  портам I/O


ПЛОВ   (2005-10-17 17:42:00) [7]

А что за Giveio?


ПЛОВ   (2005-10-17 17:41:00) [8]

Огромное спасибо, посмотрю.


idx   (2005-10-17 17:36:00) [9]

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Timer1: TTimer;
   Panel1: TPanel;
   Button1: TButton;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   lTemp: TLabel;
   lCooler: TLabel;
   lVfCore: TLabel;
   fCore: TLabel;
   Label4: TLabel;
   Label5: TLabel;
   Label6: TLabel;
   Label7: TLabel;
   Label8: TLabel;
   Label9: TLabel;
   lfn5: TLabel;
   lFp5: TLabel;
   lFn12: TLabel;
   lfp12: TLabel;
   lfc33: TLabel;
   lf33: TLabel;
   procedure Timer1Timer(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

Uses Giveio;

const
IntelBasePort:Integer = $290;

// Возвращает температуру материнской платы для "INTEL"!
Function Temperature:Integer;
begin
 OutPort(IntelBasePort+5,$27);
 Result:=(InPort(IntelBasePort+6));
end;

// Получение текущего значение оборотов вентилятора "INTEL"
Function GetCoolerSpeed(Cooler:Byte):Integer;
Var
  CurrentCounter:Integer;
  CurrentDiv:Integer;
Begin
  If (Cooler < 1) or (Cooler > 3) then Result:=0;
  OutPort(IntelBasePort+5,$28);
  CurrentCounter:=InPort(IntelBasePort+6);
  If  CurrentCounter = $ff Then
  Begin
   Result:=0;
   Exit;
  end;
  OutPort(IntelBasePort+5,$47);
//  CurrentDiv:=InPort(IntelBasePort+6);
  case Cooler of
   1: CurrentDiv:=1 shl ( (InPort(IntelBasePort+6) shr 4) and 3);
   2: CurrentDiv:=1 shl ( (InPort(IntelBasePort+6) shr 6) and 3);
   3: CurrentDiv:=2;
   end;
   Result:=1350000 div (CurrentCounter * CurrentDiv);
end;

Function GetVolt(OffsetReg:Integer):Real;
Var
 fV1,fV2:real;
begin
  fV1:=0;
  fV2:=0;
 Case OffsetReg of
  0:; // 20h
  1:; // 21h
  2:; // 22h
  3:  // 23h
     Begin
      fV1:=2.98;
      fV2:=5.0;
     end;
  4:  // 24h
     Begin
      fV1:=3.00;
      fV2:=12.0;
     end;
  5:  // 25h
     Begin
      fV1:=3.00;
      fV2:=-12.0;
     end;
  6:  // 26h
     Begin
      fV1:=3.50;
      fV2:=-5.0;
     end;
 end;

 OutPort(IntelBasePort+5,OffsetReg);
 Result:=(0.016 * (InPort(IntelBasePort+6))- fV1+fV2);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var
fCore,Fn5,Fp5,Fn12,Fp12,Fc33,F33:real;
begin
lTemp.Caption:=IntToStr(Temperature);
lCooler.Caption:=IntToStr(GetCoolerSpeed(1));
fCore := GetVolt(0);
fn5   := GetVolt(1);
fp5   := GetVolt(2);
fn12  := GetVolt(3);
fp12  := GetVolt(4);
fc33  := GetVolt(5);
f33   := GetVolt(6);
lVfCore.Caption:=Format('%2.2f',[Fn5]);
lfn5.Caption:=Format('%2.2f',[fCore]);
lFp5.Caption:=Format('%2.2f',[fp5]);
lFn12.Caption:=Format('%2.2f',[fn12]);
lfp12.Caption:=Format('%2.2f',[fp12]);
lfc33.Caption:=Format('%2.2f',[Fc33]);
lf33.Caption:=Format('%2.2f',[f33]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 InitDriver;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoneDriver;
ExitProcess(0);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 Button1Click(Self);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Button1Click(Self);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Button1Click(Self);
end;

end.


ПЛОВ   (2005-10-17 17:11:00) [10]

Спасибо хоть за это... Еще бы что-то поточнее, ссылки хоть какие-нибудь, плиз...


Игорь Шевченко   (2005-10-17 17:05:00) [11]

В сторону WMI


Наверх

Титульная страница Поиск, карта сайта Написать письмо