2009-07-06 16 views
8

Próbuję znaleźć sposób, aby uzyskać listę sesji systemu Windows? Potrzebuję tych samych informacji, które są wyświetlane w Menedżerze zadań na karcie Użytkownik. Muszę wiedzieć, czy użytkownik jest aktywny czy nie i czy jest zalogowany w sesji pulpitu zdalnego.Jak uzyskać listę sesji systemu Windows?

Każdy pomysł jak to zrobić z C#/Windows XP Pro?

Odpowiedz

4

Uważam, że musisz użyć P/Invoke, aby pobrać te informacje.

Odpowiednie interfejsy API są udokumentowane w dokumencie this MSDN page.

8

Jako punkt wyjścia można uzyskać listę zalogowanych użytkowników uruchamiając komendę

qwinsta 

W wierszu poleceń.

To da wyjście jak

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

i pokaże żadnych zdalnych sesji.

2

Nie trzeba używać pinvoke. WMI to robi i dobrze: "wybierz Name, SessionId z Win32_Process" w przestrzeni nazw root \ cimv2. I można go wywołać ze zdalnej maszyny. Prostsze. Dodaj klauzul where w selekcji, aby dostroić to, co otrzymasz.

+0

Nie zwraca tych samych informacji, co w Menedżerze zadań na karcie Użytkownik. Zwraca identyfikator liczby całkowitej identyfikatora sesji, a nie nazwę użytkownika lub identyfikator SID konta, na którym utworzono proces. – codekaizen

Powiązane problemy