Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213

Как определить вход пользователя в систему - Login/Logout Event

30.01.2011, 15:50. Показов 4278. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
(фактически для всех виндов)
У меня задача: программа должна запускаться вместе в виндами и мониторить девайс.
Во время входа пользователя (login) надо запустить дополнительную прогу для доступа к устройству.
При выходе (logout) эта прога закрывается, но основной процесс должен продолжать работу.
Вполне вероятен вход другого пользователя, тогда операция повторится.

Я думаю, что основной процесс надо зарегестрировать как сервис. Однако остается вопрос:
как отловить Logon/Logoff Event.
(или если проверять через таймер, как определить пользователя)

Да, по поводу запуска в качестве сервиса - посоверуйте, как посадить процесс на бесконечный цикл, так как после выполнения определённых функций sub main закончится а вместе с ним и процесс. (я не планирую добавлять окна в основной процесс).
Если установить таймер (все равно надо мониторить устройство), будет ли процесс оставаться в памяти?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2011, 15:50
Ответы с готовыми решениями:

Как из VB узнать login пользователя WIN2000 Server?
Как из VB узнать login пользователя WIN2000 Server? Подскажите где в реестре лежит такая инфа и как ее прочитать? Спасибо

Как определить уникальный вход с login? Чтоб только один юзер...
Юзер входит в систему через логин и пароль Необходимо отслеживать, чтобы под этим логином мог войти только один человек. Может быть,...

Вход в систему (2 пользователя)
Столкнулся с проблемой, помогите решить! При загрузке системы на экране приветствия 2 пользователя, оба рабочие, оба администраторы. ...

11
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
30.01.2011, 16:07
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Public Const INFINITE = -1&      '  Infinite timeout
Private Const WAIT_TIMEOUT = 258&
 
Public Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion(1 To 128) As Byte
End Type
 
Public Const VER_PLATFORM_WIN32_NT = 2&
Private Const STATUS_TIMEOUT = &H102&
Private Const QS_KEY = &H1&
Private Const QS_MOUSEMOVE = &H2&
Private Const QS_MOUSEBUTTON = &H4&
Private Const QS_POSTMESSAGE = &H8&
Private Const QS_TIMER = &H10&
Private Const QS_PAINT = &H20&
Private Const QS_SENDMESSAGE = &H40&
Private Const QS_HOTKEY = &H80&
Private Const QS_ALLINPUT = (QS_SENDMESSAGE Or QS_PAINT _
        Or QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON _
        Or QS_MOUSEMOVE Or QS_HOTKEY Or QS_KEY)
Private Declare Function MsgWaitForMultipleObjects Lib 'user32' _
        (ByVal nCount As Long, pHandles As Long, _
        ByVal fWaitAll As Long, ByVal dwMilliseconds _
        As Long, ByVal dwWakeMask As Long) As Long
