Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Zeit, die der User angemeldet ist (https://www.delphipraxis.net/157643-zeit-die-der-user-angemeldet-ist.html)

Ines 19. Jan 2011 14:35

Zeit, die der User angemeldet ist
 
Hallo DP'ler,

ich möchte wissen, wie lange ein Nutzer am System (Windows XP) bereits angemeldet ist.

Mit GetTickCount kann ich ermitteln, wielange Windows XP bereits läuft, allerdings möchte ich auch wissen, wielange ein Nutzer bereits eingeloggt ist.

Ich bin beim Suchen hier über die API-Funktion LsaGetLogonSessionData() gestolpert - komme damit aber nicht zurecht.

Gibt es etwas Einfaches :?

Vielen Dank für Eure Hilfe
Ines

himitsu 19. Jan 2011 15:13

AW: Zeit, die der User angemeldet ist
 
Zitat:

Zitat von Ines (Beitrag 1075816)
komme damit aber nicht zurecht.

Eigentlich sollte das doch nicht schwer sein.
Wo hängst du denn damit?

PS: Im MSDN stehen alle nötigen Infos MSDN-Library durchsuchenLsaGetLogonSessionData und MSDN-Library durchsuchenSECURITY_LOGON_SESSION_DATA.

Luckie 19. Jan 2011 15:17

AW: Zeit, die der User angemeldet ist
 
Also so ganz trivial ist es nicht. Das Beispiel aus dem MSDN ist schon recht komplex und das mit Delphi nachbauen dürfte auch nicht in fünf Minuten gemacht sein. Das Problem ist ja die richtige SessionID zu bekommen. Und wir wären wieder bei dem Problem, was ist der eingeloggte Benutzer? Es kann ja auch TerminalSessions geben, dann kann man mehrere eingeloggte Benutzer haben. ;)

Insofern muss ich ihr schon recht geben. Vor allem, wenn man mit der WinaAPI nicht so vertraut ist.

hathor 19. Jan 2011 16:17

AW: Zeit, die der User angemeldet ist
 
JwaNtSecApi... da ist es drin:
http://www.google.com/codesearch/p?h...a=N&cd=1&ct=rc

Ines 20. Jan 2011 06:47

AW: Zeit, die der User angemeldet ist
 
Guten Morgen und Danke für Eure Hilfe.

Zitat:

Zitat von Luckie (Beitrag 1075829)
Insofern muss ich ihr schon recht geben. Vor allem, wenn man mit der WinaAPI nicht so vertraut ist.

Genau das ist mein Problem - ich habe mir aber jetzt mehrere Beispiele ausgedruckt und werde sehen, was ich daraus machen kann.

Liebe Grüße
Ines

SirThornberry 20. Jan 2011 07:02

AW: Zeit, die der User angemeldet ist
 
Wenn du nicht weiter kommst kannst du jederzeit gern fragen. Ich denke bisher hast du wenig Quelltext-Hilfe bekommen weil keine konkrete Frage danach bestand. Und einfach den kompletten Quelltext zu posten ist nicht unsere Art weil wir ja sehen wollen das der andere sich auch bemüht und nicht andere die Arbeit machen lässt.
Wenn du also genau sagst was dein derzeitiges Problem mit der Funktion ist, denke ich, wirst du recht schnell auch konkretere Hilfe dazu bekommen.

Ines 20. Jan 2011 11:23

AW: Zeit, die der User angemeldet ist
 
Hallo,

ich muß Euch nochmals belästigen.

Über LsaGetLogonSessionData bekomme ich die Logon-Zeit als Large_Integer (wußte bisher garnicht, daß es so etwas gibt) :)

Wie kann ich einen Large_Integer-Wert in ein DateTime umwandeln? Mit der Funktion UnixToDateTime bin ich nicht recht weitergekommen - es kam keine plausible Zeit dabei heraus.

Ich will nur einen Denkansatz oder ein paar Stichworte - keinen fertigen Code.:glaskugel:

Viele Grüße
Ines

SirThornberry 20. Jan 2011 11:54

AW: Zeit, die der User angemeldet ist
 
