Click here to Skip to main content
15,879,535 members
Articles / Programming Languages / C#
Article

Palantir - Remote Desktop Manager

Rate me:
Please Sign up or sign in to vote.
4.90/5 (93 votes)
6 Aug 2007CPOL2 min read 489.1K   65.6K   315   107
Palantir is an application that allows users to manage remote desktop connections in one window. It also allows users to save existing connections for later use.
Screenshot - palantir.jpg

Screenshot - palantir3.jpg

Introduction

Palantir is an application that allows users to manage remote desktop connections in one window. It also allows users to save existing connections for later use.

Background

The remote desktop connections are managed with Microsoft RDP Client control. This control has all of the properties such as Server, UserName, Domain, etc. in order to set up a remote desktop connection. In addition to these properties, sharing printers, disk drives or color depth of the remote desktop can be managed via RDP Client control. Palantir enables users to create a remote desktop connection and save connection settings for later use. Users can also choose to start a remote desktop connection automatically when the application starts.

The settings can be saved into a file and restored from a setting file. Users can also connect to a computer via console. The application has a class named Machine that stores a remote desktop connection's properties. All of the remote connections created by user is stored in application's .settings file. This setting file has a property setting named MyMachine and its type is string. This property is converted into Hashtable while getting the settings. Palantir's solution consists of four projects which are GUI, Helper, BusinessObjects and a setup project.

Using the Code

The remote desktop connections are retrieved by the function below:

C#
public List<Machine> GetRemoteDesktops()         
{             
    List<Machine> lstMachine = new List<Machine>();             
    if (Settings.Default.MyMachine != "")             
    {                 
        Hashtable ht = 
            (Hashtable)BinarySerializer.BinaryTo(Settings.Default.MyMachine);
        foreach (DictionaryEntry de in ht)                     
        {                     
            Machine insMachine = (Machine)de.Value;                     
            lstMachine.Add(insMachine);                 
        }             
    }               
    lstMachine.Sort(delegate(Machine m1, Machine m2) 
    { 
        return m1.RemoteDesktopConnectionName.CompareTo(
            m2.RemoteDesktopConnectionName); 
    });             
    return lstMachine;         
} 

As seen in the code, this function deserializes the setting named MyMachine into a hashtable and inserts each dictionary entry in the hashtable into a list and returns the list. A remote desktop connection is saved and edited by the function below:

C#
public bool SaveRemoteDesktop(Machine parMachine, bool openedForEdit)   
{             
    if (Settings.Default.MyMachine == "")
    {                 
        Hashtable ht = new Hashtable(); 
        Settings.Default.MyMachine = BinarySerializer.ToBinary(ht); 
        Settings.Default.Save();
    }             
    Hashtable ht1 = 
        (Hashtable)BinarySerializer.BinaryTo(Settings.Default.MyMachine); 
    if (!parMachine.SavePassword) 
    {                 
        parMachine.Password = "";             
    }               
    if (!openedForEdit)             
    {                 
        foreach (DictionaryEntry de in ht1)                 
        {                     
            if (((Machine)de.Value).RemoteDesktopConnectionName == 
                parMachine.RemoteDesktopConnectionName)                     
            {                         
                MessageBox.Show("There is already a 
                                    remote connection with the same name.");                         
                return false;                     
            }                 
        }             
    }               
    ht1[parMachine.RemoteDesktopConnectionName] = parMachine; 
    Settings.Default.MyMachine = BinarySerializer.ToBinary(ht1);
    Settings.Default.Save(); 
    return true; 
}

If there's no currently saved remote desktop connection, we create a new hashtable and then serialize and save the settings file. After that, we deserialize the settings parameter into a hashtable and after checking if there's another connection with the same name, we save the remote desktop connection with the function's parameter Machine object. The methods below set the RDP Client control's settings and connect to the remote desktop which is passed as parameter.

C#
private void SetRdpClientProperties(Machine parMachine)   
{             
    rdpc.Server = parMachine.MachineName;             
    rdpc.UserName = parMachine.UserName;             
    rdpc.Domain = parMachine.DomainName;             
    if (parMachine.Password != "")             
    {                 
        rdpc.AdvancedSettings5.ClearTextPassword = parMachine.Password;   
    }             
    rdpc.AdvancedSettings5.RedirectDrives = parMachine.ShareDiskDrives;     
    rdpc.AdvancedSettings5.RedirectPrinters = parMachine.SharePrinters; 
    rdpc.ColorDepth = (int)parMachine.ColorDepth;             
    rdpc.Dock = DockStyle.Fill;           
} 
public void Connect(Machine parMachine)         
{             
    SetRdpClientProperties(parMachine);             
    rdpc.Connect();         
}           
public void ConnectViaConsole(Machine parMachine)         
{             
    rdpc.AdvancedSettings5.ConnectToServerConsole = true;    
    SetRdpClientProperties(parMachine);        
    rdpc.Connect();         
} 

Feedback

For bug reports and suggestions, feel free to contact me at io1981@hotmail.com.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Turkey Turkey
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralLooking at the remote desktop template, help with automating acknowledgement of the legal banner Pin
turbosupramk327-Dec-10 7:57
turbosupramk327-Dec-10 7:57 
GeneralMy vote of 5 Pin
ahp-198421-Dec-10 0:32
ahp-198421-Dec-10 0:32 
GeneralAdditions Pin
Daaron30-Apr-10 11:48
Daaron30-Apr-10 11:48 
QuestionHow to access an IP that is behind the NAT router ? Pin
dmuntoiu6-Mar-10 1:57
dmuntoiu6-Mar-10 1:57 
AnswerRe: How to access an IP that is behind the NAT router ? Pin
Joe Escalona26-Sep-12 6:40
professionalJoe Escalona26-Sep-12 6:40 
GeneralRe: How to access an IP that is behind the NAT router ? Pin
Joe Escalona26-Sep-12 7:35
professionalJoe Escalona26-Sep-12 7:35 
Generalproblem when auto connecting Pin
atropos073-Mar-10 21:24
atropos073-Mar-10 21:24 
GeneralGood Work Pin
Nezam Ahamed22-Feb-10 18:37
Nezam Ahamed22-Feb-10 18:37 
hi .,
You work is grtThumbs Up | :thumbsup: and thanks for the codeThumbs Up | :thumbsup: and i have doubt
if i login using the microsoft terminal the system get logged off.
i need the system to be on.
and it should not get loggedd of even he can access system.
is there any way other way.
i am worried i need to develop like tat one.
i saw team viewer it works like tat and i need to use like tat...
if possible get me the link or article

thanks for reply Big Grin | :-D Cool | :cool:
Generalbeautiful! Pin
kanbang11-Aug-09 23:03
kanbang11-Aug-09 23:03 
Questioncan u please tell now i am getting this error after change AxMsRdpClient5 to AxMsRdpClient2 Pin
ravileeladhar20-Jul-09 7:42
ravileeladhar20-Jul-09 7:42 
GeneralException ::Error 8 'AxMSTSCLib.AxMsRdpClient4.AdvancedSettings5' is not supported by the language Palantir Pin
ravileeladhar9-Jul-09 7:40
ravileeladhar9-Jul-09 7:40 
GeneralRe: Exception ::Error 8 'AxMSTSCLib.AxMsRdpClient4.AdvancedSettings5' is not supported by the language Palantir Pin
AKGhosh19-Jul-09 20:25
AKGhosh19-Jul-09 20:25 
GeneralNice Article Pin
Vimalsoft(Pty) Ltd4-Mar-09 21:14
professionalVimalsoft(Pty) Ltd4-Mar-09 21:14 
GeneralNeed your help! Error:Class not registered... Pin
Member 388611715-Feb-09 14:50
Member 388611715-Feb-09 14:50 
GeneralError with mstscax.dll Pin
Member 393854815-Jan-09 17:33
Member 393854815-Jan-09 17:33 
Questionerror!!!!. what pas? Pin
AlejandroDG17-Oct-08 19:42
AlejandroDG17-Oct-08 19:42 
AnswerRe: error!!!!. what pas? Pin
ric43215-Nov-09 4:53
ric43215-Nov-09 4:53 
Generalplease clear my doubt... [modified] Pin
sgsiva17-Sep-08 23:44
sgsiva17-Sep-08 23:44 
AnswerRe: please clear my doubt... Pin
Jim Weiler19-Nov-08 18:33
Jim Weiler19-Nov-08 18:33 
GeneralRe: please clear my doubt... Pin
Kevin James10-Feb-09 22:20
Kevin James10-Feb-09 22:20 
Questionpocket pc version? Pin
Jeff Dafing17-Aug-08 8:10
Jeff Dafing17-Aug-08 8:10 
GeneralFor windows 2000 Professional Pin
kathirvel mariappan13-Aug-08 2:21
kathirvel mariappan13-Aug-08 2:21 
Questioncan you convert it to vc++ version 6.0 ? Pin
some1One113-Aug-08 0:51
some1One113-Aug-08 0:51 
QuestionBuild errors with VS 2005 Pin
curiousharry22-Sep-07 15:16
curiousharry22-Sep-07 15:16 
AnswerRe: Build errors with VS 2005 Pin
GrantS23-Oct-07 22:40
GrantS23-Oct-07 22:40 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.