Как получить уведомление, когда в окне пользователя произойдет "Смена пользователя"

Я создаю оконное приложение на C#, которое будет уведомлять меня о любом переключении пользователя. Прямо сейчас я использую событие "SessionSwitch", чтобы получить уведомление.

private void startLisning()
{
        Microsoft.Win32.SystemEvents.SessionSwitch +=new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);
        this.eventHandlerCreated = true;
}

private void SystemEvents_SessionSwitch(object sender, EventArgs e)
{
        System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "SwitchUser\t" + DateTime.Now.ToString() + Environment.NewLine);


}

Но в этом случае он также отправляет уведомление, когда происходит "UNLOCK". Который я не хочу. Мне нужно только, когда какой-либо пользователь переключает пользователя в своей системе, мое приложение должно получить уведомление и записать его в файл журнала. Это должно только войти, когда блокировка или switchUser происходят.

Заранее спасибо.

1 ответ

   private void Form1_Load(object sender, EventArgs e)
    {
        startLisning();
    }
    private bool eventHandlerCreated;

    private void startLisning()
    {
        Microsoft.Win32.SystemEvents.SessionSwitch +=new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);
        SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch1);

        this.eventHandlerCreated = true;
    }


    private void SystemEvents_SessionSwitch1(object sender, SessionSwitchEventArgs e)
    {
        switch (e.Reason)
        {
            case SessionSwitchReason.SessionLock:
                System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "LOCK\t" + DateTime.Now.ToString() + Environment.NewLine);
                break;
            case SessionSwitchReason.SessionLogon:
                System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "LOGIN\t" + DateTime.Now.ToString() + Environment.NewLine);
                break;
            case SessionSwitchReason.SessionUnlock:
                System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "UNLOCK\t" + DateTime.Now.ToString() + Environment.NewLine);
                break;
            case SessionSwitchReason.ConsoleConnect:
                System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "UnlockAfetSwitchUser\t" + DateTime.Now.ToString() + Environment.NewLine);
                break;
            case SessionSwitchReason.ConsoleDisconnect:
                System.IO.File.AppendAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "testtest.txt"), "SwitchUser\t" + DateTime.Now.ToString() + Environment.NewLine);

                break;
        }

    }

Это будет уведомлять, когда происходит "переключение пользователя", а также уведомлять, когда "возобновление пользователя". "SessionSwitchReason.ConsoleDisconnect" - это событие, которое срабатывает при возникновении любого переключения пользователя. Этот код протестирован в Windows7 и работает нормально.

Этот код создает файл журнала "testtest.txt" в папке Appdata. Вы можете добраться туда с помощью Window +r и выполнить поиск "%appdata%".

Он регистрирует уведомления, как показано ниже: 1. ВХОД с датой и временем 2. БЛОКИРОВКА с датой и временем 3. РАЗБЛОКИРОВАТЬ с датой и временем 4. ВЫКЛЮЧИТЕ ПОЛЬЗОВАТЕЛЯ с датой и временем 5. ВЫКЛЮЧИТЕ РЕЗЮМЕ ПОЛЬЗОВАТЕЛЯ с датой и временем

Другие вопросы по тегам