RDP 세션이 열리면 클라이언트 컴퓨터 이름 감지
문제
내 관리자는 회계 응용 프로그램 중 하나가 호스트의 기계 이름을 기반으로 다른 설정을로드 할 수 있기 때문에 할 수있는 몇 가지 멋진 일을 저에게 지적했습니다. 그리고 RDP 세션에서 패키지가 열렸을 때 클라이언트의 기계 이름입니다.
회사 응용 프로그램 중 하나에서 유사한 기능을 제공하고자합니다.
이 사이트에서 감지하는 방법을 알았습니다 만약에 RDP 세션에 있지만 클라이언트 컴퓨터의 이름을 감지하는 방법에 대한 정보를 찾는 데 어려움이 있습니다.
올바른 방향의 모든 포인터는 좋을 것입니다.
.NET 3.5의 경우 C#로 코딩하고 있습니다
편집하다
아래의 조언에서 함께 모은 샘플 코드 - 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
}
}
해결책
당신은 체크인 했습니까? wts_info_class Enum?
다음에 전화 하여이 정보를 얻을 수 있습니다. wtsquerysessionInformation.
WTS_INFO_CLASS에 나열된 정확한 값은 확실하지 않지만 다음과 같습니다. WTSClientName
.
다른 팁
당신은 또한 사용할 수 있습니다 카시아 도서관 이를 위해 p-invokes를 다루고 싶지 않은 경우 코드는 다음과 같습니다.
new TerminalServicesManager().CurrentSession.ClientName