Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.063 c
3-1134209177
312Kbps
2005-12-10 13:06
2006.02.12
файл данных *.gtd !!!


4-1133182418
Zeleniy
2005-11-28 15:53
2006.02.12
Как записать название раскладки клавиатуры (en, ru и т.д) в label


15-1137841026
Andy BitOff
2006-01-21 13:57
2006.02.12
Borland Developer Studio


3-1134730429
y0zh
2005-12-16 13:53
2006.02.12
Служба + Firebird


6-1131019600
nikk
2005-11-03 15:06
2006.02.12
Получение папок локального компа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский