문제

내 관리자는 회계 응용 프로그램 중 하나가 호스트의 기계 이름을 기반으로 다른 설정을로드 할 수 있기 때문에 할 수있는 몇 가지 멋진 일을 저에게 지적했습니다. 그리고 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top