Detect date change in Windows [C#]

Asked

Viewed 114 times

3

I would like to know: How can I detect and display a warning to the user through a MessageBox, whenever my application is running (is maximized or minimized) and the date of the computer is changed?

After researching a lot on the Internet, I realized that it is possible to use the SystemEvents.TimeChanged to perform this function. However, I could not understand the use nor how to implement in the code.

1 answer

3


Matheus, follow an example... but it’s in VB.Net... may be?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Define classe SystemEvents para receber as notificações dos eventos 
        'quando uma preferência do usuário for alterada, a paleta sofre alteração, a exibição das configurações mudar 
        'ou quando ocorrer uma alteração na data/hora
        AddHandler SystemEvents.UserPreferenceChanging, AddressOf SystemEvents_UserPreferenceChanging
        AddHandler SystemEvents.PaletteChanged, AddressOf SystemEvents_PaletteChanged
        AddHandler SystemEvents.DisplaySettingsChanged, AddressOf SystemEvents_DisplaySettingsChanged
        AddHandler Microsoft.Win32.SystemEvents.TimeChanged, AddressOf TimeChangedEvent
    End Sub

    'Verifica alterações na data/hora do sistema
    Sub TimeChangedEvent(ByVal sender As Object, ByVal e As System.EventArgs)
        MessageBox.Show("A data/hora do sistema foi alterada")
    End Sub

    ' Este método é chamado quando uma preferência do usuário é alterada.
    Private Sub SystemEvents_UserPreferenceChanging(ByVal sender As Object, ByVal e As UserPreferenceChangingEventArgs)
        MessageBox.Show("Alteração de preferencias do usuário : " & e.Category.ToString())
    End Sub

    ' Este método é chamado quando a paleta é alterada.
    Private Sub SystemEvents_PaletteChanged(ByVal sender As Object, ByVal e As EventArgs)
        MessageBox.Show("Ocorreu uma alteração na Paleta")
    End Sub

    ' Este método é chamado quando as exibição das configurações muda
    Private Sub SystemEvents_DisplaySettingsChanged(ByVal sender As Object, ByVal e As EventArgs)
        MessageBox.Show("Exibição das configurações foi alterada.")
    End Sub

    ' Verifica as alterações das preferências do usuário
    Sub UserPreferenceChangedEvent(ByVal sender As Object, ByVal e As Microsoft.Win32.UserPreferenceChangedEventArgs)
        ' Verifica a categoria alterada
        Select Case e.Category
            Case Microsoft.Win32.UserPreferenceCategory.Color
                MessageBox.Show("Foram alteradas as cores do sistema")
            Case Microsoft.Win32.UserPreferenceCategory.Screensaver
                MessageBox.Show("Foi alterado o screensaver do sistema")
            Case Microsoft.Win32.UserPreferenceCategory.Window
                MessageBox.Show("Foram alteradas dimensões ou características do sistema")
        End Select
    End Sub

See more in:

VB . NET - Monitoring System Event Notifications

Translating...

private void Form1_Load(object sender, System.EventArgs e) {
        // Define classe SystemEvents para receber as notificações dos eventos 
        // quando uma preferência do usuário for alterada, a paleta sofre alteração, a exibição das configurações mudar 
        // ou quando ocorrer uma alteração na data/hora
        SystemEvents.UserPreferenceChanging += new System.EventHandler(this.SystemEvents_UserPreferenceChanging);
        SystemEvents.PaletteChanged += new System.EventHandler(this.SystemEvents_PaletteChanged);
        SystemEvents.DisplaySettingsChanged += new System.EventHandler(this.SystemEvents_DisplaySettingsChanged);
        Microsoft.Win32.SystemEvents.TimeChanged += new System.EventHandler(this.TimeChangedEvent);
    }

    // Verifica alterações na data/hora do sistema
    void TimeChangedEvent(object sender, System.EventArgs e) {
        MessageBox.Show("A data/hora do sistema foi alterada");
    }

    //  Este método é chamado quando uma preferência do usuário é alterada.
    private void SystemEvents_UserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e) {
        MessageBox.Show(("alteração de preferencias do usuário : " + e.Category.ToString()));
    }

    //  Este método é chamado quando a paleta é alterada.
    private void SystemEvents_PaletteChanged(object sender, EventArgs e) {
        MessageBox.Show("Ocorreu uma alteração na Paleta");
    }

    //  Este método é chamado quando as exibição das configurações muda
    private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e) {
        MessageBox.Show("Exibição das configurações foi alterada.");
    }

    //  Verifica as alterações das preferências do usuário
    void UserPreferenceChangedEvent(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) {
        //  Verifica a categoria alterada
        switch (e.Category) {
            case Microsoft.Win32.UserPreferenceCategory.Color:
                MessageBox.Show("Foram alteradas as cores do sistema");
                break;
            case Microsoft.Win32.UserPreferenceCategory.Screensaver:
                MessageBox.Show("Foi alterado o screensaver do sistema");
                break;
            case Microsoft.Win32.UserPreferenceCategory.Window:
                MessageBox.Show("Foram alteradas dimensões ou características do sistema");
                break;
        }
    }
  • 1

    Thank you very much, that’s exactly what I needed!

  • Matheus, thank you for punctuating me!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.