首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写Delphi程序来控制CPU风扇速度和监控温度?

如何编写Delphi程序来控制CPU风扇速度和监控温度?
EN

Stack Overflow用户
提问于 2009-10-08 18:21:12
回答 2查看 6.8K关注 0票数 4

我想用Delphi创建一个程序来控制我电脑的风扇速度并监控温度。

执行此操作涉及哪些API调用?

有什么好的代码样本可以分享吗?

EN

Stack Overflow用户

发布于 2009-10-09 01:00:48

您可以使用WMI类Win32_TemperatureProbeWin32_Fan,从delphi中,您必须使用组件->导入组件->导入类型库->下一步->“选择库”->下一步->添加单元到项目->完成来导入MicrosoftDelphiV1.x库。

请参见此代码。这只是一个简单的例子。

代码语言:javascript
运行
复制
program GetWMI_Info;

{$APPTYPE CONSOLE}

uses
  ActiveX,
  Variants,
  SysUtils,
  WbemScripting_TLB in '..\..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas';

procedure ShowTemperatureInfo();
var
  WMIServices: ISWbemServices;
  Root       : ISWbemObjectSet;
  Item       : Variant;
  I          : Integer;
begin
 {
 http://msdn.microsoft.com/en-us/library/aa394493%28VS.85%29.aspx
 The Win32_TemperatureProbe  WMI class represents the properties of a temperature sensor (electronic thermometer).
 Most of the information that the Win32_TemperatureProbe WMI class provides comes from SMBIOS.
 Real-time readings for the CurrentReading property cannot be extracted from SMBIOS tables.
 For this reason, current implementations of WMI do not populate the CurrentReading property.
 The CurrentReading property's presence is reserved for future use.
 }

  Writeln('Temperature Info');
  Writeln('----------------');

  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;

procedure  ShowCPUFanInfo();
var
  WMIServices: ISWbemServices;
  Root       : ISWbemObjectSet;
  Item       : Variant;
  I          : Integer;
begin
 {
  http://msdn.microsoft.com/en-us/library/aa394146%28VS.85%29.aspx
  The Win32_Fan WMI class represents the properties of a fan device in the computer system. For example, the CPU cooling fan.
 }
  Writeln('CPU FAN Info');
  Writeln('----------------');
  WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
  Root  := WMIServices.ExecQuery('Select * FROM Win32_Fan','WQL', 0, nil);
  for I := 0 to Root.Count - 1 do
  begin
    Item := Root.ItemIndex(I);

    Writeln('ActiveCooling                     '+VarToStr(Item.ActiveCooling));
    Writeln('Availability                      '+VarToStr(Item.Availability));
    Writeln('Caption                           '+VarToStr(Item.Caption));
    Writeln('Config Manager ErrorCode          '+VarToStr(Item.ConfigManagerErrorCode));
    Writeln('Config Manager UserConfig         '+VarToStr(Item.ConfigManagerUserConfig));
    Writeln('Creation ClassName                '+VarToStr(Item.CreationClassName));
    Writeln('Description                       '+VarToStr(Item.Description));
    Writeln('DesiredSpeed                      '+VarToStr(Item.DesiredSpeed));
    Writeln('DeviceID                          '+VarToStr(Item.DeviceID));
    Writeln('ErrorCleared                      '+VarToStr(Item.ErrorCleared));
    Writeln('ErrorDescription                  '+VarToStr(Item.ErrorDescription));
    Writeln('InstallDate                       '+VarToStr(Item.InstallDate));
    Writeln('LastErrorCode                     '+VarToStr(Item.LastErrorCode));
    Writeln('Name                              '+VarToStr(Item.Name));
    Writeln('PNPDeviceID                       '+VarToStr(Item.PNPDeviceID));
    Writeln('PowerManagement Capabilities      '+VarToStr(Item.PowerManagementCapabilities));
    Writeln('PowerManagement Supported         '+VarToStr(Item.PowerManagementSupported));
    Writeln('Status                            '+VarToStr(Item.Status));
    Writeln('StatusInfo                        '+VarToStr(Item.StatusInfo));
    Writeln('SystemCreation ClassName          '+VarToStr(Item.SystemCreationClassName));
    Writeln('SystemName                        '+VarToStr(Item.SystemName));
    Writeln('VariableSpeed                     '+VarToStr(Item.VariableSpeed));
    Writeln('');
  end;

End;


begin
  try
    CoInitialize(nil);
        ShowTemperatureInfo();
        ShowCPUFanInfo();
        Readln;
    CoUninitialize;
  except
    on E:Exception do
    Begin
        CoUninitialize;
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;
end.
票数 9
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1539604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档