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.