Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

узнать время начала сессии пользователя..


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо