Подтвердить что ты не робот

Определите, когда пользователь блокирует/разблокирует свой ПК

Возможный дубликат:
Как я могу программно определить, заблокирована ли моя рабочая станция?
Проверка изменения блокировки/разблокировки рабочей станции с помощью С#

Я хотел бы определить, когда машина Windows (XP или 7) заблокирована и разблокирована.

Я хотел бы создать приложение регистрации активности в расписании, а также время предварительной загрузки с обедом, перерывами и т.д. было бы очень полезно.

Можно ли выбрать событие, которое срабатывает, когда операционная система Windows заблокирована и разблокирована?

4b9b3361

Ответ 1

Попробуйте (здесь):

SystemEvents.SessionSwitch += 
    new SessionSwitchEventHandler(SystemEvents_SessionSwitch);

// unhook static eventhandler when application terminates!

//Handle event
static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
    Console.WriteLine(e.Reason.ToString());
}

Ответ 2

Вот рабочий пример. Запустите это, заблокируйте и разблокируйте рабочую станцию ​​и наблюдайте за выходом:

using System;
using Microsoft.Win32;

namespace ConsoleApplication1
{
    class Program
    {
        private static SessionSwitchEventHandler sseh;

        static void Main(string[] args)
        {
            sseh = new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
            SystemEvents.SessionSwitch += sseh;
            while(true) {}
        }

        static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
        {
            Console.WriteLine(e.Reason.ToString());
        }

    }
}

Вы также можете обнаружить, когда заставка работает.

Ответ 3

Вам нужно получить уведомление о смене сеанса, начиная с просмотра в PInvoke здесь

Как говорится в комментариях, кто-то должен учитывать бизнес-последствия этого использования этого API.

Как только пользователи узнают об этом мониторинге, у них может возникнуть соблазн оставить сеансы разблокированными или даже поделиться паролями, которые будут контрпродуктивными.