![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
узнать время начала сессии пользователя..
istok © (2010-09-20 11:00:00)как узнать время логона юзера? (gettickcount возвращает время старта винды а не сессии...)
Anatoly Podgoretsky (2010-09-21 09:30:00) [1]> istok (20.09.2010 19:56:12) [12]
Из справки!
UTC = local time + bias
istok (2010-09-20 21:29:00) [2]вопрос решен, всем спасибо):
function GMTToLocalTime(GMTTime: TDateTime): TDateTime;
var
GMTST: Windows.TSystemTime;
LocalST: Windows.TSystemTime;
begin
SysUtils.DateTimeToSystemTime(GMTTime, GMTST);
SysUtils.Win32Check(Windows.SystemTimeToTzSpecificLocalTime(nil, GMTST, LocalST));
Result := SysUtils.SystemTimeToDateTime(LocalST);
end;
istok (2010-09-20 19:56:00) [3]о, а каким методом стабильно конвертить это время в своё локальное?
Anatoly Podgoretsky (2010-09-20 19:54:00) [4]> istok (20.09.2010 19:51:10) [10]
Для информации
В мире кроме часового пояса еще есть и летнее время.
istok (2010-09-20 19:51:00) [5]а кто сказал что я по гринвичу считаю.. я просто говорю что полученное время отстает от реального на 4 часа. и к сведению сообщаю что моя зона - gmt+3 (мало ли, вдруг скажете что у меня наверно gmt+4 и надо 4 прибавлять..)
sniknik (2010-09-20 19:44:00) [6]> только время показывает на 4 часа раньше чем надо) а у меня gmt+3...
ты, что время с момента логина юзера по Гринвичу считаешь??? при чем тут это?
типа пришел на работу и залогинился 10 мин назад, но по Гринвичу... проработал уже 3 ч. 10 мин. .... клево.
istok (2010-09-20 18:22:00) [7]сделал.. через filetime:
ft: TFileTime;
st: TSystemTime;
dt: TDateTime;
...
ft.dwLowDateTime := sessionData.LogonTime.LowPart;
ft.dwHighDateTime := sessionData.LogonTime.HighPart;
FileTimeToSystemTime(ft, st);
dt := EncodeDateTime(st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
только время показывает на 4 часа раньше чем надо) а у меня gmt+3...
12 (2010-09-20 17:48:00) [8]да, по-хитрому, поищите в конфе борланда, кто-то писал
sniknik (2010-09-20 17:47:00) [9]> но как это дело в tdatetime превратить правильно?
что значит "превратить правильно"? один 64бита, другой 64 бита... простое привидение типа, туда обратно значение не испортит ("превратит" и "разпревратит"), но разве ж это правильно?
посмотри в док, что за значение эта переменная представляет, тогда уж и будешь думать как преобразовать.
istok (2010-09-20 17:10:00) [10]с LogonId разобрался, заюзал всё же enum...
но вот незадача - как sessionData.LogonTime прочитать... т.е. я понимаю что .QuadPart это int64.. но как это дело в tdatetime превратить правильно?
12 (2010-09-20 16:16:00) [11]не могу найти пример уже, наверное погиб смертью храбрых при смене компа
JEDI можно раскопать/погуглить, там как -то проще все это описано/импортировано было, что-то нужно было как-то сделать и не составило труда, помнится
12 (2010-09-20 16:01:00) [12]
> если у меня уже есть sessionid
откуда и как взялось?
> его в LogonId никак не конвертнуть?
формально совпадает если - прочему бы и нет :)
istok (2010-09-20 15:19:00) [13]спасибо,
никак не могу получить LogonId: PLUID, не хочется делать полную энумирацию, если у меня уже есть sessionid - его в LogonId никак не конвертнуть?
12 (2010-09-20 11:13:00) [14]LsaGetLogonSessionData