如何获取终端服务器会话的IP地址

时间:2017-09-27 17:26:45

标签: c# .net winforms

我通过以下代码获得了客户端名称,但我想获得IP地址,以便我可以通过以下代码获取IP地址?

或者还有其他方法可以获取终端服务器会话的IP地址吗?

namespace TerminalServerSession_ClientName
{
using System;
using System.Runtime.InteropServices;

public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(GetTerminalServicesClientName());
    }

    /// <summary>
    /// Gets the name of the client system.
    /// </summary>
    internal static string GetTerminalServicesClientName()
    {
        IntPtr buffer = IntPtr.Zero;

        string clientName = null;
        int bytesReturned;

        bool success = NativeMethods.WTSQuerySessionInformation(
            NativeMethods.WTS_CURRENT_SERVER_HANDLE,
            NativeMethods.WTS_CURRENT_SESSION,
            NativeMethods.WTS_INFO_CLASS.WTSClientName,
            out buffer,
            out bytesReturned);

        if (success)
        {
            clientName = Marshal.PtrToStringUni(
                buffer,
                bytesReturned / 2 /* Because the DllImport uses CharSet.Unicode */
                );
            NativeMethods.WTSFreeMemory(buffer);
        }

        return clientName;
    }
}

public static class NativeMethods
{
    public static readonly IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
    public const int WTS_CURRENT_SESSION = -1;

    public enum WTS_INFO_CLASS
    {
        WTSClientName = 10
    }

    [DllImport("Wtsapi32.dll", CharSet = CharSet.Unicode)]
    public static extern bool WTSQuerySessionInformation(
        IntPtr hServer,
        Int32 sessionId,
        WTS_INFO_CLASS wtsInfoClass,
        out IntPtr ppBuffer,
        out Int32 pBytesReturned);

    /// <summary>
    /// The WTSFreeMemory function frees memory allocated by a Terminal
    /// Services function.
    /// </summary>
    /// <param name="memory">Pointer to the memory to free.</param>
    [DllImport("wtsapi32.dll", ExactSpelling = true, SetLastError = false)]
    public static extern void WTSFreeMemory(IntPtr memory);
}
}

由于

0 个答案:

没有答案