procedure TfrmWhoopie.Button1Click(Sender: TObject);
var adUsr : IADsUser;
n: integer;
disp: IDISPATCH;
li: IADsLargeInteger;
x: LARGE_INTEGER;
time:Double;
logonDate: TDateTime;
begin
ADsGetObject('LDAP://'+ADOQuery1.FieldByName('distinguishedName').AsString, IADsUser, adusr);
n := adusr.Get('logonCount');
if n > 0 then
begin
disp := adusr.Get('LastLogonTimeStamp');
li := disp as IADsLargeInteger;
x.LowPart := li.LowPart;
x.HighPart := li.HighPart;
time := Li2Double(x);
time := time / 60;
time := time / 10000000;
time := time / 1440;
logonDate := EncodeDate(1601, 1, 1);
logonDate := logonDate + time;
// this is in GMT
ShowMessage(DateTimeToStr(logonDate));
function Li2Double(x: LARGE_INTEGER): Double;
begin
Result := x.HighPart * 4.294967296E9 + x.LowPart
end;
function GetTimeZoneBias: Integer;
var
tz: TTimeZoneInformation;
begin
case GetTimeZoneInformation(tz) of
TIME_ZONE_ID_STANDARD: Result := -(tz.StandardBias + tz.Bias) div (24*60);
TIME_ZONE_ID_DAYLIGHT: Result := -(tz.DaylightBias + tz.Bias) div (24*60);
else
Result := 0;
end;
end;
procedure TfrmWhoopie.Button1Click(Sender: TObject);
var adUsr : IADsUser;
n: integer;
disp: IDISPATCH;
li: IADsLargeInteger;
x: LARGE_INTEGER;
time, bias:Double;
logonDate: TDateTime;
fmt: TFormatSettings;
begin
ADsGetObject('LDAP://'+ADOQuery1.FieldByName('distinguishedName').AsString, IADsUser, adusr);
n := adusr.Get('logonCount');
if n > 0 then
begin
disp := adusr.Get('LastLogonTimeStamp');
li := disp as IADsLargeInteger;
x.LowPart := li.LowPart;
x.HighPart := li.HighPart;
time := Li2Double(x);
bias := GetTimeZoneBias/24;
time := time / 60;
time := time / 10000000;
time := time / 1440;
logonDate := EncodeDate(1601, 1, 1);
logonDate := logonDate + time + bias;
ShowMessage(DateTimeToStr(logonDate));
end;
end;
procedure TfrmWhoopie.Button1Click(Sender: TObject);
var adUsr : IADsUser;
n: integer;
disp: IDISPATCH;
li: IADsLargeInteger;
logonDate: TDateTime;
lpSysTime: TSystemTime;
ft: TFileTime;
begin
ADsGetObject('LDAP://'+ADOQuery1.FieldByName('distinguishedName').AsString, IADsUser, adusr);
n := adusr.Get('logonCount');
if n > 0 then
begin
disp := adusr.Get('LastLogonTimeStamp');
li := disp as IADsLargeInteger;
ft.dwLowDateTime := li.LowPart;
ft.dwHighDateTime := li.HighPart;
if FileTimeToSystemTime(ft, lpSysTime) then
begin
LogonDate := SystemTimeToDateTime(lpSysTime);
ShowMessage(DateTimeToStr(logonDate));
end;
end;
end;
procedure TfrmWhoopie.Button1Click(Sender: TObject);
var adUsr : IADsUser;
n: integer;
disp: IDISPATCH;
li: IADsLargeInteger;
logonDate: TDateTime;
lpSysTime: TSystemTime;
ft: TFileTime;
localft: TFileTime; //*NEW*
begin
ADsGetObject('LDAP://'+ADOQuery1.FieldByName('distinguishedName').AsString, IADsUser, adusr);
n := adusr.Get('logonCount');
if n > 0 then
begin
disp := adusr.Get('LastLogonTimeStamp');
li := disp as IADsLargeInteger;
ft.dwLowDateTime := li.LowPart;
ft.dwHighDateTime := li.HighPart;
if FileTimeToLocalFileTime(ft, localft) then //*NEW* time zone shift
if FileTimeToSystemTime(localft, lpSysTime) then
begin
LogonDate := SystemTimeToDateTime(lpSysTime);
ShowMessage(DateTimeToStr(logonDate));
end;
end;
end;