システムカラー、アイコン、キー入力、マウス、システム電源などのユーザー情報が変更されると、SystemEventsクラスのUserPreferenceChangedイベントが発生しますので、これを調べることにより、ユーザー情報が変更されたことを知ることができるようになります。
下の例では、Form1が表示されてから閉じるまでユーザー設定の変更を監視し、変更されると、その内容を表示しています。
'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
//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 | ユーザー設定を変更しているときに発生 |