Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
ПЛОВ ©   (2005-10-17 16:30) [0]

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


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

В сторону WMI


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

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


 
idx ©   (2005-10-17 17:36) [3]

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:41) [4]

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


 
ПЛОВ ©   (2005-10-17 17:42) [5]

А что за Giveio?


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

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


 
ПЛОВ ©   (2005-10-17 17:57) [7]

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


 
idx ©   (2005-10-17 18:03) [8]

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


 
ПЛОВ ©   (2005-10-17 18:30) [9]

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


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

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


 
idx ©   (2005-10-17 19:48) [11]

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



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

Форум: "WinAPI";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
1-1132585085
Officeman
2005-11-21 17:58
2005.12.18
ГЛЮКИ


2-1133723656
De1uxe
2005-12-04 22:14
2005.12.18
Компонент для деления изображения на ленты


5-1117163646
Rep
2005-05-27 07:14
2005.12.18
Обработка клавиши VK_UP(DOWN) потомком TCustomControl


8-1121170462
nstur
2005-07-12 16:14
2005.12.18
Выполнить Stretch jpg файла


14-1132835209
ArtemESC
2005-11-24 15:26
2005.12.18
Потерял статью...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский