DotNet を使用した Windows SystemEvents コールバックの登録

次の例は、Windows のシステム設定が変更された場合に対処する、MAXScript イベント ハンドラを登録する手順を示したものです。

コード:

    --First we need the SystemEvents DotNet Class:
    c = dotNetClass "Microsoft.Win32.SystemEvents"
    -->dotNetClass:Microsoft.Win32.SystemEvents
    --Then we get a list of all available events:
    showevents c
    -->[static] DisplaySettingsChanged <System.Object>sender <System.EventArgs>e = ( ... )
    -->[static] DisplaySettingsChanging <System.Object>sender <System.EventArgs>e = ( ... )
    -->[static] EventsThreadShutdown <System.Object>sender <System.EventArgs>e = ( ... )
    -->[static] InstalledFontsChanged <System.Object>sender <System.EventArgs>e = ( ... )
    -->[static] LowMemory <System.Object>sender <System.EventArgs>e = ( ... )
    -->[static] PaletteChanged <System.Object>sender <System.EventArgs>e = ( ... )
    -->[static] PowerModeChanged <System.Object>sender <Microsoft.Win32.PowerModeChangedEventArgs>e = ( ... )
    -->[static] SessionEnded <System.Object>sender <Microsoft.Win32.SessionEndedEventArgs>e = ( ... )
    -->[static] SessionEnding <System.Object>sender <Microsoft.Win32.SessionEndingEventArgs>e = ( ... )
    -->[static] SessionSwitch <System.Object>sender <Microsoft.Win32.SessionSwitchEventArgs>e = ( ... )
    -->[static] TimeChanged <System.Object>sender <System.EventArgs>e = ( ... )
    -->[static] TimerElapsed <System.Object>sender <Microsoft.Win32.TimerElapsedEventArgs>e = ( ... )
    -->[static] UserPreferenceChanged <System.Object>sender <Microsoft.Win32.UserPreferenceChangedEventArgs>e = ( ... )
    -->[static] UserPreferenceChanging <System.Object>sender <Microsoft.Win32.UserPreferenceChangingEventArgs>e = ( ... )
    -->true
    --We define a global function to be called by the event handler:
    fn TimeChanged a1 a2 = format "TimeChanged callback: % : %\n" a1 a2
    -->TimeChanged()
    --Finally we add the Event Handler for the event "TimeChanged":
    dotnet.addeventhandler c "TimeChanged" TimeChanged
    -->OK

これで、Microsoft Windows の[日付と時刻](Date and Time)プロパティを開き、秒数のみを変更し(3ds Maxのライセンスに関する問題を回避するために、日付に大幅に変更しない)、変更を適用します。登録した MAXScript 関数が呼び出され、リスナに出力されます。

TimeChanged callback: dotNetObject:Microsoft.Win32.SystemEvents : dotNetObject:System.EventArgs

イベント リストからわかるように、ユーザはイベント ハンドラを登録することによって、表示の設定が変更されたり、パレットやフォントなどが変更されたりした場合に通知を受けることができます。