Главная » Delphi » Температура процессора на Delphi

Температура процессора на Delphi

температура Процессор Temperature Delphi CPU  delphi  Давно искал рабочий код для определения температуры процессора на Delphi. Многие предлагали копать в сторону WMI, но у меня ничего универсального не получалось.

В результате я просто в наглую обратился к производителям одной популярной софтинки Core Temp, с просьбой поделиться кодом определения температуры, так как их вариант для Delphi устарел и больше не работает. Через пару дней мне ответили и прислали рабочий компонент. Моей радости не было предела.

Я сразу переписал код, так как их вариант был консольным. Ну и как обычно делюсь полученными знаниями с вами.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Timer1: TTimer;
    Label3: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Label3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Data: CORE_TEMP_SHARED_DATA;
  Index: Cardinal;
  Degree: Char;
  Temp: Single;

implementation

{$R *.dfm}

function StringToOem(const Str: string): AnsiString;
begin
  Result := AnsiString(Str);
  if Length(Result) > 0 then CharToOemA(PAnsiChar(Result), PAnsiChar(Result));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Core, CPU  : Cardinal;
begin
  ListBox1.Items.BeginUpdate;
  try
    ListBox1.Clear;
    ListBox1.Items.Add('Core Temp shared memory reader');
    if fnGetCoreTempInfo(Data) then
      begin
        ListBox1.Items.Add('Processor  : ' + Data.sCPUName);
        ListBox1.Items.Add('Core(s)    : ' + IntToStr(Data.uiCoreCnt));
        ListBox1.Items.Add('CPU(s)     : ' + IntToStr(Data.uiCPUCnt));
        ListBox1.Items.Add('CPU speed  : ' + FloatToStrF(Data.fCPUSpeed, ffFixed, 7, 0)
        + ' MHz');
        ListBox1.Items.Add('FSB speed  : ' + FloatToStrF(Data.fFSBSpeed, ffFixed, 7, 0)
        + ' MHz');
        ListBox1.Items.Add('Multiplier : ' + FloatToStrF(Data.fMultipier, ffFixed, 7, 1));
        ListBox1.Items.Add('VID        : ' + FloatToStrF(Data.fVID, ffFixed, 7, 2) + ' V');
        if Data.ucFahrenheit then
          Degree := 'F'
          else
          Degree := 'C';
        for CPU:= 0 to Data.uiCPUCnt - 1 do
          begin
            for Core:= 0 to Data.uiCoreCnt - 1 do
              begin
                Index := (CPU * Data.uiCoreCnt) + Core;
                if Data.ucDeltaToTjMax then
                Temp := Data.uiTjMax[CPU] - Data.fTemp[Index]
                else
                Temp := Data.fTemp[Index];
                ListBox1.Items.Add('CPU #' + IntToStr(CPU) + ', Core #' + IntToStr(Core) + ':  ');
                ListBox1.Items.Add('Temperature = ' + FloatToStrF(Temp, ffFixed, 7, 0) + ' ' +
                Degree + '  ');
                ListBox1.Items.Add('Load = ' + IntToStr(Data.uiLoad[Index]) + ' %');
              end;
          end;
      end
      else
      begin
        ListBox1.Items.Add('Error: Core Temp''s shared memory could not be read');
        ListBox1.Items.Add('Reason: ' + StringToOem(SysErrorMessage(GetLastError)));
      end;
  except
  end;
  ListBox1.Items.EndUpdate;
end;

procedure TForm1.Label3Click(Sender: TObject);
begin
  ShellExecute (0,'open','https://geekelectronics.org/delphi/temperatura-processora-na-delphi.html','','',sw_show);
end;

end.

температура Процессор Temperature Delphi CPU  delphi    CPU_Temperature.rar (172,6 KiB, 1 709 hits)

Похожие записи
Индикатор загрузки процессора на Delphi...   Решил поделиться небольшим примером индикатора загрузки процессоров на Delphi. За основу взят компонент adCpuUsage. Думаю, что это дополнени...
Авторизация в статистике LiveInternet с помощью De... Вчера делал заказ. Нужно было написать программу на Delphi, которая с помощью INDY компонентов авторизируется на сайта LiveInternet и получает в Memo...
Arduino и датчик температуры и влажности DHT22... Получил на почте долгожданную посылку с новыми железяками для Arduino. Среди них был и цифровой датчик температуры и влажности DHT22. В этой статье я ...
Моя коллекция иконок У каждого программиста есть подобная коллекция иконок. Вот решил поделиться своей. Архив содержит 4308 файлов ICO размеров 16х16 и 32х32. ...
This entry was posted in Delphi and tagged , , , , . Bookmark the permalink.

4 комментария: Температура процессора на Delphi

  1. Сергей говорит:

    попробовал - вместо температуры получил:
    Core Temp's share momory could not be read

    • source говорит:

      да, я тоже столкнулся с подобным
      не на всех компьютерах отрабатывало как надо
      видимо, не под все проессоры был написан данный компонент

    • Александр говорит:

      Присоединяюсь, на Intel Core2Duo под 7-й форточкой данный код не пашет.

  2. Ivan говорит:

    Этот пример работает только если установить софтину Core Temp. Самостоятельно работать не будет. Так как просто читает данные из нее и все.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *