Autor Beitrag
3marci
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Mi 24.08.11 10:12 
Hallo Community,

Ich möchte per C# alle aktiv angemeldeten Benutzer auslesen.
Per CMD habe ich die Funktion qwinsta die mir das zur Verfügung stellt.
Ich habe bereits mehrere Lösungsansätze gesehen wie das in C# funktioniert, dabei wurden die Benutzer per Process.Start("cmd.exe", "qwinsta > user.txt"); in die Textdatei geschrieben und dann eben wieder im Programm eingelesen.
Aber das scheint mir sehr umständlich zu sein... hat jemand eine bessere Idee??
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 24.08.11 11:04 
Hallo 3marci,

Stichwort: WMI, s. msdn.microsoft.com/e....85).aspx#_hmm_users (Win32_UserAccount müßte die dafür richtige Klasse sein).
C#-Beispiele mit WMI gibt es zahlreiche, z.B. mein kürzlich erstellter Beitrag www.c-sharp-forum.de....php?p=647377#647377 ;-)
Um die gerade angemeldeten User zu erhalten, müßtest du mal die Properties der WMI-Klasse ausprobieren (ich tippe auf "Lockout").
3marci Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Mi 24.08.11 14:43 
Vielen Dank.

Ich habe das ganze jetzt ein bisschen anders gelöst, hier ist meine Methode aus einer anderen Homepage... ein bisschen modifiziert dass es für meine Verwendung passt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
private void GetAllUsers()
{
  ManagementScope managementScope = new ManagementScope();
  ObjectQuery sessionQuery = new ObjectQuery("SELECT * FROM Win32_LogonSession WHERE LogonType = 10");
  ManagementObjectSearcher sessionObjectSearcher = new ManagementObjectSearcher(managementScope, sessionQuery);
  ManagementObjectCollection sessionObjectCollection = sessionObjectSearcher.Get();

  foreach (ManagementObject sessionObjectItem in sessionObjectCollection)
  {
    ObjectQuery associatorQuery;
    ManagementObjectSearcher associatorObjectSearcher;
    ManagementObjectCollection associatorObjectCollection;


    string logonId = sessionObjectItem["LogonId"as string;

    associatorQuery = new ObjectQuery(string.Concat("Associators of {Win32_LogonSession.LogonId=", logonId, "}Where AssocClass=Win32_LoggedOnUser Role=Dependent"));
    associatorObjectSearcher = new ManagementObjectSearcher(managementScope, associatorQuery);
    associatorObjectCollection = associatorObjectSearcher.Get();

    foreach (ManagementObject i in associatorObjectCollection)
    {
      userNames.Add(i["Name"].ToString());
    }
  }
}