Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2010年07月07日] [更新 2010年07月07日] Delphi サンプルプログラム集
SystemParametersInfo 関数サンプル
S06_スクリーンの電力管理関係
動作確認等 Windows XP(SP3) + Delphi 2010(UP5) Pro
S06_SystemParametersInfo_Power.zip [767 KB] 2010年07月07日版 (EXE 同梱)







スクリーンの電力管理関係 概要


Windows Vista 以降では,このページの uiAction パラメータはサポートされていません.
テストの結果,Windows XP では動作しましたので,掲載しておきます.





01_スクリーンの電力停止モードの有効性


スクリーンの電力停止モードの有効性の取得と設定のサンプルです.この値が有効になっていると,設定されたいる時間が経過するスクリーンの電源がオフとなります.
この値が有効になっていないと,スクリーンの電力停止タイムアウトの設定は無効です.


表1
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数

uiAction パラメータ uiParam と pvParam パラメータ
SPI_GETPOWEROFFACTIVE 取得
uiParam は 0
pvParam は BOOL 型変数へのポインタ
有効な場合は 0 以外の値,無効な場合は0
SPI_SETPOWEROFFACTIVE 設定
uiParam を 1 にすると有効,0 にすると無効
pvParam は nil


図1
起動すると現在の設定を表示

リスト1
スクリーンの電力停止モードの有効性
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    CheckBox1: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
    OrignalValue : Boolean;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  SystemParametersInfo(SPI_GETPOWEROFFACTIVE,
                       0,
                       @OrignalValue,
                       0);
  CheckBox1.Checked := OrignalValue;
end;

//=============================================================================
//  [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;

  SystemParametersInfo(SPI_SETPOWEROFFACTIVE,
                       Ord(CheckBox1.Checked),
                       nil,
                       SPIF_SENDCHANGE);

  Screen.Cursor := crDefault;
end;

//=============================================================================
//  元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;

  SystemParametersInfo(SPI_SETPOWEROFFACTIVE,
                       Ord(OrignalValue),
                       nil,
                       SPIF_SENDCHANGE);
  FormCreate(nil);
  Screen.Cursor := crDefault;
end;

end.




02_スクリーンの電力停止モードタイムアウト値


スクリーンの電力停止まで時間の取得と設定サンプルです.電力停止機能が有効になっていないと機能しません.0 にすると電力停止しません.


表2
uiAction パラメータは SystemParametersInfo 関数の第 1 引数
uiParam は第 2 引数で,pvParam は第 3 引数

uiAction パラメータ uiParam と pvParam パラメータ
SPI_GETPOWEROFFTIMEOUT 取得
uiParam は 0
pvParam は INT 型変数へのポインタ
この変数にタイムアウト値が秒単位で格納される
SPI_SETPOWEROFFTIMEOUT 設定
uiParam にタイムアウト値を秒単位で指定
pvParam は nil


図2
起動すると現在の設定を表示

リスト2
スクリーンの電力停止モードタイムアウト値
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Spin;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    SpinEdit1: TSpinEdit;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
    OrignalValue : Integer;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  プログラムを起動したら現在の設定を取得しておく
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  //現在の設定値読出し
  SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT,
                       0,
                       @OrignalValue,
                       0);

  SpinEdit1.Value := OrignalValue;
end;

//=============================================================================
//  [設定]ボタン
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  NewValue : Integer;
  SetValue : Integer;
begin
  Screen.Cursor := crHourGlass;

  //設定した値をセット
  NewValue := SpinEdit1.Value;
  SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT,
                       NewValue,
                       nil,
                       SPIF_SENDCHANGE);
  //設定の確認
  SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT,
                       0,
                       @SetValue,
                       0);
  SpinEdit1.Value := SetValue;

  Screen.Cursor := crDefault;
end;

//=============================================================================
//  元に戻す
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  Screen.Cursor := crHourGlass;

  SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT,
                       OrignalValue,
                       nil,
                       SPIF_SENDCHANGE);
  FormCreate(nil);

  Screen.Cursor := crDefault;
end;

end.