C#.Net Windows 应用程序 - 在 My NT 中获取记录的用户名

发布于 2024-09-09 08:55:55 字数 91 浏览 5 评论 0原文

我需要获取登录局域网中特定机器的用户名。建议我通过在 C#.net windows 应用程序中传递计算机名称来获取用户名的最佳方法。还要考虑许可。

谢谢

I need to get the username who logged in particular machine in my LAN. Suggest me a best method to get the user name by passing machine name in C#.net windows application. Also consider the permission.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

<逆流佳人身旁 2024-09-16 08:55:55
//How about this:
string strUserName = WindowsIdentity.GetCurrent().Name;

然后,您可以使用该“strUserName”变量执行任何您想要执行的操作。请注意,如果存在的话,它还包含域名。

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

You can then do whatever you want to do with that "strUserName" variable. Please note it also contains the Domain Name if one is present.

泛泛之交 2024-09-16 08:55:55

大家好,我得到了我的问题的解决方案。我使用 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;
}

谢谢

Hi All I got the solution for my question. I used WMI to get the userName.

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;
}

Thanks

ヤ经典坏疍 2024-09-16 08:55:55

据我了解,您希望远程确定登录到多台 PC 的用户的用户名,并将结果显示在 Windows 窗体应用程序中。

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

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

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

有关 PsLoggedOn 的更多信息,请访问:链接文本

As I understand it, you want to remotely determine the username of people logged on to many PCs and present the results in a Windows Forms application.

Windows does not have a built-in mechanism to enumerate this information.

Whichever mechanism you ultimately choose to use, you will probably need to run the scanning application under a user account which has admin rights on the PC being scanned.

You might choose to emulate the behaviour of the SysInternals command PsLoggedOn which examines the HKEY_USERS key on the remote computer. To find out who is connected to a PC (i.e. accessing shares), use the NetSessionEnum API.

More information about PsLoggedOn can be found here: link text

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文