![]() |
User einer WindowStation
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:
Kennt jemand eine Möglichkeit anhand des Handles einer WindowStation oder eines Desktops den zugehörigen Benutzer zu finden?
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; Vielen Dank im Vorraus! |
Re: User einer WindowStation
Liefert die API Function
Delphi-Quellcode:
nicht sowieso den angemeldeten Benutzer?
GetUserName
|
Re: User einer WindowStation
Nein tut sie nicht.
![]() Zitat:
|
Re: User einer WindowStation
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) |
Re: User einer WindowStation
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. |
Re: User einer WindowStation
Zitat:
|
Re: User einer WindowStation
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 ;-(
|
Re: User einer WindowStation
Man muss in jede Session ein Prozess starten, der diese Aufgabe übernimmt.
|
Re: User einer WindowStation
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! |
Re: User einer WindowStation
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr. |
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