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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 317 fois - Téléchargée 26 fois

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

Ajouter un commentaire

Commentaire

Messages postés
2
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
4 août 2009

Merci beaucoup pour ce code qui m'a permise d'économiser des heures de recherche. Pour info, il fonctionne aussi en mode TSE/remote app.

mpe

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.