Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.09.2013, 20:34
DigitalBrain DigitalBrain вне форума
Прохожий
 
Регистрация: 20.09.2013
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию получить показания датчиков температуры пк

Здравствуйте!
Сижу уже день терзая гугл, но абсолютно ничего работающего не нашел..Все что не пробовал с wmi не работает: или провайдера не существует или пустой список возвращает..
Как же все таки вытащить инфу о температуре компонентов пк? Кучи же подобного софта , казалось бы тривиальная задача, но на деле...
Вообще интересуют: HDD,System,CPU и GPU..
Вот этот код возвращает пустой список, пробовал на ноутбуках с разных эпох, результат тот же...Windows7/XP
Код:
 WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
  Root  := WMIServices.ExecQuery('Select * FROM Win32_TemperatureProbe','WQL', 0, nil);
  for I := 0 to Root.Count - 1 do
  begin
    Item := Root.ItemIndex(I);
      Writeln('Accuracy                        '+VarToStr(Item.Accuracy));
      Writeln('Availability                    '+VarToStr(Item.Availability));
      Writeln('Caption                         '+Item.Caption);
      Writeln('Config Manager Error Code       '+VarToStr(Item.ConfigManagerErrorCode));
      Writeln('Config Manager User Config      '+VarToStr(Item.ConfigManagerUserConfig));
      Writeln('Creation Class Name             '+VarToStr(Item.CreationClassName));
      Writeln('Current Reading                 '+VarToStr(Item.CurrentReading));
      Writeln('Description                     '+VarToStr(Item.Description));
      Writeln('Device ID                       '+VarToStr(Item.DeviceID));
      Writeln('Error Cleared                   '+VarToStr(Item.ErrorCleared ));
      Writeln('Error Description               '+VarToStr(Item.ErrorDescription));
      Writeln('Install Date                    '+VarToStr(Item.InstallDate));
      Writeln('Is Linear                       '+VarToStr(Item.IsLinear));
      Writeln('Last Error Code                 '+VarToStr(Item.LastErrorCode));
      Writeln('Lower Threshold Critical        '+VarToStr(Item.LowerThresholdCritical));
      Writeln('Lower Threshold Fatal           '+VarToStr(Item.LowerThresholdFatal));
      Writeln('Lower Threshold NonCritical     '+VarToStr(Item.LowerThresholdNonCritical));
      Writeln('Max Readable                    '+VarToStr(Item.MaxReadable));
      Writeln('Min Readable                    '+VarToStr(Item.MinReadable));
      Writeln('Name                            '+VarToStr(Item.Name));
      Writeln('Nominal Reading                 '+VarToStr(Item.NominalReading));
      Writeln('Normal Max                      '+VarToStr(Item.NormalMax));
      Writeln('Normal Min                      '+VarToStr(Item.NormalMin ));
      Writeln('PNP Device ID                   '+VarToStr(Item.PNPDeviceID));
      Writeln('Power Management Capabilities   '+VarToStr(Item.PowerManagementCapabilities));
      Writeln('Power Management Supported      '+VarToStr(Item.PowerManagementSupported));
      Writeln('Resolution                      '+VarToStr(Item.Resolution));
      Writeln('Status                          '+VarToStr(Item.Status));
      Writeln('Status Info                     '+VarToStr(Item.StatusInfo));
      Writeln('System Creation Class Name      '+VarToStr(Item.SystemCreationClassName));
      Writeln('System Name                     '+VarToStr(Item.SystemName));
      Writeln('Tolerance                       '+VarToStr(Item.Tolerance));
      Writeln('Upper Threshold Critical        '+VarToStr(Item.UpperThresholdCritical));
      Writeln('Upper Threshold Fatal           '+VarToStr(Item.UpperThresholdFatal));
      Writeln('Upper Threshold NonCritical     '+VarToStr(Item.UpperThresholdNonCritical));
      Writeln('');
  end;
end;
Ответить с цитированием
  #2  
Старый 25.09.2013, 21:56
DigitalBrain DigitalBrain вне форума
Прохожий
 
