Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   OPENHARDWAREMONITOR mit WMI (https://www.delphipraxis.net/181868-openhardwaremonitor-mit-wmi.html)

hathor 14. Sep 2014 00:16

OPENHARDWAREMONITOR mit WMI
 
Liste der Anhänge anzeigen (Anzahl: 2)
Der OPENHARDWAREMONITOR mit WMI-Server stellt die Daten für weitere Verwendung zur Verfügung.
http://openhardwaremonitor.org/

Leider enthält er einige kleine Fehler, z.B. einige Bezeichnungen sind falsch...
Die Variable OHM : Boolean; hat in dieser DEMO keine Bedeutung.

Delphi-Quellcode:
unit Unit2; //2ß140914

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ActiveX, ComObj, Vcl.OleAuto;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  OHM          : Boolean;
const
  WbemUser =''; WbemPassword =''; WbemComputer ='localhost'; wbemFlagForwardOnly = $00000020;

implementation

{$R *.dfm}

procedure MM(s:string); begin Form2.Memo1.Lines.Add(s); end;

procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;

procedure GetSensorInfo;
var
  FSWbemLocator, FWMIService, FWbemObjectSet, FWbemObject  : OLEVariant;
  oEnum : IEnumvariant; iValue : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  :=
  FSWbemLocator.ConnectServer(WbemComputer, 'root\OpenHardwareMonitor', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Sensor','WQL',wbemFlagForwardOnly);
  oEnum        := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    MM(Format(' Identifier   %s',[String(FWbemObject.Identifier)]));// String
    MM(Format(' Index        %d',[Integer(FWbemObject.Index)]));// Sint32
    MM(Format(' InstanceId   %s',[String(FWbemObject.InstanceId)]));// String
    MM(Format(' Max          %n',[Double(FWbemObject.Max)]));// Real32
    MM(Format(' Min          %n',[Double(FWbemObject.Min)]));// Real32
    MM(Format(' Name         %s',[String(FWbemObject.Name)]));// String
    MM(Format(' Parent       %s',[String(FWbemObject.Parent)]));// String
    MM(Format(' ProcessId    %s',[String(FWbemObject.ProcessId)]));// String
    MM(Format(' SensorType   %s',[String(FWbemObject.SensorType)]));// String
    MM(Format(' Value        %n',[Double(FWbemObject.Value)]));// Real32
    MM('----------------------------------------------------------------------');
  end;
    FWbemObject:=Unassigned;
end;

procedure GetSensorCPUTEMP;
var
  FSWbemLocator, FWMIService, FWbemObjectSet, FWbemObject  : OLEVariant;
  oEnum : IEnumvariant; iValue : LongWord;
begin;
  OHM:= false;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  := FSWbemLocator.ConnectServer(WbemComputer, 'root\OpenHardwareMonitor', WbemUser, WbemPassword);
 FWbemObjectSet:=
 FWMIService.ExecQuery('SELECT * FROM Sensor WHERE Name LIKE "%CPU %" AND SensorType = "Temperature"','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    MM(Format(' Name:        %s',[String(FWbemObject.Name)]));// String
    MM(Format(' SensorType   %s',[String(FWbemObject.SensorType)]));// String
    MM(Format(' Value:       %n',[Double(FWbemObject.Value)]));// Real32
    MM('');
  end;
    OHM:= true;
    FWbemObject:=Unassigned;
end;

procedure GetSensorCPULOAD;
var
  FSWbemLocator, FWMIService, FWbemObjectSet, FWbemObject  : OLEVariant;
  oEnum : IEnumvariant; iValue : LongWord;
begin;
  OHM:= false;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  := FSWbemLocator.ConnectServer(WbemComputer, 'root\OpenHardwareMonitor', WbemUser, WbemPassword);
 FWbemObjectSet:=
 FWMIService.ExecQuery('SELECT * FROM Sensor WHERE Name LIKE "%CPU %" AND SensorType = "Load"','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    MM(Format(' Name:        %s',[String(FWbemObject.Name)]));// String
    MM(Format(' SensorType   %s',[String(FWbemObject.SensorType)]));// String
    MM(Format(' Value:       %n',[Double(FWbemObject.Value)]));// Real32
    MM('');
  end;
    OHM:= true;
    FWbemObject:=Unassigned;
end;

procedure GetSensorHDD;
var
  FSWbemLocator, FWMIService, FWbemObjectSet, FWbemObject  : OLEVariant;
  oEnum : IEnumvariant; iValue : LongWord;
begin;
  OHM:= false;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  :=
  FSWbemLocator.ConnectServer(WbemComputer, 'root\OpenHardwareMonitor', WbemUser, WbemPassword);
  FWbemObjectSet:=
  FWMIService.ExecQuery('SELECT * FROM Sensor WHERE Name = "Temperature" AND SensorType = "Temperature"','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    MM(Format(' Name:        %s',[String(FWbemObject.Name)]));// String
    MM(Format(' SensorType   %s',[String(FWbemObject.SensorType)]));// String
    MM(Format(' Value:       %n',[Double(FWbemObject.Value)]));// Real32
  end;
    OHM:= true;
    FWbemObject:=Unassigned;
end;

procedure GetSensorGPU;
var
  FSWbemLocator, FWMIService, FWbemObjectSet, FWbemObject  : OLEVariant;
  oEnum        : IEnumvariant; iValue       : LongWord;
begin;
  OHM:= false;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService  :=
  FSWbemLocator.ConnectServer(WbemComputer, 'root\OpenHardwareMonitor', WbemUser, WbemPassword);
 FWbemObjectSet:=
// FWMIService.ExecQuery('SELECT * FROM Sensor WHERE Name LIKE "%GPU Core%" AND SensorType = "Temperature"','WQL',wbemFlagForwardOnly);
// FWMIService.ExecQuery('SELECT * FROM Sensor WHERE Name LIKE "%GPU %" AND SensorType = "Temperature"','WQL',wbemFlagForwardOnly);
 FWMIService.ExecQuery('SELECT * FROM Sensor WHERE Name LIKE "%GPU %"','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    MM(Format(' Name:        %s',[String(FWbemObject.Name)]));// String
    MM(Format(' SensorType   %s',[String(FWbemObject.SensorType)]));// String
    MM(Format(' Value:       %n',[Double(FWbemObject.Value)]));// Real32
    MM('');
  end;
    OHM:= true;
    FWbemObject:=Unassigned;
end;

procedure TForm2.Button2Click(Sender: TObject); //HDD
begin Memo1.Clear;
  GetSensorHDD;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin Memo1.Clear;
  GetSensorInfo;
end;

procedure TForm2.Button4Click(Sender: TObject);
begin Memo1.Clear;
   GetSensorGPU;
end;

procedure TForm2.Button5Click(Sender: TObject);
begin Memo1.Clear;
   GetSensorCPUTEMP;
end;

procedure TForm2.Button6Click(Sender: TObject);
begin Memo1.Clear;
   GetSensorCPULOAD;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
Form2.Height:= Screen.Height-20;
Memo1.Height:= Screen.Height-80;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
Application.Title := 'OHM-2014';
  GetSensorInfo;
end;

end.
Tags:
CPU, GPU, HDD Temperaturen und sonstiges
Temperaturen lesen (CPU,HDD...)

hathor 14. Sep 2014 00:19

AW: OPENHARDWAREMONITOR mit WMI
 
Zitat:
The Open Hardware Monitor is a free open source software that monitors temperature sensors, fan speeds, voltages, load and clock speeds of a computer.
The Open Hardware Monitor supports most hardware monitoring chips found on todays mainboards. The CPU temperature can be monitored by reading the core temperature sensors of Intel and AMD processors. The sensors of ATI and Nvidia video cards as well as SMART hard drive temperature can be displayed. The monitored values can be displayed in the main window, in a customizable desktop gadget, or in the system tray. The free Open Hardware Monitor software runs on 32-bit and 64-bit Microsoft Windows XP / Vista / 7 and any x86 based Linux operating systems without installation.

hathor 14. Sep 2014 10:07

AW: OPENHARDWAREMONITOR mit WMI
 
Paul Werelds hat 2012 die Entwicklung eingestellt.
Tim Koers, Michael Möller und andere entwickeln weiter:
Hier gibt es die Version 0.6.1:
https://github.com/timkoers/OpenHardwareMonitor

https://github.com/timkoers/OpenHard...ive/master.zip

hathor 20. Feb 2015 08:53

AW: OPENHARDWAREMONITOR mit WMI
 
Release version 0.7.1
Author: moel.mich = Michael Möller
Date: Dec 30, 2014
http://openhardwaremonitor.org/downloads/
http://openhardwaremonitor.org/files...0.7.1-beta.zip

ATS3788 6. Jun 2017 09:59

AW: OPENHARDWAREMONITOR mit WMI
 
Hallo
Betriebssystem Windows 10
Ich weiß das ist schon ein altes Thema.
Ich habe mich ein wenig in WMI eingearbeitet und weiß so ungefähr was das ist.
Ich möchte die Sensoren vom Mainboards auslesen und bin auf diesen Post gestoßen.
Ich habe das Problem das mein
Delphi-Quellcode:
oEnum.Next(1, FWbemObject, iValue)
ungleich null ist

also keine Werte ausgegeben werden.
Auch wenn ich Delphi unter Admin Rechte starte.

Hat jemand eine Idee ??

Ich habe erst die openhardwaremonitor-v0.8.0-beta benutzt
und nun die
openhardwaremonitor-v0.7.1-beta
Leider ohne Erfolg.

ATS3788 6. Jun 2017 10:11

AW: OPENHARDWAREMONITOR mit WMI
 
Ach ja bevor ich das vergesse
Auf
https://wmie.codeplex.com/
gibt es einen Super WMI Explorer,
der hat mir gut geholfen
und das ist auch toll zum Thema WMI
https://github.com/RRUZ/delphi-wmi-class-generator
Martin Michael

Towmuz 6. Jun 2017 11:12

AW: OPENHARDWAREMONITOR mit WMI
 
Hoi,

bin mir da nu nicht ganz sicher, aber meines Wissens nach, muss dein Motherboardhersteller auch eine Schnittstelle zur WMI bereitstellen, sonst kannst du da nichts auslesen.

Vieleicht ist das hier was für dich (auch von RRUZ):
https://theroadtodelphi.com/2013/02/...ucing-tsmbios/
http://www.dmtf.org/standards/smbios Seite 112 gehts los :p

ATS3788 6. Jun 2017 11:52

AW: OPENHARDWAREMONITOR mit WMI
 
Also , für die Version 0.7.1
habe ich es zu laufen bekommen allerdings muss dann die Applikation gestartet sein, was mich zu meiner nächsten Frage führt
.
Wie kann man OpenHardwareMonitor im Hintergrundlauf als reiner WMI-COM Server?

ATS3788 8. Jun 2017 06:12

AW: OPENHARDWAREMONITOR mit WMI
 
Danke Towmuz
https://theroadtodelphi.com/2013/02/...ucing-tsmbios/
Das hört sich ja gut an !
was mich wunder mal funktioniert das auslesen wunderbar
und dann wieder gar nicht
Also in dem Fall ist es ein ASRock Z87E-ITX
Mal sehen werde berichten.

ATS3788 8. Jun 2017 06:31

AW: OPENHARDWAREMONITOR mit WMI
 
tsmbios wäre eine Super Sache gewesen.
Nur leider in meinem Fall liest es die wichtigen Sachen aus dem Bios nicht aus.
Die Idee die dahintersteckt ist aber beeindruckend.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz