C# 判断远程桌面登录用户的计算机名

2024-05-25

我已经断断续续地研究了几周时间,研究如何确定通过远程桌面登录的用户的计算机名称。

我有一个用户在终端服务器环境上运行的应用程序,我想捕获并存储他们用来连接到终端服务器的计算机的名称。

到目前为止,我还没有找到代码或创建自己的代码来做到这一点,我认为我只是没有提出正确的问题。

任何帮助将不胜感激。

附言。我正在使用 C# 和 .Net 4.0


好的,我找到了解决方案http://www.amasso.info/?p=165 http://www.amasso.info/?p=165

代码复制如下...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Principal;
using System.Net;

namespace loginName
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            WindowsPrincipal wp = new WindowsPrincipal(WindowsIdentity.GetCurrent());
            MessageBox.Show(wp.Identity.Name); // Username
            MessageBox.Show(GetTerminalServerClientNameWTSAPI()); // Remote Host PC Name

        }

        private static string GetTerminalServerClientNameWTSAPI()
        {

            const int WTS_CURRENT_SERVER_HANDLE = -1;

            IntPtr buffer = IntPtr.Zero;
            uint bytesReturned;

            string strReturnValue = "";
            try
            {
                WTSQuerySessionInformation(IntPtr.Zero, WTS_CURRENT_SERVER_HANDLE, WTS_INFO_CLASS.WTSClientName, out buffer, out bytesReturned);
                strReturnValue = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(buffer);
            }

            finally
            {
                buffer = IntPtr.Zero;
            }

            return strReturnValue;
        }

        enum WTS_INFO_CLASS
        {
            WTSInitialProgram,
            WTSApplicationName,
            WTSWorkingDirectory,
            WTSOEMId,
            WTSSessionId,
            WTSUserName,
            WTSWinStationName,
            WTSDomainName,
            WTSConnectState,
            WTSClientBuildNumber,
            WTSClientName,
            WTSClientDirectory,
            WTSClientProductId,
            WTSClientHardwareId,
            WTSClientAddress,
            WTSClientDisplay,
            WTSClientProtocolType

        }

        [System.Runtime.InteropServices.DllImport("Wtsapi32.dll")]
        private static extern bool WTSQuerySessionInformation(System.IntPtr hServer, int sessionId, WTS_INFO_CLASS wtsInfoClass, out System.IntPtr ppBuffer, out uint pBytesReturned);

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 判断远程桌面登录用户的计算机名 的相关文章

