Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2014年03月31日] [更新 2014年03月31日] Delphi サンプルプログラム集
SystemParametersInfo 関数サンプル
S10_システム関係の設定変更を監視
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro
S10_SystemChangeEvent.zip [535 KB] 2014年03月31日版 (EXE 同梱)







システム関係の設定変更を監視  -  壁紙の変更を検出


SystemParametersInfo 関数サンプルの [01] から [09] までは,システム関係の設定,または設定内容を取得するサンプルでした.
下のコードは,これらのシステム関係の設定変更を監視するサンプルです.
TApplicationEvents コンポーネントの OnSettingChange イベントを使用しています.このイベントで検出可能な項目については,下のリンクの記事を参考にしてください.

ここでは,壁紙の変更だけを検出します.結果の図は,このサンプルを起動した後,デスクトップの [個人設定] メニューから [デスクトップの背景] で,壁紙を変更したものです.このサンプルコードでは,Windows 7 で実装された,スライドショー形式の壁紙の変更は検出できません.

SystemParametersInfo 関数と同様,システム関係の設定変更の監視,あるいは変更の検出には,専用のメッセージ,コールバック関数が用意されている場合があります.


図1
設計時画面
  • TApplicationEvents コンポを配置
  • OnSettingChange イベントを作成する
図2
壁紙を変更する前
図3
壁紙を変更した結果

リスト1
TApplicationEvents の OnSettingChange イベントを使用して,システム関係の設定変更を検出
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1SettingChange(Sender: TObject; Flag: Integer;
      const Section: string; var Result: Integer);
  private
    { Private 宣言 }
    OrignalValue : Boolean;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  TApplicationEventsのOnSettingChangeイベント処理
//  壁紙の変更を検出
//=============================================================================
procedure TForm1.ApplicationEvents1SettingChange(Sender: TObject; Flag: Integer;
  const Section: string; var Result: Integer);
begin
  if Flag = SPI_SETDESKWALLPAPER then begin
    MessageBox(Handle, '壁紙が変わりました', '情報', MB_ICONINFORMATION);
  end;
end;

end.