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

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

Получить температуру процессора [Win2k, WinXP]


Страницы:   1 2

DelphiN! ©   (2004-12-22 13:49:00) 

Народ не поделитесь ф-иями получения температуры датчиков процессора.

Также буду благодарен за ф-ии получения температуры видеокарт GForceFX 5200 и хардов Seagate Barakuda 160GB

У меня есть код выдирания температуры датчиков процессора из программы MBM5 из Mapping файлов(это программа хранит информацию там)
Вот код, кому надо :

type
 TBusType = (btISA, btSMBus, btVIA686ABus, btDirectIO);
 TSMBType = (smtSMBIntel, smtSMBAMD, smtSMBALi, smtSMBNForce, smtSMBSIS);
 TSensorType = (stUnknown, stTemperature, stVoltage, stFan, stMhz,
   stPercentage);

 TSharedIndex = record
   iType: TSensorType; // type of sensor
   Count: integer; // number of sensor for that type
 end;

 TSharedSensor = record
   ssType: TSensorType; // type of sensor
   ssName: array[0..11] of AnsiChar; // name of sensor
   sspadding1: array[0..2] of Char; // padding of 3 byte
   ssCurrent: Double; // current value
   ssLow: Double; // lowest readout
   ssHigh: Double; // highest readout
   ssCount: LongInt; // total number of readout
   sspadding2: array[0..3] of Char; // padding of 4 byte
   ssTotal: Extended; // total amout of all readouts
   sspadding3: array[0..5] of Char; // padding of 6 byte
   ssAlarm1: Double; // temp & fan: high alarm; voltage: % off;
   ssAlarm2: Double; // temp: low alarm
 end;

 TSharedInfo = record
   siSMB_Base: Word; // SMBus base address
   siSMB_Type: TBusType; // SMBus/Isa bus used to access chip
   siSMB_Code: TSMBType; // SMBus sub type, Intel, AMD or ALi
   siSMB_Addr: Byte; // Address of sensor chip on SMBus
   siSMB_Name: array[0..40] of AnsiChar; // Nice name for SMBus
   siISA_Base: Word; // ISA base address of sensor chip on ISA
   siChipType: Integer; // Chip nr, connects with Chipinfo.ini
   siVoltageSubType: Byte; // Subvoltage option selected
 end;

 TSharedData = record
   sdVersion: Double; // version number (example: 51090)
   sdIndex: array[0..9] of TSharedIndex; // Sensor index
   sdSensor: array[0..99] of TSharedSensor; // sensor info
   sdInfo: TSharedInfo; // misc. info
   sdStart: array[0..40] of AnsiChar; // start time
   sdCurrent: array[0..40] of AnsiChar; // current time
   sdPath: array[0..255] of AnsiChar; // MBM path
 end;

 PSharedData = ^TSharedData;

var  

 SharedIndex: TSharedIndex;
 SharedSensor: TSharedSensor;
 SharedInfo: TSharedInfo;
 SharedData: PSharedData;

var
 myHandle, i, TotalCount: Integer;
 S: string;
begin
 result := false;
 myHandle := OpenFileMapping(FILE_MAP_READ, False, '$M$B$M$5$S$D$');
 if myHandle = 0 then
   Exit;

 SharedData := MapViewOfFile(myHandle, FILE_MAP_READ, 0, 0, 0);
 with SharedData^ do
 begin
   Label1.Caption := FloatToStr(sdVersion);
   TotalCount := sdIndex[0].Count +
     sdIndex[1].Count +
     sdIndex[2].Count +
     sdIndex[3].Count +
     sdIndex[4].Count;
   DataGrid.RowCount := TotalCount + 1;
   for i := 0 to TotalCount - 1 do
   begin
     DataGrid.Cells[0, i + 1] := IntToStr(i);
     with sdSensor[i] do
     begin
       case ssType of
         stUnknown: S := 'unknown';
         stTemperature: S := 'temperature';
         stVoltage: S := 'voltage';
         stFan: S := 'fanspeed';
         stMhz: S := 'clockspeed';
         stPercentage: S := 'percentage';
       end;
       DataGrid.Cells[1, i + 1] := S;
       DataGrid.Cells[2, i + 1] := ssName;
       DataGrid.Cells[3, i + 1] := Format('%.7g', [ssCurrent]);
       DataGrid.Cells[4, i + 1] := Format('%.7g', [ssLow]);
       DataGrid.Cells[5, i + 1] := Format('%.7g', [ssHigh]);
       DataGrid.Cells[6, i + 1] := Format('%.7g', [ssAlarm1]);
       DataGrid.Cells[7, i + 1] := Format('%.7g', [ssAlarm2]);
       DataGrid.Cells[8, i + 1] := IntToStr(ssCount);
     end;
   end;
 end;

Однако мне нужно получить температуры, без дополнительных программ

Заранее благодарен !


DelphiN!   (2004-12-28 06:43:00) [21]

Ну и всеже вопрос остается открытым, выскажите пожалуйста свои рекомендации ... Программа MBM5 как-то же определяет эту температуру(может даже и не точно, но все-же определяет ...)


DelphiN!   (2004-12-24 10:46:00) [22]

Вот нашел, http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/mastering/wmi.htm#054
Но на моем AMD Athlon неудается получить температуру, говорят, что данный прием работает только на Intel-овских процессорах.

А как получить информацию с датчиков на AMD Athlon ???


DelphiN!   (2004-12-24 06:02:00) [23]


>  [3] dimaxx ©   (23.12.04 22:07)


Подкинь ссылочку ... Я нашел структуру, которую можно получить о процессоре (в WMI), но температуры датчиков там не видел.


dimaxx   (2004-12-23 22:07:00) [24]

Через WMI можно получить доступ ко всем датчикам (вращения, тем-ры), прочитать идентификаторы устройств и т.п. Вот тока грамотного порта на Паскаль с примерами я так и не нашел.


DelphiN!   (2004-12-23 06:59:00) [25]

Вот что я нашел в MSDN, в разделе WMI про процессор : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_processor.asp

Но там температуры я не нашел ...


dimaxx   (2004-12-22 23:30:00) [26]

MSDN, раздел по WMI.


Страницы:   1 2

Наверх

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