2010-02-15 2 views
2

Мой менеджер указал на несколько отличных вещей, которые может выполнять одно из наших приложений учета, поскольку оно может загружать различные настройки на основе имени компьютера хоста и. имя компьютера клиента, когда пакет открывается в сеансе RDP.Обнаруживать имя компьютера-клиента при открытии сеанса 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 
    } 
} 

ответ

2

Вы зарегистрированы в перечислении WTS_INFO_CLASS?

Вы можете получить эту информацию, позвонив по телефону: WTSQuerySessionInformation.

Я не уверен в точном значении, указанном в WTS_INFO_CLASS, которое вам нужно, но оно выглядит так: WTSClientName.

+0

пятно на - спасибо Брайан. –

1

Вы можете также использовать Cassia library для этого, если вы не хотите иметь дело с P-Запускает - код будет:

new TerminalServicesManager().CurrentSession.ClientName 
Смежные вопросы