Mam's WebSite
建築CGパース住宅CGパース

Mamの覚書Q&A検索

トップページMamの覚書Q&A検索Delphi(いろいろ)⇒Q&A


大項目:「 Delphi 」 - 中項目:「 いろいろ 」

「 WMIでCPU温度を取得 」

WMIでCPU温度を取得


回答

ソース

uses WbemScripting_TLB;
 
function TForm1.GetWMIstring2 (wmiHost, wmiClass, wmiProperty : string):string;
var // These are all needed for the WMI querying process
  Locator: ISWbemLocator;
  Services: ISWbemServices;
  SObject: ISWbemObject;
  ObjSet: ISWbemObjectSet;
  SProp: ISWbemProperty;
  Enum: IEnumVariant;
  Value: Cardinal;
  TempObj: OleVariant;
  SN: string;
begin
  try
    Locator := CoSWbemLocator.Create;
    Services := Locator.ConnectServer(wmiHost, 'root\wmi', '', '', '','', 0, nil);
    ObjSet := Services.ExecQuery('SELECT * FROM '+wmiClass, 'WQL',
      wbemFlagReturnImmediately and wbemFlagForwardOnly , nil);
    Enum := (ObjSet._NewEnum) as IEnumVariant;
    while (Enum.Next(1, TempObj, Value) = S_OK) do
    begin
      SObject := IUnknown(tempObj) as ISWBemObject;
      SProp := SObject.Properties_.Item(wmiProperty, 0);
      if VarIsNull(SProp.Get_Value) then
        result := ''
      else
      begin
        SN := SProp.Get_Value;
        result := SN;
      end;
    end;
  except
   on exception do
    result := '';
   end;
end;
 
procedure TForm1.WMIdata(Sender: TObject);
var tmpstr : string; cputemp : Integer;
begin
tmpstr := getWMIstring2('','MSAcpi_ThermalZoneTemperature','CurrentTemperature');
  if tmpstr <> '' then
  Begin
    cputemp:= (StrToInt(tmpstr) - 2732) div 10;
    form1.caption := IntToStr(cputemp) + ' °C'
  end else
   form1.Caption := 'ERROR';
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
  WMIServices: ISWbemServices;
  Root       : ISWbemObjectSet;
  Item       : Variant;
  I          : Integer;
  iTemp : Longword;
begin
 
  Form1.Memo1.Lines.Add('Temperature Info2');
  Form1.Memo1.Lines.Add('----------------');
 
  WMIServices := CoSWbemLocator.Create.ConnectServer('', 'root\wmi','', '', '', '', 0, nil);
  Root  := WMIServices.ExecQuery('Select * FROM MSAcpi_ThermalZoneTemperature','WQL', 0, nil);
  for I := 0 to Root.Count - 1 do
  begin
    Item := Root.ItemIndex(I);
    //iTemp:=item.CurrentTemperature;
    Form1.Memo1.Lines.Add('CurrentTemperature   '+VarToStr(Item.CurrentTemperature));
    Form1.Memo1.Lines.Add('Current InstanceName '+VarToStr(Item.InstanceName));
    //form1.Memo1.Lines.Add(inttostr(iTemp));
    Form1.Memo1.Lines.Add('');
  end;
end;


Mam's WebSite