Мой менеджер указал мне на несколько изящных вещей, которые может сделать одно из наших бухгалтерских приложений, поскольку оно может загружать различные настройки в зависимости от имени компьютера хоста и имени компьютера клиента, когда пакет открывается в сеансе RDP.
Мы хотим обеспечить аналогичную функциональность в одном из приложений моей компании.
Я узнал на этом сайте, как обнаружить , если Я нахожусь в сеансе RDP, но у меня возникают проблемы с поиском информации где-либо о том, как определить имя клиентского компьютера.
Любые указатели в правильном направлении были бы великолепны.
Я пишу на C # для .NET 3.5
EDIT
Пример кода, который я собрал воедино из приведенного ниже совета - для каждого, у кого есть возможность использовать WTSQuerySessionInformation, этого будет достаточно, чтобы понять, что происходит. Обратите внимание, что это не обязательно лучший способ сделать это - просто отправная точка, которая мне показалась полезной.
Когда я запускаю это локально, я получаю скучные, ожидаемые ответы. Когда я запускаю его на нашем локальном офисном сервере в сеансе RDP, я вижу свое собственное имя компьютера в свойстве WTSClientName.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace TerminalServicesTest
{
class Program
{
const int WTS_CURRENT_SESSION = -1;
static readonly IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
uint byteCount;
foreach (WTS_INFO_CLASS item in Enum.GetValues(typeof(WTS_INFO_CLASS)))
{
Program.WTSQuerySessionInformation(
WTS_CURRENT_SERVER_HANDLE,
WTS_CURRENT_SESSION,
item,
out sb,
out byteCount);
Console.WriteLine("{0}({1}): {2}", item.ToString(), byteCount, sb);
}
Console.WriteLine();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
[DllImport("Wtsapi32.dll")]
public static extern bool WTSQuerySessionInformation(
IntPtr hServer, int sessionId, WTS_INFO_CLASS wtsInfoClass, out StringBuilder ppBuffer, out uint pBytesReturned);
}
enum WTS_INFO_CLASS
{
WTSInitialProgram = 0,
WTSApplicationName = 1,
WTSWorkingDirectory = 2,
WTSOEMId = 3,
WTSSessionId = 4,
WTSUserName = 5,
WTSWinStationName = 6,
WTSDomainName = 7,
WTSConnectState = 8,
WTSClientBuildNumber = 9,
WTSClientName = 10,
WTSClientDirectory = 11,
WTSClientProductId = 12,
WTSClientHardwareId = 13,
WTSClientAddress = 14,
WTSClientDisplay = 15,
WTSClientProtocolType = 16,
WTSIdleTime = 17,
WTSLogonTime = 18,
WTSIncomingBytes = 19,
WTSOutgoingBytes = 20,
WTSIncomingFrames = 21,
WTSOutgoingFrames = 22,
WTSClientInfo = 23,
WTSSessionInfo = 24,
WTSSessionInfoEx = 25,
WTSConfigInfo = 26,
WTSValidationInfo = 27,
WTSSessionAddressV4 = 28,
WTSIsRemoteSession = 29
}
}