2009-07-06 12 views
8

Ich versuche einen Weg zu finden, eine Liste von Windows-Sitzungen zu bekommen? Ich benötige die gleichen Informationen wie die, die im Task-Manager auf der Registerkarte Benutzer angezeigt werden. Ich muss wissen, ob der Benutzer aktiv ist oder nicht und ob er in der Remotedesktopsitzung angemeldet ist.Wie erhalte ich eine Liste von Windows-Sitzungen?

Haben Sie eine Idee, wie Sie das mit C#/Windows XP Pro machen?

Antwort

4

Ich glaube, Sie müssen P/Invoke verwenden, um diese Informationen abzurufen.

Die relevanten APIs sind in this MSDN page dokumentiert.

8

Als Ausgangspunkt Sie eine Liste der angemeldeten Benutzer, indem Sie den Befehl

qwinsta 

an der Eingabeaufforderung erhalten.

Dies wird eine Ausgabe wie

C:\WINDOWS\system32>qwinsta 
SESSIONNAME  USERNAME     ID STATE TYPE  DEVICE 
>console   me      0 Active wdcon 
rdp-tcp         65536 Listen rdpwd 

geben und alle Remote-Sitzungen aufzulisten.

2

Sie müssen Pinvoke nicht verwenden. WMI tut es, und nun: "Wählen Sie Name, SessionId aus Win32_Process" im Namespace root \ cimv2. Und es kann von einer entfernten Maschine aus aufgerufen werden. Einfacher. Fügen Sie eine Where-Klausel in die Auswahl ein, um die Feinabstimmung für das zurückzugeben, was Sie erhalten.

+0

Dies liefert nicht die gleichen Informationen wie im Task-Manager auf der Registerkarte Benutzer. Es gibt eine ganzzahlige Kennung der Sitzungs-ID zurück, nicht den Benutzernamen oder die SID des Kontos, unter dem der Prozess erstellt wurde. – codekaizen

Verwandte Themen