随机推荐

  • 德尔福和Doxygen

    我想使用 doxygen pas2dox 记录我的源代码 当我设置好所有内容 包括过滤器和提取选项 提取所有内容 时 doxygen 运行良好 但生成的文档仅包含源文件作为链接 并且没有提取类型 方法 过滤后的源看起来不错 有任何提示如何定
  • 如何逐行替换(更新)文件中的文本

    我试图通过读取每一行 测试它 然后写入是否需要更新来替换文本文件中的文本 我不想保存为新文件 因为我的脚本已经先备份文件并对备份进行操作 这是我到目前为止所拥有的 我从 os walk 获取路径 并且保证 pathmatch var 正确返
  • 编译托管对象模型时有什么方法可以忽略丢失的反向警告吗?

    标题几乎包含了问题 我们发布了一个应用程序 其数据模型的逆配置不正确 我们在下一个版本中使用新版本的数据模型修复了这些问题 但 Xcode 在编译以前的数据模型版本时仍然显示警告 我不想破坏将文档从旧数据模型迁移到新数据模型的能力 并且我非
  • 异步 C++ 代码中的内存管理

    我一直在与boost asio一段时间以来 虽然我确实理解了异步调用的概念 但我仍然对内存管理的含义感到有些困惑 正常情况下同步代码中对象的生命周期很清楚 但考虑一个类似于以下情况的场景日间服务器 http www boost org do
  • 无法从 java 发送 48681 字节消息以保护 wcf 服务

    我必须使用相互身份验证从 java 调用安全的 WCF 服务 一切工作正常 除了我无法发送大小超过 48680 字节的消息 因此 48680 字节的消息已成功发送 但 48681 字节的消息未成功发送 并且 java 应用程序因读取超时异常
  • Emacs 打字骨架对插入也许

    在 Eclipse 中 编辑 Java 代码时 如果我输入一个左括号 我会得到一对括号 如果我然后 输入 第二个括号 它不会插入额外的括号 我如何在 emacs 中得到它 Eclipse 编辑器足够聪明 当我输入闭括号时 它知道我刚刚完成了
  • 如何在 html 中设置 alt 工具提示的样式? [复制]

    这个问题在这里已经有答案了 是否可以为 alt 属性设置工具提示的样式 我希望为 html 设置背景 字体颜色等样式alt属性 有人可以帮我解决这个问题吗 您无法设计默认的工具提示 即设置样式alt属性 但你可以使用 Javascript
  • 在 Delphi 中获取 TCheckbox 的总大小,包括框和文本

    我想获得 TCheckbox 的总大小 包括 Delphi 中的框和文本 我查看这篇文章Delphi FMX TCheckbox TRadiobutton 自动调整大小 https stackoverflow com questions 4
  • 测量大型源树中的“接近度”

    作为我之前提出的问题的一部分找到两个来源之间的最佳匹配 https stackoverflow com questions 13898659 finding what git commit some code spawned from 其中
  • 将嵌套的 ArrayList 转换为 Java List

    我有这个方法 public List
  • 如何正确地将MapStruct与Eclipse集成? (包括Lombok java代理)

    我愿意在一些官方项目中使用MapStruct 所以我决定先对其进行一些测试 我需要让它与 eclipse 集成工作 并遵循 MapStruct 网站上提供的所有说明 但是 到目前为止还没有运气 有人成功实现了这种整合吗 如果是的话我可以缺少
  • 为什么使用 mysql_real_escape_string,addslashes 不会阻止一切?

    我正在查看文档并偶然发现了 mysql real escape string 我不明白为什么当您可以只使用addslashes 时它很有用 有人可以向我展示一个场景来说明它为什么有用吗 我也很好奇为什么它需要数据库连接 这似乎是一个很大的开
  • 如何解析 ASP.NET Core 3 中的本地文件路径?

    我在用Visual Studio Code版本1 42 on my Ubuntu 18 04 我刚刚安装成功sudo dotnet add package Google Apis Drive v3通过终端但我找不到安装方法System We
  • 带有“Sec-Fetch-User:?1”标头的重复请求扰乱了我的请求限制

    我有一个网站 并且我已经实施了自己的请求限制以提高安全性 问题是 从一台特定的机器上 我收到重复的请求 它们之间几乎相同 生成的两个请求之间存在毫秒级的时间差 当某些 JavaScript 代码以编程方式提交表单时 就会执行原始请求 它们之
  • 简单的注入器和内部构造函数

    我正在开发一个小型类库 并为我的 DI 使用简单注入器 类库有一个访问点 我猜是某种服务 它是public它有一些internal服务和存储库 我看到 Simple Injector 不支持使用内部构造函数进行构造函数注入 例如 我的产品服
  • socket.io - ReferenceError:套接字未定义

    我正在尝试编写一个简单的应用程序 它将我在文本区域中输入的每个字符镜像到 div 使用socket io 但我不断收到以下客户端错误 ReferenceError 套接字未定义 这是我的服务器代码 var express require e
  • 在 Heroku 上配置单页面 Create-React-App

    使用 Firebase Hosting 当您部署应用程序时有人问你 https stackoverflow com questions 37667626 firebase cli configure as a single page app
  • 是什么原因导致“当测试模块已实例化时无法配置测试模块”?

    这是我的测试 describe ValueService gt it getValue should return real value gt expect true toBeTruthy 我有这个错误 失败 当测试模块已实例化时 无法配置
  • 为什么等待对于节点请求模块不起作用?

    我是nodejs新手 我在前 1 中没有看到响应 但在前 2 中看到 为什么 Await 在其他地方使用 babel 对我有用 Ex 1 let res await request url console log res console l
  • C# 判断远程桌面登录用户的计算机名

    我已经断断续续地研究了几周时间 研究如何确定通过远程桌面登录的用户的计算机名称 我有一个用户在终端服务器环境上运行的应用程序 我想捕获并存储他们用来连接到终端服务器的计算机的名称 到目前为止 我还没有找到代码或创建自己的代码来做到这一点 我