Помогите пожалуйста.
Как отследить выход из системы или смену пользователя.
Нужно закрыть программу при смене пользователя.
Этот топик читают: Гость
Ответов: 182
Рейтинг: 14
|
|||
карма: 0 |
|
Ответов: 783
Рейтинг: 168
|
|||
Stalevar, Пример закрывает блокнот при выходе пользователя, а также при смене питания ноутбука сеть/батарея (для тестов).
Работает на Windows10 (ниже не проверял)
|
|||
карма: 15 |
| ||
Голосовали: | Stalevar |
Ответов: 182
Рейтинг: 14
|
|||
Gunta, Не много не то.
Нужно закрыть именно своё приложение. в VB Net Примерно так:
|
|||
карма: 0 |
|
Ответов: 99
Рейтинг: 4
|
|||
Stalevar, в MainForm есть скрытая точка onQueryEndSession, однако возможно это не совсем то, что тебе может быть нужно.
Если этой точки нет, скачивай альтернативную сборку. Или обновись с SVN. |
|||
карма: 0 |
|
Ответов: 182
Рейтинг: 14
|
|||
TheRenat, Не подходит. При смене пользователя приложения не закрываются, нужно как то отследить смену пользователя.
Редактировалось 1 раз(а), последний 2022-03-03 11:21:10 |
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
А если ловить в программе текущего пользователя системы
Схема
|
|||
карма: 22 |
|
Ответов: 783
Рейтинг: 168
|
|||
nesco, Не совсем так. Данная схема так и останется работать в сессии того пользователя, от которого запущенна.
Как мне кажется, нужно подписаться на системное событие SessionSwitch (https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.systemevents?redirectedfrom=MSDN&view=dotnet-plat-ext-6.0#events). Вот такая строка работает в Powershell
Редактировалось 4 раз(а), последний 2022-03-04 12:40:38 |
|||
карма: 15 |
|
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
Stalevar писал(а): Нужно закрыть программу при смене пользователя.Если программа запущена от имени текущего пользователя, то, при выходе из сессии пользователя - все приложения данного пользователя завершаются автоматически. Если речь о сервисе Windows, то действительно можно обработать событие смены сессии пользователя. В других случаях (программа, запущенная от системного аккаунта или вход в систему ещё одного пользователя или другие ситуации) надо проверять на живую. Редактировалось 1 раз(а), последний 2022-03-03 21:25:42 |
|||
карма: 6 |
|
Ответов: 783
Рейтинг: 168
|
|||
Stalevar писал(а): Нужно закрыть программу при смене пользователя.Наверное, самым простым будет создание задания для планировщика закрывающее конкретное приложение при входе другого пользователя в систему. (в примере - блокнот)
|
|||
карма: 15 |
|
Ответов: 1328
Рейтинг: 69
|
|||
А что мешает сохранить имя текущего пользователя и проверять его по таймеру и если это не он закрыть форму?
Редактировалось 2 раз(а), последний 2022-03-04 16:53:24 |
|||
карма: 2 |
| ||
Голосовали: | Stalevar |
Ответов: 249
Рейтинг: 4
|
|||
Konst писал(а): А что мешает сохранить имя текущего пользователя и проверять его по таймеру и если это не он закрыть форму?
этот вариант я тоже рассматривал, но он не работает, а вот если сохранить на диск имя пользователя в новой сессии и проверять из предыдущей тогда да. |
|||
карма: 1 |
|
Ответов: 182
Рейтинг: 14
|
|||
Konst, Вроде работает, спасибо.
Запускаю проект-Сменить пользователя-Войти, и проект закрывается. --- Добавлено в 2022-03-05 09:59:47 Stalevar писал(а): Konst, Вроде работает, спасибо.
Запускаю проект-Сменить пользователя-Войти, и проект закрывается. Поспешил, не работает Редактировалось 1 раз(а), последний 2022-03-05 09:59:47 |
|||
карма: 0 |
|
Ответов: 783
Рейтинг: 168
|
|||
Konst писал(а): А что мешает сохранить имя текущего пользователя и проверять его по таймеру и если это не он закрыть форму?Stalevar писал(а): Поспешил, не работает Эта схема и не может работать. Легко проверить если вывести результат в Memo.
|
|||
карма: 15 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Ну что же Вы как всегда топорно так велосипеды всякие придумываете.
Ну ведь есть нормальные цивилизованные способы https://docs.microsoft.com/en-us/windows/win32/shutdown/wm-queryendsession т.е отловить приложением сообщение WM_QUERYENDSESSION и проверить в нём LPARAM |
|||
карма: 4 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Так прикол-то в том, что приложение нужно закрыть не при закрытии сессии, а при смене пользователя. Те, если зашел тот же пользователь, то приложение закрывать не надо, если другой -- то закрыть. Сообщение WM_QUERYENDSESSION не отлавливает смену пользователя, только закрытие сессии. Это сообщение, кстати, у нас отлавливается на форме и выдает запрос на точку QueryEndSession. Те, для решения задачи необходимо найти такое решение, которое определяет текущего пользователя вне зависимости от кого запущено приложение. Такое решение есть для VB.NET -- UserSessionSwitch, надо найти такое же решение для нас.
Редактировалось 5 раз(а), последний 2022-03-09 23:25:56 |
|||
карма: 22 |
|