玄铁剑

成功的途径:抄,创造,研究,发明...
posts - 128, comments - 42, trackbacks - 0, articles - 174

Remote Desktop Manager (MSTSCUI.NET)

Posted on 2007-03-26 22:40 玄铁剑 阅读(411) 评论(0)  编辑 收藏 引用 所属分类: windows

mstscui.net

Introduction

MSTSCUI.NET is simply a graphical interface to Microsoft's command-line Remote Desktop Connection, mstsc.exe. This application makes it easier for those who use Remote Desktop sessions often through the day. It uses the .NET Framework v1.1.

Some of the things this app demonstrates:

  • Reading a simple XML document
  • Creating a systray application
  • Dynamically populating a context menu

All in all, a very simple and useful little application.

General Use

top

MSTSCUI.NET runs as a taskbar application to allow quick and easy access to RDP servers:

taskbar

It's generally reccommended to place an entry in your startup group so that the application launches on startup.

Simply right-click on the taskbar icon to show the menu:

menu

Select "Edit List" for a shortcut to edit your server configuration file, and "Refresh List" to reload it.

MSTSCUI.NET.exe.config

top

Use the app.config file to set the name of the server configuration file with the "ServerConfigFile" key, and set your preferred editor with the "Editor" key. It's not recommended you change the "ServerConfigFile" key. The "Editor" key should be a fully qualified path if the editor you're using is not already setup in your path environment variables.

Below is the listing of the default app.config file:

<xmp>
<configuration>
    <appSettings>

        <!-- path to XML Server Configuration File -->
        <add key="ServerConfigFile" value="mstscui_servers.xml" />
        
        <!-- XML File Editor to use -->
        <add key="Editor" value="notepad" />

     </appSettings>
</configuration>
</xmp>

Server Configuration XML (mstscui_servers.xml)

top

Use the server configuration file to setup each server.

In order to display a horizontal separator bar on the menu, use:

<xmp>
    <server displayname="-" />
</xmp>

Each server element has an attribute called "displayname" - this is the name displayed on the menu. You can be as descriptive here as necessary.

  • servername - server name or IP address
  • port - default is 3389
  • resolution - "fullscreen", or any resolution entered in this fashion: 1024x728
  • console - 1 for yes, takeover console session, 0 for no, do not takeover console
  • connectionfile - fully qualified path to the RDP file if you want to use one

Below is the listing of a sample server config file:

<xmp>
<servers>

    <server displayname="eventvan02 / secure">
        <servername>eventvan02</servername>
        <port>3389</port>
        <resolution>1024x768</resolution>
        <console>0</console>
        <connectionfile></connectionfile>
    </server>

    <server displayname="-" />

    <server displayname="vancorpbc1">
        <servername>vancorpbc1</servername>
        <port>3389</port>
        <resolution>fullscreen</resolution>
        <console>0</console>
        <connectionfile></connectionfile>
    </server>

</servers>
</xmp>

Select Code Samples

top

Launching msctsc.exe...

				Private
				Sub ConnectToServer(ByVal sServer AsString)
    TryDim sCommand AsString = _
          System.Environment.GetEnvironmentVariable("SystemRoot") & _
          "\system32\mstsc.exe"
        System.Diagnostics.Process.Start(sCommand, _
               GetArgumentsForServer(sServer))
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    EndTryEndSub

Reading the XML configuration file...

Collapse
				Private
				Function GetArgumentsForServer(ByVal sServer AsString) AsStringDim sConnection AsStringDim sPort AsStringDim sResolution AsStringDim arrResolution() AsStringDim sConsole AsStringDim sConnectionFile AsStringDim sArguments AsStringDim parentnode As XmlNode = doc.SelectSingleNode("servers")
    Dim servernode As XmlNode = _
        SelectNode(parentnode, "displayname", sServer)
    Dim childnode As XmlNode

    ForEach childnode In servernode.ChildNodes
        SelectCase UCase(childnode.Name)
            Case"SERVERNAME"
                sConnection = " /v:" & Trim(childnode.InnerText)
            Case"PORT"If Trim(childnode.InnerText) <> "3389"And _
                        childnode.InnerText <> String.Empty Then
                    sPort = ":" & childnode.InnerText
                Else
                    sPort = String.Empty
                EndIfCase"RESOLUTION"If InStr(UCase(childnode.InnerText), "X") > 0Then
                    arrResolution = Split(UCase(childnode.InnerText), "X")
                    sResolution = " /w:" & arrResolution(0) & _
                                  " /h:" & arrResolution(1)
                Else'anything else, default to fullscreen
                    sResolution = " /f"EndIfCase"CONSOLE"IfCBool(childnode.InnerText) Then
                    sConsole = " /console"Else
                    sConsole = String.Empty
                EndIfCase"CONNECTIONFILE"
                sConnectionFile = childnode.InnerText
            CaseElse
                MessageBox.Show("Unrecognized node in XML: " & _
                                childnode.InnerText)
        EndSelectNext'build argument string
    sArguments = sConnection & sPort & sResolution & sConsole

    Return sArguments

EndFunctionPrivateFunction SelectNode(ByVal parentNode As XmlNode, _
        ByVal attributeName AsString, _
        ByVal attributeValue AsString) As XmlNode
    Dim node As XmlNode = NothingIf parentNode.HasChildNodes ThenDim nodeName AsString = parentNode.ChildNodes(0).Name
        Dim path AsString = nodeName + "[@" + _
            attributeName + "='" + attributeValue + "']"
        node = parentNode.SelectSingleNode(path)
    EndIfReturn node
EndFunction
只有注册用户登录后才能发表评论。