Текущий архив: 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.52 MB
Время: 0.043 c