Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Angemeldeten Benutzer aus Dienst ermitteln (https://www.delphipraxis.net/104153-angemeldeten-benutzer-aus-dienst-ermitteln.html)

Dezipaitor 11. Dez 2007 22:08

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Nein, du bist mit deinen Gedanken weit von der Erde entfernt, wo das Problem liegt :angel:
Es wurde einfach in der Groß-Kleinschreibung unterschieden. Das ist aber bei Prozessnamen egal. :wall:
Wenn du Update machst, sollte es funktionieren. :cheers:

xZise 12. Dez 2007 14:03

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Zitat:

Zitat von Dezipaitor
Nein, du bist mit deinen Gedanken weit von der Erde entfernt, wo das Problem liegt :angel:

Ich wusste es schon immer xD Ich bin ein Ausserirdischer xD

Zitat:

Zitat von Dezipaitor
Es wurde einfach in der Groß-Kleinschreibung unterschieden. Das ist aber bei Prozessnamen egal. :wall:
Wenn du Update machst, sollte es funktionieren. :cheers:

Hehe ^^ Nagut ;)
Also es lässt sich nun kompilieren und ausführen.
Und er scheint auch einen Benutzernamen zu bekommen ;) Habe leider es nur nicht in der Aufregung getestet :oops:
Wird Freitag wahrscheinlich erst was xD

MfG
xZise

xZise 15. Apr 2008 06:58

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Hallo,
ich wollte gerade mal meinen Serivce wieder testen und auf Vordermann bringen, und dann habe ich das Problem, das die JWSCL meint, es gäbe die "Explorer.exe" nicht:
Delphi-Quellcode:
An Exception of type EJwsclProcessNotFound was raised.

(Data was given by programmer and can vary from actual source.)

Source method....: CreateCompatibilityQueryUserToken

Source class.....: TJwSecurityToken

Source file......: JwsclToken.pas

Source line......: 0


Message : The process "EXPLORER.EXE" could not be found.
Obwohl ich eindeutig jetzt mit den Rechner schreibe, und wie man sieht :) Es funktioniert, mit Explorer.exe!

MfG
xZise

Dezipaitor 15. Apr 2008 11:28

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Ich vermute mal, dass CreateToolHelp32SnapShot nicht alle Prozesse von allen Sessions auflistet.

Du kannst CreateWTSQueryUserTokenEx verwenden, welche die Angabe einer Session erlaubt.

EDIT: In der Tat, es handelt sich bei der CreateCompatibilityQueryUserToken um eine Funktion, die nur für WindowsNT, 2000 und XP überhaupt funktioniert und dann auch nur für den ersten eingeloggten Benutzer, weil dieser eben in derselben Session des Dienstes (Session 0) sich befindet. Alles andere funktioniert nicht.

xZise 15. Apr 2008 15:40

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Es war ganz einfach (vermute ich): Da ich die falschen Quellen genommen habe, funktionierte das auch dann nicht, wenn einer angemeldet ist. Ansonsten ist mir das egal ;)

MfG
xZise

Dezipaitor 15. Apr 2008 15:43

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Zitat:

Zitat von xZise
Es war ganz einfach (vermute ich): Da ich die falschen Quellen genommen habe, funktionierte das auch dann nicht, wenn einer angemeldet ist. Ansonsten ist mir das egal ;)

MfG
xZise

Verstehe ich nicht!

xZise 15. Apr 2008 19:26

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Also:
Es gibt verschiedene Stadien:
  1. Offline (Computer ist ausgeschaltet)
  2. Keiner angemeldet (Computer ist eingeschaltet)
  3. Online (Jemand ist angemeldet und benutzt den PC)
Im ersten Fall passiert nichts :mrgreen: .
Im zweiten hingegen sucht JWSCL nach "Explorer.exe", welches es aber nicht findet bzw. finden kann, also ist die Fehlermeldung angebracht (oder geht das auch "netter"?).
Und im letzten Stadium erkennt die JWSCL die "Explorer.exe" und kann dessen Benutzer einwandfrei ausgeben :)

MfG
xZise

Dezipaitor 15. Apr 2008 20:01

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Ich habe dieses Artikel mal darüber geschrieben.

http://blog.delphi-jedi.net/2008/04/...m-a-service-2/

xZise 30. Mär 2009 16:04

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Hallo,
also ich verwende inzwischen folgenden Code:
Delphi-Quellcode:
function GetUserName : string;
var
  Token : TJWSecurityToken;
begin
  Token := TJwSecurityToken.CreateWTSQueryUserToken(TOKEN_ALL_ACCESS);
  try
    try
      Result := Token.TokenOwner.AccountName[''];
      AddToLog('Username requested: ' + Result);
    except
      on e : Exception do
      begin
        AddToLog('@GetUsername' + #13#10 + e.Message);
        Result := '';
      end;
      on e : EJWSCLProcessNotFound do
      begin
        AddToLog('No user is loged on');
        Result := '';
      end;
    end;
  finally
    Token.Free;
  end;
end;
Und bei dem Aufruf von „TJwSecurityToken.CreateWTSQueryUserToken(TOKEN_AL L_ACCESS);“ bekomme ich dann folgenen Fehlertext:
Zitat:

An Exception of type EJwsclWinCallFailedException was raised.

(Data was given by programmer and can vary from actual source.)

Source method....: WTSQueryUserToken

Source class.....: TJwSecurityToken

Source file......: JwsclToken.pas

Source line......: 0

GetLastError.....: 7022 ($1B6E)

GetLastErrorMsg..: Die angegebene Sitzung wurde nicht gefunden.



Message : A call to WTSQueryUserToken failed. Session ID: 983551
MfG
xZise

Dezipaitor 30. Mär 2009 19:14

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Zitat:

Message : A call to WTSQueryUserToken failed. Session ID: 983551
Wow, da muss aber was schief gegangen sein. So eine SessionID gibt es sicher nicht.

Fragen:
1. Wird die Funktion aufgerufen, wenn kein Benutzer angemeldet ist?
2. Welche Windows Version verwendest du?
3. Welche JWSCL Version verwendest du (0.9.2a?) und welche Updateversion (=Subversion revision) hast du (wenn du das nicht weißt, dann genügt mit das auch)?


--

Delphi-Quellcode:
Result := Token.TokenOwner.AccountName[''];
TokenOwner ist der Besitzer des Tokens - das ist meist "Administratoren". Was du suchst ist das Property TokenUser.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 Uhr.
Seite 4 von 5   « Erste     234 5      

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