Регистрация: 20.09.2013
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
Печаль

Эх..видно совсем хардкорная тема оказалась=\

Пока настругал только функцию для чтения температуры HDD:
Код:
Function GetHDDTemperarure(DriveIndex:byte;out Temperature:SmallInt):Boolean;
Type
 TSmartData = Array [0..$20F] of Byte;
Var
 Op: TSmartData;
 H: Cardinal;
 br: DWORD;
begin
 Result:=false;
 try
  H:= CreateFile(PChar('\\.\PhysicalDrive'+IntToStr(DriveIndex)),$C0000000,3,nil, 3,0,0);
  DeviceIoControl(H,$0007C088,@Ip,$20,@Op,$210,br,nil);
  CloseHandle(H);
  Temperature:=Op[$A8]*$FF+Op[$A7];
  if(Temperature>-50) And (Temperature<200) then
  begin
   Result:=true;
  end;
 except
 end;
end;

заставить WMI хоть что то показать не удалось на 4 разных машинах...в TermalZone есть пара значений, но ни одной температуре они не соответствуют..да и они всегда константные(
Нарыл программу http://openhardwaremonitor.org/ , которая судя по доках может экспортировать свои данные в WMI...пока не удалось ее вкурить...
Куча бесплатного подобного софта, и ни одного примера исходного кода, неужели они напрямую по портам к контроллеру обращаются Оо за 10 лет как минимум должен был появится не один велосипед-библиотека для доступа к датчикам материнки, но глухо...
Ответить с цитированием
  #3  
Старый 25.09.2013, 22:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Глянь дизассемблером, как те программы работают.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 25.09.2013, 22:35
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от DigitalBrain
...Все что не пробовал с wmi не работает...
Стесняюсь спросить - а у вас сервис WMI в системе вообще запущен? Он по умолчанию отключен, да и в делфи, как я понял, нужно ещё ОСХ-компонент доустановить.
Ответить с цитированием
  #5  
Старый 26.09.2013, 16:33
DigitalBrain DigitalBrain вне форума
Прохожий
 
Регистрация: 20.09.2013
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Стесняюсь спросить - а у вас сервис WMI в системе вообще запущен? Он по умолчанию отключен, да и в делфи, как я понял, нужно ещё ОСХ-компонент доустановить.

Да...включен. WMI как бы работает, но провайдеры датчиков температуры и скорости кулеров например не работают..
Ну а библиотека типов для работы с wmi конечно импортирована, да и тестил я для чистоты эксперимента чужим ехе для просмотра wmi
Вложения
Тип файла: zip GetHardwareInfo_Exe.zip (14.6 Кбайт, 89 просмотров)
Ответить с цитированием
  #6  
Старый 25.09.2013, 22:35
DigitalBrain DigitalBrain вне форума
Прохожий
 
Регистрация: 20.09.2013
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Глянь дизассемблером, как те программы работают.
К сожалению, я не такой джедай с ASMом под x86 чтоб осилить реинжениринг...мой уровень там- пару функций аля хеловорд..
Да и кажись исходик OpenHardwareMonitor как бы нашел...но блин опять же не мои родные языки..но уж лучше чем читать тонну asmа..
https://code.google.com/p/open-hardw.../ATI/ATIGPU.cs
Ответить с цитированием
  #7  
Старый 26.09.2013, 10:07
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

DigitalBrain, - вот нашёл на просторах интернета, у меня работает.
Показыват температуру Проца и матери.
t_sensor.zip
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #8  
Старый 26.09.2013, 16:26
DigitalBrain DigitalBrain вне форума
Прохожий
 
Регистрация: 20.09.2013
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от SCrat.ORS
DigitalBrain, - вот нашёл на просторах интернета, у меня работает.
Показыват температуру Проца и матери.
Вложение 4085

фиг там...ну у меня выбивает исключение EPrivilege: Privileged instruction от имени админа..что на win7 64bit что на XP 32bit...результат тот же..(
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter