Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: CL | DM;

Вниз

Залогинился юзер или нет.   Найти похожие ветки 

 
kolos_rus ©   (2005-11-24 11:37) [0]

Как в своем сервисе определить, залогинился юзер или нет?


 
kolos_rus ©   (2005-11-24 11:54) [1]

Может не совсем верно выразился. Вопрос такой: осуществлен ли вход в систему.


 
AbrosimovA   (2005-11-24 12:24) [2]

Попробуй GetUserName. В этом случае однозначно можно сказать вошёл или не вошёл, а также - кто вошёл.


 
kolos_rus ©   (2005-11-24 12:51) [3]

Не помогло. Возвращает имя пользователя под которым запущен процесс, а системный процесс запущен от имени SYSTEM, вот его и возвращает.


 
Ботвин Дмитрий   (2005-11-24 12:56) [4]

Смотри NetWkstaUserEnum с первым параметром nil. Вернет залогиненного юзера на твоем компе в переданную структуру WKSTA_USER_INFO_0 или
пустое значение, если юзер не вошел в систему. Вроде так...


 
Набережных С. ©   (2005-11-24 13:26) [5]

WTSGetActiveConsoleSessionId


 
kolos_rus ©   (2005-11-28 11:28) [6]


> Набережных С. ©   (24.11.05 13:26) [5]
> WTSGetActiveConsoleSessionId

По описанию в MSDN очень похоже.
Сколько не пытался заставить работать не получилось.
Может у кого готовый пример есть?


 
kolos_rus ©   (2005-11-28 11:33) [7]

Извиниясь, не тот ответ подхватил.

> Ботвин Дмитрий   (24.11.05 12:56) [4]
> Смотри NetWkstaUserEnum с первым параметром nil. Вернет
> залогиненного юзера на твоем компе в переданную структуру
> WKSTA_USER_INFO_0 или
> пустое значение, если юзер не вошел в систему. Вроде так.
> ..
> <Цитата>

По этой функции пример надо.


 
Набережных С. ©   (2005-11-28 13:27) [8]


> kolos_rus ©   (28.11.05 11:28) [6]
>
> > Набережных С. ©   (24.11.05 13:26) [5]
> > WTSGetActiveConsoleSessionId
>
> По описанию в MSDN очень похоже.
> Сколько не пытался заставить работать не получилось.
> Может у кого готовый пример есть?

Это что, шутка? Какой тут может быть пример?! Просто вызвать функцию без параметров и проверить результат, все!

Слушай, может ну его нафик, это программирование? Вон, вышивание крестиком - очень хорошее занятие...


 
kolos_rus ©   (2005-11-29 13:29) [9]


> Это что, шутка? Какой тут может быть пример?! Просто вызвать
> функцию без параметров и проверить результат, все!

Вообщето меня интересовала функция NetWkstaUserEnum.
Что же касательно WTSGetActiveConsoleSessionId то что я там могу получить?
Она возвращает числа, все время разные, что они означают.
Я думал, что пока юэер не залогинился будет 0, ничего подобного.
Может пояснишь?
Прежде, чем что-то советовать, да еще в такой форме попробуй сам.
Кстати вышивать не пробовал?


 
Ботвин Дмитрий   (2005-11-29 16:01) [10]

Вот так пробуй:

LMSTR = LPWSTR;
NET_API_STATUS = DWORD;
 
function NetWkstaUserEnum(servername: LMSTR;  level: DWORD;
   var bufptr: Pointer;  prefmaxlen: DWORD; var entriesread: DWORD;
   var totalentries: DWORD; var resumehandle: DWORD): NET_API_STATUS;
   stdcall; external "netapi32.dll" name "NetWkstaUserEnum";

function NetApiBufferFree(buffer: Pointer): Cardinal; stdcall; external "netapi32.dll";

function _GetUserName: String;
 type THostInfo = record wkui0_username: PWideChar; end;
 var
   Info: Pointer;
   ElTotal,ElCount,Resume: DWord;
   HostInfo: THostInfo;
 begin
   Resume:=DWord(0);
   Info:=nil;
   NetWkstaUserEnum(nil,0,Info,64,ElCount,ElTotal,Resume);
   if Info<>nil then
     try
       HostInfo:=THostInfo(info^);
       Result:=Trim(HostInfo.wkui0_username);
     except
       Result:="Не залогинелся...";
     end
   else Result:="Не залогинелся...";
   NetApiBufferFree(Info);
 end;


 
Ботвин Дмитрий   (2005-11-29 16:14) [11]

Ботвин Дмитрий   (29.11.05 16:01) [10]

P.S. Анализ значения, возвращаемого функцией NetWkstaUserEnum, в случае неудачного вызова реализуй сам.


 
Набережных С. ©   (2005-11-29 17:25) [12]


> kolos_rus ©   (29.11.05 13:29) [9]


> Кстати вышивать не пробовал?

Пробовал - замечательно получается. У меня все замечательно получается, за что берусь.

> Вообщето меня интересовала функция NetWkstaUserEnum

Пост [6]. Если уж врешь, то хотя-бы нет так бездарно:(

> Она возвращает числа, все время разные, что они означают.
>
> Я думал, что пока юэер не залогинился будет 0, ничего подобного.
>

А зачем что-то придумывать, если

> По описанию в MSDN очень похоже

а там все очень четко сказано?

> Прежде, чем что-то советовать, да еще в такой форме попробуй
> сам.

Да я-то пробовал. А советовать - договорились, не буду.


 
kolos_rus ©   (2005-11-30 09:25) [13]


> Ботвин Дмитрий   (29.11.05 16:01) [10]
> Вот так пробуй:

Попробовал получилось.
Серви по таймеру каждую секунду пишет результат _GetUserName в файл.
Правда возвращает все время одно и то же имя.
Завершаю сеанс, вхожу под другим именем все равно одно и то же.
Ни разу не выдало "не залогинился".
Сама функция NetWkstaUserEnum возвращает все время 254.
Вообщем мне так и не удалось выяснить залогинелся юзер или нет.


 
kolos_rus ©   (2005-11-30 09:29) [14]


> kolos_rus ©   (28.11.05 11:33) [7]

Хватит препираться. Я еще в
> Набережных С. ©   (29.11.05 17:25) [12]

написал, что ошибся цитатой и меня интересует NetWkstaUserEnum.
А WTSGetActiveConsoleSessionId все время возвращает 0.


 
BiN ©   (2005-11-30 09:57) [15]


> kolos_rus ©   (30.11.05 09:25) [13]
>
> Попробовал получилось.
> Серви по таймеру каждую секунду пишет результат _GetUserName
> в файл.
> Правда возвращает все время одно и то же имя.
> Завершаю сеанс, вхожу под другим именем все равно одно и
> то же.
> Ни разу не выдало "не залогинился".
> Сама функция NetWkstaUserEnum возвращает все время 254.
> Вообщем мне так и не удалось выяснить залогинелся юзер или
> нет.


Пример тёзки Ботвина возвращает имя только первого в списке пользователя.
Вместо того, чтобы бездумно скатывать код иногда имеет смысл читать описание самому.


 
kolos_rus ©   (2005-11-30 10:08) [16]

Совершенно согласен насчет читать описание.
Но деле в том, что сервис должен выполнять свои функции если workstation не заблокирована и отдыхать, когда заблокирована. По результатам получается, что даже сразу после перезагрузки уже кто-то залогинился. Мне ведь даже не надо имя пользователя ни первое, ни второе.
Похоже, что иду не в ту сторону. Кстати имя текущего пользователя можно выяснить через реестр, но после выхода этого пользователя из системы и до входа другого оно (имя) в реестре не затирается.


 
BiN ©   (2005-11-30 10:20) [17]


> kolos_rus ©   (30.11.05 10:08) [16]
>
> Похоже, что иду не в ту сторону.


Что именно должен делать твой сервис?


 
kolos_rus ©   (2005-11-30 10:39) [18]

Он должен общаться с пользователем, т.е. сервис интерактивный, а выдавть окна с сообщениями, а тем более окна для ввода при отсутствии пользователя смысла нет.


 
BiN ©   (2005-11-30 10:48) [19]


> kolos_rus ©   (30.11.05 10:39) [18]
>
> Он должен общаться с пользователем, т.е. сервис интерактивный,
>  а выдавть окна с сообщениями, а тем более окна для ввода
> при отсутствии пользователя смысла нет.


С самого начала ты пытаешься нарушить сервисную идеологию.
В идеале пользователь должен сам инициировать "диалог"  с сервисным приложением. Какие механизмы ты для этого будешь использовать - вопрос второй.


 
kolos_rus ©   (2005-11-30 11:14) [20]

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


 
Набережных С. ©   (2005-11-30 11:28) [21]


> kolos_rus ©   (30.11.05 09:29) [14]


> Хватит препираться.

Ну вот именно тебя я и забыл спросить, чего мне делать, а чего нет. Но, думаю, и дальше без твоих разрешений как-нибудь обойдусь.


 
BiN ©   (2005-11-30 11:30) [22]


> kolos_rus ©   (30.11.05 11:14) [20]
>
> Смысл в том, что сервис контролирует доступ к удаленной
> базе данных. Если база недоступна (а этого пользователь
> не знает и потому не может сам начать диалог) сервис должен
> запросить настроечные данные для доступа к базе.


Что-то мешает пользовательскому приложению запросить статус доступности БД у службы?


 
kolos_rus ©   (2005-11-30 11:38) [23]


> Набережных С. ©   (30.11.05 11:28) [21]

Всетаки ты первый начал хамить.


 
kolos_rus ©   (2005-11-30 11:38) [24]


> Что-то мешает пользовательскому приложению запросить статус
> доступности БД у службы?

С базой работает только сервер.


 
kolos_rus ©   (2005-11-30 11:39) [25]


> kolos_rus ©   (30.11.05 11:38) [24]
>
> > Что-то мешает пользовательскому приложению запросить статус
>
> > доступности БД у службы?
>
> С базой работает только сервер.
> <Цитата>

Извиняюсь, последнее слово читать как сервис.


 
Набережных С. ©   (2005-11-30 11:50) [26]


> kolos_rus ©   (30.11.05 11:38) [23]

Плохо дело:( Тебе надо попросить родителей рассказать, чем отличается хамство от насмешки. В жизни пригодится.


 
Ботвин Дмитрий   (2005-11-30 11:50) [27]

Специально для тех, кто считает, что функция NetWkstaUserEnum возвращает всегда имя первого юзера из списка выдержка из мсдн:

The NetWkstaUserEnum function lists information about all users currently logged on to the workstation. This list includes interactive, service and batch logons.

kolos_rus ©

Ищи у себя ошибку :-)))


 
BiN ©   (2005-11-30 12:00) [28]


> kolos_rus ©   (30.11.05 11:38) [24]
>
>
>
> С базой работает только сервер (сервис).


Отлично, вот и пусть служба выступает в роли прокси для запросов от пользователя.


 
kolos_rus ©   (2005-11-30 12:11) [29]


> Отлично, вот и пусть служба выступает в роли прокси для
> запросов от пользователя

А если служба не знает как найти базу?


 
BiN ©   (2005-11-30 12:15) [30]


> kolos_rus ©   (30.11.05 12:11) [29]
>
>
> > Отлично, вот и пусть служба выступает в роли прокси для
>
> > запросов от пользователя
>
> А если служба не знает как найти базу?


А кто знает?
Если пользователь, то клиентское приложение должно перед инициированием диалога со службой запросить у пользователя путь к БД и всё.
Вообще-то, тема уже кандидат в "Потрепаться".



Страницы: 1 вся ветка

Текущий архив: 2006.02.12;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.05 c
15-1138086687
konda
2006-01-24 10:11
2006.02.12
Языковая панель в Windows XP


2-1138022575
Змей
2006-01-23 16:22
2006.02.12
цвет из colordialog1 в HTML


2-1137175072
asd
2006-01-13 20:57
2006.02.12
ActionManager1.AddAction


3-1134387258
Wolferio
2005-12-12 14:34
2006.02.12
Управление базами


1-1136791731
beglec
2006-01-09 10:28
2006.02.12
Долгое копирование потока. Как решить?