2010-07-15 28 views

回答

2

大家好我得到了我的问题解决方案。我使用WMI来获取用户名。

try { 
    object[] objArr = new object[2]; 
    ManagementScope ms = new ManagementScope("Path"); 
    ms.Connect(); 
    if (ms.IsConnected) 
    { 
     ObjectQuery Query = new ObjectQuery("SELECT * FROM Win32_Process WHERE Name='explorer.exe'"); 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(ms, Query); 
     foreach(ManagementObject objQuery in searcher.Get()) 
     { 
      objQuery.InvokeMethod("GetOwner", objArr); // objArr[0] contains the userId and objArr[1] contains Domainname 
      userName = Convert.ToString(objArr[0]); 
     } 
    } 
} 
catch (System.Exception ex) 
{ 
    throw ex; 
} 

感谢

0

据我了解,你想远程确定的人的用户名登录到多台PC和Windows窗体应用呈现结果。

Windows没有枚举此信息的内置机制。

无论您最终选择使用哪种机制,您可能都需要在正在扫描的PC上具有管理权限的用户帐户下运行扫描应用程序。

您可能会选择模拟SysInternals命令PsLoggedOn的行为,该命令检查远程计算机上的HKEY_USERS项。要找出谁连接到PC(即访问共享),请使用NetSessionEnum API。

有关PsLoggedOn的更多信息可以在这里找到:link text

+0

是的,我想第二个“你想远程确定登录到许多PC的用户的用户名并将结果呈现在Windows窗体应用程序中吗?” – Sarathy 2010-07-17 17:32:41

16
//How about this: 
string strUserName = WindowsIdentity.GetCurrent().Name; 

那么你可以做任何你想要与 “strUserName中” 变量做。请注意,如果有域名存在,它也包含域名。

相关问题