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!