Определите, когда пользователь блокирует/разблокирует свой ПК
Возможный дубликат:
Как я могу программно определить, заблокирована ли моя рабочая станция?
Проверка изменения блокировки/разблокировки рабочей станции с помощью С#
Я хотел бы определить, когда машина Windows (XP или 7) заблокирована и разблокирована.
Я хотел бы создать приложение регистрации активности в расписании, а также время предварительной загрузки с обедом, перерывами и т.д. было бы очень полезно.
Можно ли выбрать событие, которое срабатывает, когда операционная система Windows заблокирована и разблокирована?
Ответы
Ответ 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.
Как только пользователи узнают об этом мониторинге, у них может возникнуть соблазн оставить сеансы разблокированными или даже поделиться паролями, которые будут контрпродуктивными.