DOBON.NET

ユーザー設定の変更をイベントで受け取る

システムカラー、アイコン、キー入力、マウス、システム電源などのユーザー情報が変更されると、SystemEventsクラスのUserPreferenceChangedイベントが発生しますので、これを調べることにより、ユーザー情報が変更されたことを知ることができるようになります。

下の例では、Form1が表示されてから閉じるまでユーザー設定の変更を監視し、変更されると、その内容を表示しています。

VB.NET
コードを隠すコードを選択
'Imports Microsoft.Win32
'がソースファイルの一番上に書かれているものとする。

'ユーザー設定の変更を監視する

Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) _
        Handles MyBase.Load
    'イベントをイベント ハンドラに関連付ける
    'フォームコンストラクタなどの適当な位置に記述してもよい
    AddHandler SystemEvents.UserPreferenceChanged, _
        AddressOf SystemEvents_UserPreferencesChanged
End Sub

Private Sub Form1_Closed(ByVal sender As Object, _
        ByVal e As System.EventArgs) _
        Handles MyBase.Closed
    'イベントを解放する
    'フォームDisposeメソッド内の基本クラスのDisposeメソッド呼び出しの前に
    '記述してもよい
    RemoveHandler SystemEvents.UserPreferenceChanged, _
        AddressOf SystemEvents_UserPreferencesChanged
End Sub

'ユーザー設定が変更されたとき
Private Sub SystemEvents_UserPreferencesChanged( _
        ByVal sender As Object, _
        ByVal e As UserPreferenceChangedEventArgs)
    Dim s As String
    Select Case e.Category
        Case UserPreferenceCategory.Accessibility
            s = "障害を持つユーザー用のシステムユーザー補助に" _
                + "関連付けられているユーザー設定"
        Case UserPreferenceCategory.Color
            s = "ウィンドウやメニューの既定の色など、" _
                + "システムカラーに関連付けられているユーザー設定"
        Case UserPreferenceCategory.Desktop
            s = "システムデスクトップに関連付けられているユーザー設定"
        Case UserPreferenceCategory.General
            s = "ほかのどのカテゴリにも関連付けられていないユーザー設定"
        Case UserPreferenceCategory.Icon
            s = "アイコンの高さや間隔など、" _
                + "アイコン設定に関するユーザー設定"
        Case UserPreferenceCategory.Keyboard
            s = "キー入力時の文字の表示間隔など、" _
                + "キーボード設定に関するユーザー設定"
        Case UserPreferenceCategory.Locale
            s = "文字エンコーディングやカルチャ文字列など、" _
                + "カルチャに関するユーザー設定"
        Case UserPreferenceCategory.Menu
            s = "メニュー遅延やテキストの配置など、" _
                + "メニュー設定に関するユーザー設定"
        Case UserPreferenceCategory.Mouse
            s = "ダブルクリックの速度やマウスの感度など、" _
                + "マウス設定に関するユーザー設定"
        Case UserPreferenceCategory.Policy
            s = "ユーザー権限やアクセス レベルなど、" _
                + "ポリシー設定に関するユーザー設定"
        Case UserPreferenceCategory.Power
            s = "システム電源の設定に関するユーザー設定"
        Case UserPreferenceCategory.Screensaver
            s = "スクリーンセーバーに関連付けられているユーザー設定"
        Case UserPreferenceCategory.Window
            s = "システムウィンドウの大きさや" _
                + "特性に関連付けられているユーザー設定"
    End Select
    s += "が変更されました。"
    Console.WriteLine(s)
    Console.WriteLine(e.Category)
End Sub
C#
コードを隠すコードを選択
//using Microsoft.Win32;
//がソースファイルの一番上に書かれているものとする。

//ユーザー設定の変更を監視する

private void Form1_Load(object sender, System.EventArgs e)
{
    //イベントをイベント ハンドラに関連付ける
    //フォームコンストラクタなどの適当な位置に記述してもよい
    SystemEvents.UserPreferenceChanged +=
        new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
}

private void Form1_Closed(object sender, System.EventArgs e)
{
    //イベントを解放する
    //フォームDisposeメソッド内の基本クラスのDisposeメソッド呼び出しの前に
    //記述してもよい
    SystemEvents.UserPreferenceChanged -=
        new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
}