Ein TDateTime ist hier glaub ich die falsche Wahl denn der ist für Uhrzeiten + Datum. Wenn du Eine Zeit > 24 Stunden hast gibt es dann Probleme diesen Wert vernünftig anzuzeigen.

Ines 20. Jan 2011 12:01

AW: Zeit, die der User angemeldet ist
 
Welches Format oder welche Einheit sind in LogonTime hinterlegt? Sind das Millisekunden?

Liebe Grüße
Ines

SirThornberry 20. Jan 2011 12:11

AW: Zeit, die der User angemeldet ist
 
Oh, ich habe Mist geschrieben. Ich bin davon ausgegangen das die die Funktion die Dauer zurück gibt, die der Nutzer bereits eingeloggt ist oder du die Dauer die du errechnest als TDateTime haben willst.

ChrisE 20. Jan 2011 12:13

AW: Zeit, die der User angemeldet ist
 
Hallo,

soweit ich das verstanden habe hier ist das der echte Zeitpunkt an dem sich der User angemeldet hat. Und das in Differenz zu MSDN-Library durchsuchenGetTickCount64 bzw. MSDN-Library durchsuchenGetTickCount dürfte die dauer sein.
[EDIT] in ms[/EDIT]

Reine Vermutung.

Gruß, Chris

kopernikus 21. Okt 2011 14:35

AW: Zeit, die der User angemeldet ist
 
LogonTime ist die absolute Zeit als UTC (Datum + Tageszeit) im Format TFileTime. Eine Konvertierung in das TDateTime-Format kann mit folgender Routine erfolgen:
Delphi-Quellcode:
{ ------------------------------------------------------------------- }
// convert Filetime to Delphi time (TDateTime)
function FileTimeToDateTime (ft : TFileTime) : TDateTime;
var
  st : TSystemTime;
  dt : TDateTime;
begin
  FileTimeToSystemTime(ft,st);
  with st do begin
    if TryEncodeDate(wYear,wMonth,wDay,Result) then begin
      if TryEncodeTime(wHour,wMinute,wSecond,wMilliseconds,dt) then Result:=Result+dt;
      end
    else Result:=EncodeDate(1980,1,1);
    end;
  end;

kopernikus 8. Nov 2011 08:42

AW: Zeit, die der User angemeldet ist
 
Den gesamten Quelltext der Routine zum Abfragen der Sitzungsdaten (SessionData) findet man hier.

virus82 7. Jan 2012 20:12

AW: Zeit, die der User angemeldet ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe gerade auch ein Problem mit der Logon Zeit. Und zwar wenn sich ein User mehrmals am system an- und abmeldet tauchen seine Session in LsaEnumerateLogonSessions mehrmal auf. Alle mit der gleichen Session ID. Wie kann ich die richtige herausfiltern?

Hier wird mein Prolem nochmal geschildert. http://www.delphipraxis.net/165575-l...liste-aus.html

Man kann es auch im Bild erkennen. User Test ist hier gerade nicht angemeldet, aber wenn er es wäre würde bei allen Einträgen das gleiche stehen. Welcher Eintrag ist der richtige?

Frickler 10. Jan 2012 10:08

AW: Zeit, die der User angemeldet ist
 
Zitat:

Zitat von kopernikus (Beitrag 1134934)
Den gesamten Quelltext der Routine zum Abfragen der Sitzungsdaten (SessionData) findet man hier.

Wo holst Du da die ganzen Typen (z.B. TSecurityLogonType, TWTSQuerySessionInformation) her?

himitsu 10. Jan 2012 10:16

AW: Zeit, die der User angemeldet ist
 
Gib mal bei Google "TSecurityLogonType" ein (in diesem Fall inklusive der Anführungszeichen), wobei man auch nach Hier im Forum suchenTSecurityLogonType in der DP suchen könnte. (Einer der aktuell beiden Fundorte enthält die Lösung)

virus82 12. Jan 2012 08:56

AW: Zeit, die der User angemeldet ist
 
Hat schon jemand für die doppelten Einträge eine Lösung gefunden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz