Récupérer le nom du pc connecté à un serveur en terminal server (rdp)

Contenu du snippet

Lorsqu'on est connecté en Terminal Server et qu'on demande le nom du PC on obtient généralement le nom du server (ce qui est normal). Mais la plupart du temps on a besoins du nom du PC Client pour savoir qui effectue certaines opération (sachant qu'on peut avoir un user identique à partir de PC différents).
Donc avec ce code on retrouve le nom du PC Client

(Adaptation de mon source vb.net en C#)

Source / Exemple :


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,
        };

        [DllImport("wtsapi32")]
        static extern void WTSFreeMemory(IntPtr memory);

        [DllImport("wtsapi32", CharSet=CharSet.Auto)]
        static extern Boolean WTSQuerySessionInformation(IntPtr hServer, Int32 SessionId,
            WTS_INFO_CLASS InfoClass, ref IntPtr ppBuffer, ref Int32 pCount);

        public String fnGetClientName()
        {
            String R = "";
            IntPtr Buffer = IntPtr.Zero;
            try
            {
                int bytesReturned=0;
                Boolean sessionInfo = WTSQuerySessionInformation(IntPtr.Zero, -1,
                    WTS_INFO_CLASS.WTSClientName, ref Buffer, ref bytesReturned);
                R = System.Runtime.InteropServices.Marshal.PtrToStringAuto(Buffer);
            }
            catch 
            {
            }
            finally
            {
                try
                {
                    WTSFreeMemory(Buffer);
                    Buffer = IntPtr.Zero;
                }
                catch 
                {
                }//end Try
            }//end Try
            return R;
        }//End Function

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.