//ユーザー設定が変更されたとき
private void SystemEvents_UserPreferenceChanged(object sender,
        UserPreferenceChangedEventArgs e)
{
    string s = "";
    switch (e.Category)
    {
        case UserPreferenceCategory.Accessibility:
            s = "障害を持つユーザー用のシステムユーザー補助に"
                + "関連付けられているユーザー設定";
            break;
        case UserPreferenceCategory.Color:
            s = "ウィンドウやメニューの既定の色など、"
                + "システムカラーに関連付けられているユーザー設定";
            break;
        case UserPreferenceCategory.Desktop:
            s = "システムデスクトップに関連付けられているユーザー設定";
            break;
        case UserPreferenceCategory.General:
            s = "ほかのどのカテゴリにも関連付けられていないユーザー設定";
            break;
        case UserPreferenceCategory.Icon:
            s = "アイコンの高さや間隔など、"
                + "アイコン設定に関するユーザー設定";
            break;
        case UserPreferenceCategory.Keyboard:
            s = "キー入力時の文字の表示間隔など、"
                + "キーボード設定に関するユーザー設定";
            break;
        case UserPreferenceCategory.Locale:
            s = "文字エンコーディングやカルチャ文字列など、"
                + "カルチャに関するユーザー設定";
            break;
        case UserPreferenceCategory.Menu:
            s = "メニュー遅延やテキストの配置など、"
                + "メニュー設定に関するユーザー設定";
            break;
        case UserPreferenceCategory.Mouse:
            s = "ダブルクリックの速度やマウスの感度など、"
                + "マウス設定に関するユーザー設定";
            break;
        case UserPreferenceCategory.Policy:
            s = "ユーザー権限やアクセス レベルなど、"
                + "ポリシー設定に関するユーザー設定";
            break;
        case UserPreferenceCategory.Power:
            s = "システム電源の設定に関するユーザー設定";
            break;
        case UserPreferenceCategory.Screensaver:
            s = "スクリーンセーバーに関連付けられているユーザー設定";
            break;
        case UserPreferenceCategory.Window:
            s = "システムウィンドウの大きさや"
                + "特性に関連付けられているユーザー設定";
            break;
    }
    s += "が変更されました。";
    Console.WriteLine(s);
    Console.WriteLine(e.Category);
}

注意:上のコードではFormのClosedイベントを使用していますが、.NET Framework 2.0以降では、代わりにFormClosedイベントを使用してください。

SystemEventsクラスにはUserPreferenceChangingイベントというものもあり、これはユーザー設定が変更されているときに発生します。使い方は、UserPreferenceChangedイベントとほぼ同じです。

また、SystemEventsクラスはその他にも、下に示すように、様々なシステムイベントを提供します。詳しくは「SystemEvents クラス」をご覧ください。

SystemEventsメンバ説明
DisplaySettingsChangedユーザーが表示設定を変更すると発生
DisplaySettingsChanging表示設定が変更されているときに発生(.NET Framework 2.0で追加)
EventsThreadShutdownシステム イベントを待機するスレッドが終了する前に発生
InstalledFontsChangedユーザーがシステム フォントを追加するか、またはシステム フォントを削除すると発生
LowMemoryシステムで使用可能な RAM が不足すると発生
PaletteChangedユーザーが、別のパレットを使用するアプリケーションに切り替えると発生
PowerModeChangedユーザーがシステムを中断または再開すると発生
SessionEndedユーザーがシステムからログオフするか、システムをシャットダウンすると発生
SessionEndingユーザーがシステムからログオフしようとした場合、またはシステムをシャットダウンしようとした場合に発生
SessionSwitch現在ログインしているユーザーが変更された場合に発生(.NET Framework 2.0で追加)
TimeChangedユーザーがシステム時間を変更すると発生
TimerElapsedウィンドウ タイマ間隔が経過したときに発生
UserPreferenceChangedユーザー設定が変更されると発生
UserPreferenceChangingユーザー設定を変更しているときに発生
  • 履歴:
  • 2007/1/26 .NET Framework 2.0に関する記述を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。
共有する

この記事への評価

この記事へのコメント

この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームへ移動します。通常のご質問、ご意見等は掲示板へご投稿ください。