AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

User einer WindowStation

Ein Thema von Thanatos81 · begonnen am 14. Aug 2008 · letzter Beitrag vom 14. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Thanatos81
(Gast)

n/a Beiträge
 
#1

User einer WindowStation

  Alt 14. Aug 2008, 09:13
Moin zusammen!

Wir haben hausintern ein Programm, welches alle Fenstertitel auflistet, mit einer vorher angelegten Liste vergleicht und bei Übereinstimmung die Laufzeit des Programms protokolliert. Diese Anwendung liegt bei fast jedem Mitarbeiter im Autostart und "läuft als Symbol in der TNA im Hintergrund".

Nun möchte ich als Fingerübung das Programm in einen Service umschreiben. Die ersten Schritte waren auch alle von Erfolg gekrönt. Ich iteriere durch alle WindowStations, öffnen den Standard-Desktop der WindowStation und enummeriere alle Fenstertitel. Nun kann es vorkommen, dass ein PC von mehreren Mitarbeitern genutzt wird. Deswegen soll nur aufgezeichnet werden, wenn die Anwendung von einem vorher definierten Benutzer ausgeführt wird.

Also würde ich gerne raus finden, welcher Benutzer in der jeweiligen WindowStation angemeldet ist. Mein bisheriger Code sieht folgendermaßen aus:
Delphi-Quellcode:
wsList := TWindowList.Create; //Liste aller WindowStations
wiList := TWindowList.Create; //Liste der Fenster einer WindowStation
try
  wsList.EnumWindowStations;
  for k := 0 to wsList.Count - 1 do
  begin
    wWnd := 0;
    dWnd := 0;
    wWnd := OpenWindowStation(wiList[k], FALSE, MAXIMUM_ALLOWED); //WindowStation öffnen
    if wWnd <> 0 then
      if SetProcessWindowStation(wWnd) then //Zur WindowStation verbinden
        dWnd := OpenDesktop('Default', 0, FALSE, MAXIMUM_ALLOWED); //Desktop öffnen
    if dWnd <> 0 then
      if SetThreadDesktop(dWnd) then //Zum Desktop verbinden
      begin
        wiList.EnumTopLevelWindows; //Fenster des Dekstops suchen
        for l := 0 to wiList.Count - 1 do
          if IsMainAppWindow(wiList.Handles[l]) then
            s := s + wiList[l] + ';';
      end;
  end;
  protIt(s);
finally
  FreeAndNil(wsList);
  FreeAndNil(wiList);
end;
Kennt jemand eine Möglichkeit anhand des Handles einer WindowStation oder eines Desktops den zugehörigen Benutzer zu finden?

Vielen Dank im Vorraus!
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: User einer WindowStation

  Alt 14. Aug 2008, 09:19
Liefert die API Function

GetUserName nicht sowieso den angemeldeten Benutzer?
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: User einer WindowStation

  Alt 14. Aug 2008, 09:24
Nein tut sie nicht. MSDN-Library durchsuchenGetUsername gibt den Benutzernamen aus, in dessem Kontext der aufrufenden Thread ausgeführt wird.
Zitat von Windows SDK:
Retrieves the name of the user associated with the current thread.
Ausserdem können meherere Benutzer an einem Rechner angemeldet sein, was sollte da GetUsername zurückliefern, wenn es so funktionieren würde, wie du denkst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

Re: User einer WindowStation

  Alt 14. Aug 2008, 09:28
Der angemeldete User steckt in der Session, nicht in der Windowstation!
Zudem funktioniert das Fensterhandleauslesen nicht über Dienste. Dass es hier funktioniert liegt nur daran, dass unter XP Dienste und der erste angemeldete Benutzer sich in derselben Session 0 befinden. Über Sessiongrenzen hinweg, wie bei FUS oder Vista wird das versagen.
WTSQuerySessionInformation liefert dir mit WTSGetActiveConsoleSession den Name des am PC sitzenden, eingeloggten Benutzers. In Windows 2000 Workstation funkz das nicht. Dann müssen Ausweichroutinen her, wie z.B. in der JWSCL.

Bitte beachten, dass mehrere Leute sich in einer Session anmelden können (z.B. runas)
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#5

Re: User einer WindowStation

  Alt 14. Aug 2008, 10:12
Hmmm...

Wie wäre es mit einer anderen Vorgehensweise. Ich könnte mir ja eine Liste aller laufenden Prozesse holen und hätte dabei die Information unter welchem Benutzerkonto der Prozess ausgeführt wird. Das sollte ja auch im Multi-User-Betrieb funktionieren, siehe Windows Taskmanager. Könnte ich dann innerhalb des Dienstes anhand des Prozesshandles den Fenstertitel auslesen?

Denn den Fenstertitel bräuchte ich, da der Hauptzweck des Programmes darin besteht, die Delphi-Fenster zu überwachen und das mit dem geöffneten Projekt. Wir nutzen das um einen ungefähren Überblick zu erhalten, wie lange an einem Projekt gearbeitet wird und dies dann mit unseren händischen Aufzeichnungen zu vergleichen.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: User einer WindowStation

  Alt 14. Aug 2008, 10:31
Zitat von Thanatos81:
Hmmm...

Wie wäre es mit einer anderen Vorgehensweise. Ich könnte mir ja eine Liste aller laufenden Prozesse holen und hätte dabei die Information unter welchem Benutzerkonto der Prozess ausgeführt wird. Das sollte ja auch im Multi-User-Betrieb funktionieren, siehe Windows Taskmanager. Könnte ich dann innerhalb des Dienstes anhand des Prozesshandles den Fenstertitel auslesen?
Nein geht nicht. Fensterhandles über Sessiongrenzen hinweg zu nutzen ist nicht vorgesehen und verboten.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#7

Re: User einer WindowStation

  Alt 14. Aug 2008, 10:37
Es gibt also keine verlässliche Möglichkeit, als Dienst die Titel aller von einem Benutzer geöffneten Fenster zu erhalten? Das würde mich aber enttäuschen, dass so etwas nicht vorgesehen ist ;-(
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#8

Re: User einer WindowStation

  Alt 14. Aug 2008, 10:42
Man muss in jede Session ein Prozess starten, der diese Aufgabe übernimmt.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#9

Re: User einer WindowStation

  Alt 14. Aug 2008, 10:50
Und genau das wollte ich ja vermeiden, denn dann wäre ich wieder bei dem Stand, bei dem wir jetzt sind (In Tray minimiertes Programm beim Autostart). Schade, dann muss ich die Idee wohl als nicht durchführbar betrachten.

Trotzdem vielen Dank für die Antworten allerseits!
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#10

Re: User einer WindowStation

  Alt 14. Aug 2008, 11:07
Also ich rede nicht von einem Autorstartprogramm, sondern von einem Prozess der vom Dienst bei Notwendigkeit gestartet wird und sich dann beendet. Wer braucht denn da noch Autostart? Ist eh unzuverlässig.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 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