Ich arbeite an einem Dienst, der Benutzerstatus für alle Benutzer ermitteln muss, die an einem einzelnen Computer angemeldet sind. Insbesondere möchte ich überprüfen, ob der Bildschirmschoner aktiv ist und ob seine Sitzung gesperrt ist oder nicht.
Dieser Code wird unter einem Dienst auf Systemebene ausgeführt und hat keine sichtbare Benutzeroberfläche, sodass möglicherweise mehrere Optionen ausgeschlossen sind (WM-Nachrichten usw.).
Abgesehen von normalen Arbeitsstationen möchte ich, dass dies auf Terminalservern funktioniert, auf denen mehrere Benutzer angemeldet sind. Aufgrund dieser Anforderungen frage ich mich, ob mehrere Win32-APIs beteiligt werden müssen.
Haben Sie Ideen, wo Sie anfangen sollen?
Der einfachste Weg wäre, eine kleine App in jeder Benutzersitzung laufen zu lassen. Jede Instanz dieser App kann mit der Hauptinstanz des Dienstes kommunizieren.
Windows versucht ziemlich hart, Anmeldesitzungen getrennt zu halten - sowohl zwischen Diensten und dem interaktiven Desktop als auch zwischen einzelnen Terminaldienstsitzungen - so wird es sehr schwierig, auf diese Art von Informationen über die Sitzung eines Benutzers zuzugreifen, sofern Ihre App nicht läuft in dieser Sitzung beginnen.
Als Service können Sie das Ereignis OnSessionChange verwenden, um alle Ihre relevanten Momente zu erfassen.
%Vor%Ich bin mir sicher, dass es möglich ist, den Benutzer anhand von changeDescription.SessionId zu identifizieren. Aber im Moment weiß ich nicht wie ...
EDIT: Dies sollte eine Möglichkeit sein
%Vor%MSDN-Verknüpfungen