2013-06-05 41 views
0

使用System.DirectoryServices.AccountManagement来查找当前登录到特定PC的用户是谁?谁当前登录到电脑?

使用PrincipalSearcher可以很容易地找到域上的所有计算机,甚至在上次登录时也可以找到它们。但是,我无法找到一种简单的方法来查找登录到哪些用户的用户名。

有关如何做到这一点的任何想法?

回答

1

要查找当前登录的用户,您需要知道从用户帐户运行哪些进程。因此,对于每台PC,您需要获取进程列表,并查找进程在哪个帐户下执行。要做到这一点,你可以使用WMI。

const string ns = @"root\cimv2"; 

    var host = "your host"; 

    var scope = new ManagementScope(string.Format(@"\\{0}\{1}", host, ns)); 

    scope.Connect(); 

//List of logged in users 

    using (var searcher = new ManagementObjectSearcher(scope, 
      new ObjectQuery("select * from Win32_LoggedOnUser"))) 
    { 

      foreach (var logonUser in searcher.Get()) 
      { 
       //see MSDN for available properties of Win32_LoggedOnUser, 
       //take into consideration "Dependent", "Antecedent" properties 
      } 

    } 

//list of processes 

    using (var searcher = new ManagementObjectSearcher(scope, 
        new ObjectQuery("select * from Win32_SessionProcess"))) 
    { 
     foreach (var sessProc in searcher.Get()) 
     { 
      //see "Antecedent" property 
     } 
    } 
+0

这也是一个有用的答案http://stackoverflow.com/questions/5067240/user-logged-into-remote-machine/5067293#5067293 – MightyAtom