Private Declare Function GetTickCount Lib 'kernel32' () As Long
Private Declare Function GetVersionEx Lib 'kernel32' Alias 'GetVersionExA' (lpVersionInformation As OSVERSIONINFO) As Long
Public Declare Function MessageBox Lib 'user32' Alias 'MessageBoxA' (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
 
Public hStopEvent As Long, hStartEvent As Long, hStopPendingEvent As Long
Public IsNT As Boolean, IsNTService As Boolean
Public ServiceNamePtr As Long
Public ServiceName As String
 
Private Sub ServiceMain(ServiceName As String)
Dim hnd As Long
Dim h(0 To 1) As Long
Dim Interval As Long
 
    ' Only one instance
    If App.PrevInstance Then Exit Sub
    ' Check OS type
    IsNT = CheckIsNT()
    ' Creating events
    hStopEvent = CreateEventW(0&, 1&, 0&, 0&)
    hStopPendingEvent = CreateEventW(0&, 1&, 0&, 0&)
    hStartEvent = CreateEventW(0&, 1&, 0&, 0&)
    ServiceNamePtr = StrPtr(ServiceName)
    If IsNT Then
        ' Trying to start service
        hnd = StartAsService
        h(0) = hnd
        h(1) = hStartEvent
        ' Waiting for one of two events: sucsessful service start (1) or
        ' terminaton of service thread (0)
        IsNTService = MsgWaitObj(INFINITE, h(0), 2&) = 1&
        If Not IsNTService Then
            CloseHandle hnd
            MessageBox 0&, 'This program must be started as a service.', App.Title, vbInformation Or vbOKOnly Or vbMsgBoxSetForeground
        End If
    Else
        MessageBox 0&, 'This program is only for Windows NT/2000/XP/2003.', App.Title, vbInformation Or vbOKOnly Or vbMsgBoxSetForeground
    End If
    
    If IsNTService Then
        ' ******************
        ' Here you may initialize and start service's objects
        ' These objects must be event-driven and must return control
        ' immediately after starting.
        ' ******************
        If Service_Initialize(ServiceName) = 0 Then
          SetServiceState SERVICE_RUNNING
          Do
              ' ******************
              ' It is main service loop. Here you may place statements
              ' which perform useful functionality of this service.
              ' ******************
              ' Loop repeats every second. You may change this interval
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
30.01.2011, 18:34  [ТС]
2Konst_one
Спасибо за описание сервисного процесса.

Но все-таки остается вопрос, как обнаружить вхождение юзера.
(или, может быть проверять на наличие Explorer'а, ведь он работает только при наличии юзера). Но имя пользователя мне тоже нужно.
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
01.02.2011, 17:46  [ТС]
Что, кроме Comanche, Messir и Konst_one больше никто не может ответить?

Если так, то просьба к этой троице - помогите, пожалуйста, определить вход и выход юзера.
0
Comanche
01.02.2011, 18:01
Я пас: просто не владею темой.
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 20
02.02.2011, 16:11
>>может быть проверять на наличие Explorer'а, ведь он работает только при наличии юзера

нельзя так делать. может быть открыто несколько эксплореров у разных юзеров. или может быть ни открыто ни одного, а юзер работает с консоли.
0
Messir
02.02.2011, 17:21
пропиши ту прогу, которую нужно запускать, в logon- и logoff-scipts
Messir
02.02.2011, 17:34
Еще можно зарегистрировать свой Credential Manager - тогда ему будут приходить уведомления о входе в систему.
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
05.02.2011, 10:22  [ТС]
Messir!

Что такое Credential Manager и как его зарегичтрировать ?
Если не затруднит, чиркни пару строк об этом.
0
Messir
05.02.2011, 18:04
Credential Manager - это по сути dll-ка, экспортирующая три функции: NPLogonNotify, NPPasswordChangeNotify, NPGetCaps. Первая функция будет вызываться при входе пользователя в систему, вторая - при смене пароля, третья - сервисная, нужно просто возвращать определенный ответ. Библиотека должна быть зарегистрирована в системе как элемент цепочки Network Providers.
Подробнее - в MSDN.

P.S. Но, думаю, данную задачу проще будет решить через login/logout скрипты
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
06.02.2011, 09:27  [ТС]
Спасибо, буду разбираться.
0
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
06.02.2011, 10:51  [ТС]
Разбираясь с Cridential Manager я набрел выяснил, что для мониторинга Logon/Logoff лучше использовать сервис winlogon. Он позполяет не только определить вход пользователя, но и его выход их системы. Кроме того, Cridential manager больше подходит для определения сетевых соединений и протоколов, в то время как winlogon больше предназничен для юзеров (запуск программ и прочего). Хотя в чем-то они похожи.

Кому интересно то пусть ищет в MSDN тему Winlogon Notification Packages
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.02.2011, 10:51
Помогаю со студенческими работами здесь

Не удалось загрузить профиль пользователя, поэтому вход в систему был выполнен с помощью стандартного системного профиля
При попытке зайти в свою учётную запись в Win XP пишет : "Не удалось загрузить профиль пользователя, поэтому вход в систему был...

MVC5 login event
В 2х словах: Где настроить обработчики событий "OnSeccesseLogin". В глобал.азакс - не хочу, там он дёргается на каждый чих, а мне...

Добавить пользователя в "Локальный вход в систему"
Здравствуйте! Полный 0 в этом, подскажите, как это сделать + запретить пользователю установку программ. Спасибо

Ошибка "Введенное имя пользователя совпадает с именем, под котором выполнен вход в систему"
Начало здесь: https://www.cyberforum.ru/windows-admin/thread1287974.html Посмотрел серверный зверюшник: 2008R2 с поднятым...

Как сделать код на "Вход"? ( Login )
Здравствуйте, подскажите пожалуйста как сделать так чтобы в консольном приложении просило пароль и логин, их уже указать в самом коде, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru