Welcome to the ThinManager Knowledgebase.
Additional knowledgebase articles can be found at Rockwell Automation Tech Support.

If you would like to speak with one of our engineers, please Submit a Question or give us a call at the phone number here. In North America, To route your phone support request directly to a technical support engineer, call toll-free 1-888-382-1583 or 1-440-646-3434, select Option 3 (Technical Support), then select Option 5 (More Options). When prompted, enter the ThinManager Direct Dial Code 201.

TermMon Demo Program Source

From ThinManager Knowledge Base
Revision as of 19:54, 16 February 2015 by Tseagert (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Reflection;
using System.Diagnostics;

namespace TermMon_Demo
{
    public enum CommandConst
    {
        TermSecureCheckAccess = -2,
        ChangeTerminalServerGroup = -1,
    }

    public partial class Form1 : Form
    {
        String[] args = Environment.GetCommandLineArgs().Select(s => s.ToLowerInvariant()).ToArray();
        String[] HelpList = { "-h", "/h", "-?", "/?", "help", "-help", "/help" };
        String[] CommandList = { "reboot", "restart", "calibrate", "gotomainmenu", "switchtonextgroup", "switchtoprevgroup", "switchinstfailover", "changetermsecureuser", "logoffandchangetermsecureuser", "logofftermsecureuser", "disconnecttermsecureuser" };
        int CommandCount = 0;
        string path = "", textOut = Environment.NewLine;
        bool gui = true;

        public Form1()
        {
            InitializeComponent();

            if (args.Length > 1) gui = false;

            if (gui)
            {
                // Enable the OverrideIP and Demo Control setions
                EnableControl(true);
                ChangeEnabled(false);

                // Set the connection state display to disconnected
                textBoxConnectionState.Text = "Disconnected";
                textBoxConnectionState.BackColor = System.Drawing.Color.LightGray;

                // Get and display prigram version info
                Assembly a = Assembly.GetExecutingAssembly();
                FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(a.Location);
                labelVersion.Text = "Version " + fvi.ProductVersion;
            }
            else
            {
                CommandCount = args.Length - 1;

                ParseArgs();

                axTermMon.Enable();

                timerConnectionTimeout.Enabled = true;
                timerRuntime.Enabled = true;
            }
        }

        // Parse any command line arguments.
        private void ParseArgs()
        {
            for (int i = 0; i < args.Length; i++)
            {
                if (CheckValidIP(args[i]))
                {
                    axTermMon.RunInSession = false;
                    axTermMon.OverrideIP = args[i];
                    CommandCount--;
                }

                if (args[i].EndsWith(".txt"))
                {
                    path = args[i];
                    CommandCount--;
                }
            }

            if (args.Intersect(HelpList).Count() > 0) Help();
        }

        private void Help()
        {
            textOut = Environment.NewLine + "Usage:" + Environment.NewLine + Environment.NewLine
            + "TermMon.exe [IPv4 Address (optional)] [Filename and Path (optional)] [Commands]" + Environment.NewLine + Environment.NewLine
            + "Local Example: TermMon.exe TerminalName TerminalMAC"+ Environment.NewLine
            + "Remote Example: TermMon.exe xxx.xxx.xxx.xxx C:\termmon.txt TerminalName TerminalMAC" + Environment.NewLine + Environment.NewLine
            + "Arguments, Information:" + Environment.NewLine
            + "\tConnectionState" + Environment.NewLine
            + "\tTerminalName" + Environment.NewLine
            + "\tTerminalIP" + Environment.NewLine
            + "\tTerminalMAC" + Environment.NewLine
            + "\tTerminalModel" + Environment.NewLine
            + "\tTerminalFirmwareVersion" + Environment.NewLine
            + "\tTerminalBootloaderVersion" + Environment.NewLine
            + "\tTerminalWindowsUsername" + Environment.NewLine
            + "\tTerminalServerGroupList" + Environment.NewLine
            + "\tCurrentTerminalServerGroup" + Environment.NewLine
            + "\tCurrentWindowsUsername" + Environment.NewLine
            + "\tUserID" + Environment.NewLine
            + "\tTermSecureUsername" + Environment.NewLine
            + "\tTermSecureWindowsUsername" + Environment.NewLine
            + "\tWatchdogTime" + Environment.NewLine
            + "Arguments, Commands" + Environment.NewLine
            + "\tReboot" + Environment.NewLine
            + "\tRestart" + Environment.NewLine 
            + "\tCalibrate" + Environment.NewLine 
            + "\tGoToMainMenu" + Environment.NewLine 
            + "\tSwitchToNextGroup" + Environment.NewLine 
            + "\tSwitchToPrevGroup" + Environment.NewLine 
            + "\tSwitchInstFailover" + Environment.NewLine 
            + "\tChangeTermSecureUser" + Environment.NewLine 
            + "\tLogOffAndChangeTermSecureUser" + Environment.NewLine 
            + "\tLogOffTermSucureUser" + Environment.NewLine 
            + "\tDisconnectTermSecureUser" + Environment.NewLine
            + "\tChangeTerminalServerGroup" + Environment.NewLine
            + "\tTermSecureCheckAccess" + Environment.NewLine;

            Exit();
        }

        // Enable 3 second timer after the demo has been enabled.
        // This provides a timeout in case it can't conenct to the control.
        private void WaitForConnection()
        {
            timerWaitForConnection.Enabled = true;
        }

        // Enables/disables the OverrideIP and demo control sections.
        private void EnableControl(bool enabled)
        {
            groupBoxDemoControl.Enabled = enabled;
            groupBoxOverrideIP.Enabled = enabled;
        }

        // Enables/disables all other sections.
        // These sections are only available when connected to the control
        private void ChangeEnabled(bool enabled)
        {
            groupBoxTerminalInfo.Enabled = enabled;
            groupBoxTerminalControl.Enabled = enabled;
            groupBoxSessionControl.Enabled = enabled;
            groupBoxNavigation.Enabled = enabled;
            groupBoxGetDisplayClientScreen.Enabled = enabled;
            groupBoxTermSecure.Enabled = enabled;
            groupBoxCameraOverlay.Enabled = enabled;
            groupBoxActiveScreen.Enabled = enabled;
            groupBoxLocation.Enabled = enabled;
            groupBoxWatchdog.Enabled = enabled;
            groupBoxBiometric.Enabled = enabled;
            buttonEnable.Enabled = !enabled;
            buttonDisable.Enabled = enabled;
        }

        // Checks that the IP address in the OverrideIP section is a valid format
        private bool CheckValidIP(string IPAddress)
        {
            System.Net.IPAddress address;
            if (System.Net.IPAddress.TryParse(IPAddress, out address))
            {
                if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) return true;
            }
            if (gui) MessageBox.Show("Please use a valid (xxx.xxx.xxx.xxx) IPv4 address");
            return false;
        }

        // returns the corresponding string for a result code.
        private string ResultLookup(int res)
        {
            switch(res)
            {
                case (short)TERMMONLib.TermMonConst.Busy:
                    return "Busy";
                case (short)TERMMONLib.TermMonConst.Connected:
                    return "Connected";
                case (short)TERMMONLib.TermMonConst.Disconnected:
                    return "Disconnected";
                case (short)TERMMONLib.TermMonConst.Fail:
                    return "Failed";
                case (short)TERMMONLib.TermMonConst.GroupNotFound:
                    return "Group Not Found";
                case (short)TERMMONLib.TermMonConst.InvalidMember:
                    return "Invalid Member";
                case (short)TERMMONLib.TermMonConst.RequestFailed:
                    return "Request Failed";
                case (short)TERMMONLib.TermMonConst.Success:
                    return "Success";
                case (short)TERMMONLib.TermMonConst.Timeout:
                    return "Timeout";
                case (short)TERMMONLib.TermMonConst.Updating:
                    return "Updating";
                case (short)TERMMONLib.TermMonConst.UserNotFound:
                    return "User Not Found";
                case (short)TERMMONLib.TermMonConst.ValidMember:
                    return "Valid Member";
                case (short)TERMMONLib.TermMonConst.BadPassword:
                    return "Bad Password";
                case (short)TERMMONLib.TermMonConst.NoPermission:
                    return "No Permission";
                case (short)TERMMONLib.TermMonConst.NoWindowsPassword:
                    return "No Windows Password";
                case (short)TERMMONLib.TermMonConst.NoWindowsUsername:
                    return "No Windows Username";
                case (short)TERMMONLib.TermMonConst.PasswordChangeReq:
                    return "Password Change Required";
                default:
                    return "Error: Other";
            }
        }

        // 3 second timer for connection timeout.
        private void timerWaitForConnection_Tick(object sender, EventArgs e)
        {
            axTermMon.Disable();
            timerWaitForConnection.Enabled = false;

            string message = "";
            string location = "this terminal";
            if (axTermMon.RunInSession == false)
            {
                location = axTermMon.OverrideIP;
                message = "\n- Is 'Only allow connections from session' set to 'NO' in the module?";
            }
            message = "The demo application could not connect to the ActiveX control on " + location + "\n\n- Check that TermMon.ocx is registered on the terminal server.\n- Check that the terminal has the TermMon ActiveX module" + message;

            int res = (int)MessageBox.Show(message, "TermMon ActiveX Demo", MessageBoxButtons.RetryCancel, MessageBoxIcon.Asterisk);

            if (res == 4)
            {
                WaitForConnection();
            }
            else
            {
                EnableControl(true);
            }
        }

        private void timerConnectionTimeout_Tick(object sender, EventArgs e)
        {
            Console.WriteLine("Connection Failed");
            Application.Exit();
        }

        private void timerRuntime_Tick(object sender, EventArgs e)
        {
            Console.WriteLine("Failed to complete all commands");
            Application.Exit();
        }

        private void timerRunCommands_Tick(object sender, EventArgs e)
        {
            timerRunCommands.Enabled = false;
            ProcessCommands();
        }

        private void ProcessCommands()
        {
            var Commands = args.Intersect(CommandList);

            foreach (string command in Commands)
            {
                axTermMon.Command(GetCommandCode(command));
                if (--CommandCount == 0)
                {
                    Application.Exit();
                }
            }

            ProcessSpecial();
        }

        private void ProcessSpecial()
        {
            string[] Special = { "changeterminalservergroup", "termsecurecheckaccess" };
            string data = "";

            var Commands = args.Intersect(Special);

            foreach (string command in Commands)
            {
                CommandCount--;
                int i = Array.IndexOf(args, command);

                if (i < args.Length - 1 && i != -1) data = args[i + 1].ToLower();
                else
                {
                    Console.WriteLine("That command requires data. Command Data");
                    break;
                }

                if (String.Compare(command, "termsecurecheckaccess") == 0)
                {
                    string[] TSdata = data.Split(',');
                    if (TSdata.Length == 2)
                    {
                        Console.WriteLine(ResultLookup(axTermMon.TermSecureCheckAccess(TSdata[0], TSdata[1])));
                    }
                    else
                    {
                        Console.WriteLine("Use 'username,group' to check TermSecure access");
                    }
                }
                else
                {
                    axTermMon.ChangeTerminalServerGroup(data);
                }
            }
            if (CommandCount == 0) Application.Exit();
        }

        private short GetCommandCode(string command)
        {
            switch (command)
            {
                case "reboot":
                    return (short)TERMMONLib.TermMonCommand.Reboot;
                case "restart":
                    return (short)TERMMONLib.TermMonCommand.Restart;
                case "calibrate":
                    return (short)TERMMONLib.TermMonCommand.Calibrate;
                case "gotomainmenu":
                    return (short)TERMMONLib.TermMonCommand.GotoMainMenu;
                case "swtichtonextgroup":
                    return (short)TERMMONLib.TermMonCommand.SwitchToNextGroup;
                case "switchtopreviousgroup":
                    return (short)TERMMONLib.TermMonCommand.SwitchToPrevGroup;
                case "switchinstantfailover":
                    return (short)TERMMONLib.TermMonCommand.SwitchInstFailover;
                case "changetermsecureuser":
                    return (short)TERMMONLib.TermMonCommand.ChangeTermSecureUser;
                case "loggoffandchangetermsecureuser":
                    return (short)TERMMONLib.TermMonCommand.LogOffAndChangeTermSecureUser;
                case "logofftermsecureuser":
                    return (short)TERMMONLib.TermMonCommand.LogOffTermSecureUser;
                case "disconnecttermsecureuser":
                    return (short)TERMMONLib.TermMonCommand.DisconnectTermSecureUser;
                default:
                    return 0;
            }
        }

        public string ConvertStringToHex(string asciiString)
        {
            string hex = "";
            foreach (char c in asciiString)
            {
                hex += String.Format("{0:x2} ", Convert.ToString(c, 16));
            }
            return hex;
        }

        // Updates demo fields when an event occurs
        private void axTermMon_OnEvent(object sender, AxTERMMONLib._DTermMonEvents_OnEventEvent e)
        {
            switch (e.eventCode)
            {
                case (short)TERMMONLib.TermMonEvent.ConnectionState:
                    if (gui)
                    {
                        if (axTermMon.ConnectionState == (short)TERMMONLib.TermMonConst.Connected)
                        {
                            textBoxConnectionState.Text = "Connected";
                            textBoxConnectionState.BackColor = System.Drawing.Color.Lime;
                            timerWaitForConnection.Enabled = false;
                            // Enable all sections of the demo
                            ChangeEnabled(true);
                            // disable the [[watchdog]] controls if not running on the client
                            if (checkBoxRunInNonSession.Checked)
                            {
                                groupBoxWatchdog.Enabled = false;
                                groupBoxSessionControl.Enabled = false;
                            }
                        }
                        else if (axTermMon.ConnectionState == (short)TERMMONLib.TermMonConst.Disconnected)
                        {
                            textBoxConnectionState.Text = "Disconnected";
                            textBoxConnectionState.BackColor = System.Drawing.Color.LightGray;
                            ChangeEnabled(false);
                        }
                        else if (axTermMon.ConnectionState == (short)TERMMONLib.TermMonConst.Fail)
                        {
                            textBoxConnectionState.Text = "Failed";
                            textBoxConnectionState.BackColor = System.Drawing.Color.Red;
                            ChangeEnabled(false);
                        }
                    }
                    else
                    {
                        timerConnectionTimeout.Enabled = false;
                        timerRunCommands.Enabled = true;
                        if (args.Contains("ConnectionState"))
                        {
                            textOut = textOut + "Connection State: " + "Connected" + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalName:
                    if (gui) textBoxName.Text = axTermMon.TerminalName;
                    else
                    {
                        if (args.Contains("terminalname"))
                        {
                            textOut = textOut + "Terminal Name: " + axTermMon.TerminalName + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalIP:
                    if (gui) textBoxIPAddress.Text = axTermMon.TerminalIP;
                    else
                    {
                        if (args.Contains("terminalip"))
                        {
                            textOut = textOut + "Terminal IP: " + axTermMon.TerminalIP + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalMAC:
                    if (gui) textBoxMACAddress.Text = axTermMon.TerminalMAC;
                    else
                    {
                        if (args.Contains("terminalmac"))
                        {
                            textOut = textOut + "Terminal MAC: " + axTermMon.TerminalMAC + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalFirmwareVersion:
                    if (gui) textBoxFirmwareVersion.Text = axTermMon.TerminalFirmwareVersion;
                    else
                    {
                        if (args.Contains("terminalfirmwareversion"))
                        {
                            textOut = textOut + "Terminal Firmware Version: " + axTermMon.TerminalFirmwareVersion + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalBootLoaderVersion:
                    if (gui) textBoxBootRomVersion.Text = axTermMon.TerminalBootLoaderVersion;
                    else
                    {
                        if (args.Contains("terminalbootloaderversion"))
                        {
                            textOut = textOut + "Terminal Boot Loader Version: " + axTermMon.TerminalBootLoaderVersion + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalModel:
                    if (gui) textBoxModel.Text = axTermMon.TerminalModel;
                    else
                    {
                        if (args.Contains("terminalmodel"))
                        {
                            textOut = textOut + "Terminal Model: " + axTermMon.TerminalModel + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalWindowsUsername:
                    if (gui) textBoxTermWinUsername.Text = axTermMon.TerminalWindowsUsername;
                    else
                    {
                        if (args.Contains("terminalwindowsusername"))
                        {
                            textOut = textOut + "Windows Username: " + axTermMon.TerminalWindowsUsername + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalServerGroupList:
                    if (gui) textBoxTSGroupList.Text = axTermMon.TerminalServerGroupList;
                    else
                    {
                        if (args.Contains("TerminalServerGroupList"))
                        {
                            textOut = textOut + "[[Display Clients]]: " + axTermMon.TerminalServerGroupList + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.CurrentTerminalServerGroup:
                    if (gui) textBoxCurrentTSGroup.Text = axTermMon.CurrentTerminalServerGroup;
                    else
                    {
                        if (args.Contains("CurrentTerminalServerGroup"))
                        {
                            textOut = textOut + "Current [[Display Client]]: " + axTermMon.CurrentTerminalServerGroup + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.CurrentWindowsUsername:
                    if (gui) textBoxSessionWinUsername.Text = axTermMon.CurrentWindowsUsername;
                    else
                    {
                        if (args.Contains("CurrentWindowsUsername"))
                        {
                            textOut = textOut + "Current Windows Username: " + axTermMon.CurrentWindowsUsername + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TerminalServerName:
                    if (gui) textBoxTermServerName.Text = axTermMon.TerminalServerName;
                    else
                    {
                        if (args.Contains("TerminalServerName"))
                        {
                            textOut = textOut + "Terminal Server: " + axTermMon.TerminalServerName + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.UserID:
                    if (gui) textBoxTSUserID.Text = axTermMon.UserID;
                    else
                    {
                        if (args.Contains("UserID"))
                        {
                            textOut = textOut + "User ID: " + axTermMon.UserID + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TermSecureUsername:
                    if (gui) textBoxTSUsername.Text = axTermMon.TermSecureUsername;
                    else
                    {
                        if (args.Contains("TermSecureUsername"))
                        {
                            textOut = textOut + "TermSecure Username: " + axTermMon.TermSecureUsername + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.TermSecureWindowsUsername:
                    if (gui) textBoxTSWinUsername.Text = axTermMon.TermSecureWindowsUsername;
                    else
                    {
                        if (args.Contains("TermSecureWindowsUsername"))
                        {
                            textOut = textOut + "TermSecure Windows Username: " + axTermMon.TermSecureWindowsUsername + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.RelevanceLocationName:
                    if (gui) textBoxLocationName.Text = axTermMon.RelevanceLocationName;
                    else
                    {
                        if (args.Contains("RelevanceLocationName"))
                        {
                            textOut = textOut + "Location Name: " + axTermMon.RelevanceLocationName + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.ScanResult:
                    if (gui) textBoxScanResponse.Text = axTermMon.ScanResult;
                    else
                    {
                        if (args.Contains("ScanResult"))
                        {
                            textOut = textOut + "Scan Result: " + axTermMon.ScanResult + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                case (short)TERMMONLib.TermMonEvent.BiometricData:
                    textBoxBiometricData.Text = ConvertStringToHex(axTermMon.BiometricData);
                    labelBiometricCount.Text = Convert.ToString(Convert.ToInt32(labelBiometricCount.Text) + 1);
                    break;
                case (short)TERMMONLib.TermMonEvent.BiometricLookupResult:
                    textBoxBiometricResult.Text = ResultLookup(axTermMon.BiometricLookupResult);
                    break;
                case (short)TERMMONLib.TermMonEvent.BiometricLookupUsername:
                    textBoxBiometricUsername.Text = axTermMon.BiometricLookupUsername;
                    break;
                case (short)TERMMONLib.TermMonEvent.WatchdogTime:
                    if (gui) labelWatchdogCount.Text = axTermMon.WatchdogTime.ToString();
                    else
                    {
                        if (args.Contains("WatchdogTime"))
                        {
                            textOut = textOut + "[[Watchdog]] Time: " + axTermMon.WatchdogTime.ToString() + Environment.NewLine;
                            CommandCount--;
                        }
                    }
                    break;
                default:
                    break;
            }
            if (CommandCount == 0 && !gui) Exit();
        }

        private void Exit()
        {
            Console.WriteLine(textOut);
            if (path.Length > 0)
            {
                textOut = Environment.NewLine + DateTime.Now.ToString() + Environment.NewLine + textOut;
                if (!File.Exists(path))
                {
                    // Create a file to write to if it doesn't already exist. 
                    File.WriteAllText(path, textOut);
                }
                else
                {
                    // Add to existing file 
                    File.AppendAllText(path, textOut);
                }
            }
            System.Environment.Exit(0);
        }

        // (All functions below) Handles button and check box clicks.

        private void buttonCalibrate_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.Calibrate);
        }

        private void buttonReboot_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.Reboot);
        }

        private void buttonRestart_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.Restart);
        }

        private void buttonDisconnect_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.DisconnectSession);
        }

        private void buttonLogoff_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.LogOffSession);
        }

        private void buttonPrevious_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.SwitchToPrevGroup);
        }

        private void buttonNext_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.SwitchToNextGroup);
        }

        private void buttonStartTiling_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.TileStart);
        }

        private void buttonStopTiling_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.TileEnd);
        }

        private void buttonMainMenu_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.GotoMainMenu);
        }

        private void buttonInstantFailover_Click(object sender, EventArgs e)
        {
            axTermMon.Command((short)TERMMONLib.TermMonCommand.SwitchInstFailover);
        }

        private void buttonGoToDisplayClient_Click(object sender, EventArgs e)
        {
            axTermMon.ChangeTerminalServerGroup(textBoxDisplayClientName.Text);
        }

        private void buttonGetScreen_Click(object sender, EventArgs e)
        {
            textBoxScreenNumber.Text = "";
            textBoxScreenNumber.Text = axTermMon.GetGroupScreen(textBoxGetDisplayClientName.Text).ToString();
        }

        private void buttonTSLogOn_Click(object sender, EventArgs e)
        {
            if (checkBoxTSLogOffUserSessions.Checked)
            {
                axTermMon.Command((short)TERMMONLib.TermMonCommand.LogOffAndChangeTermSecureUser);
            }
            else
            {
                axTermMon.Command((short)TERMMONLib.TermMonCommand.ChangeTermSecureUser);
            }
        }

        private void buttonTSLogOff_Click(object sender, EventArgs e)
        {
            if (checkBoxTSLogOffUserSessions.Checked)
            {
                axTermMon.Command((short)TERMMONLib.TermMonCommand.LogOffTermSecureUser);
            }
            else
            {
                axTermMon.Command((short)TERMMONLib.TermMonCommand.DisconnectTermSecureUser);
            }
        }

        private void buttonTSCheckAccess_Click(object sender, EventArgs e)
        {
            textBoxTSCheckAccessResponse.Text = "Updating...";
            textBoxTSCheckAccessResponse.Text = ResultLookup(axTermMon.TermSecureCheckAccess(textBoxTSCheckAccessUsername.Text, textBoxTSCheckAccessGroup.Text));
        }

        private void buttonTSLogOnUser_Click(object sender, EventArgs e)
        {
            textBoxTSLogOnResponse.Text = "Updating...";
            textBoxTSLogOnResponse.Text = ResultLookup(axTermMon.TermSecureLogonUser(textBoxTSLogOnUsername.Text, textBoxTSLogOnPassword.Text));
        }

        private void buttonCamEnable_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlayEnable(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamDisable_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlayDisable(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamCycleStart_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlayCycleStart(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamCycleStop_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlayCycleStop(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamPrevious_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlaySwitchPrev(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamNext_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlaySwitchNext(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamSwitchByName_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlaySwitchByName(textBoxCamGroupName.Text, textBoxCamOverlayName.Text, textBoxCamName.Text);
        }

        private void buttonCamEnterFullscreen_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlayFullscreenEnter(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamExitFullscreen_Click(object sender, EventArgs e)
        {
            axTermMon.CameraOverlayFullscreenExit(textBoxCamGroupName.Text, textBoxCamOverlayName.Text);
        }

        private void buttonCamMove_Click(object sender, EventArgs e)
        {
            if (textBoxCamX.Text.Length == 0) textBoxCamX.Text = "100";
            if (textBoxCamY.Text.Length == 0) textBoxCamY.Text = "100";
            axTermMon.CameraOverlayMove(textBoxCamGroupName.Text, textBoxCamOverlayName.Text, short.Parse(textBoxCamX.Text), short.Parse(textBoxCamY.Text));
        }

        private void buttonCamResize_Click(object sender, EventArgs e)
        {
            if (textBoxCamW.Text.Length == 0) textBoxCamW.Text = "100";
            if (textBoxCamH.Text.Length == 0) textBoxCamH.Text = "100";
            axTermMon.CameraOverlayResize(textBoxCamGroupName.Text, textBoxCamOverlayName.Text, short.Parse(textBoxCamW.Text), short.Parse(textBoxCamH.Text));
        }

        private void buttonCamMoveResize_Click(object sender, EventArgs e)
        {
            if (textBoxCamX.Text.Length == 0) textBoxCamX.Text = "100";
            if (textBoxCamY.Text.Length == 0) textBoxCamY.Text = "100";
            if (textBoxCamW.Text.Length == 0) textBoxCamW.Text = "100";
            if (textBoxCamH.Text.Length == 0) textBoxCamH.Text = "100";
            axTermMon.CameraOverlayResizeMove(textBoxCamGroupName.Text, textBoxCamOverlayName.Text, short.Parse(textBoxCamX.Text), short.Parse(textBoxCamY.Text), short.Parse(textBoxCamW.Text), short.Parse(textBoxCamH.Text));
        }

        private void buttonEnable_Click(object sender, EventArgs e)
        {
            axTermMon.RunInSession = true;

            if (checkBoxRunInNonSession.Checked)
            {
                axTermMon.RunInSession = false;
                if (CheckValidIP(textBoxOverrideIPAddress.Text))
                {
                    axTermMon.OverrideIP = textBoxOverrideIPAddress.Text;
                    
                }
                else
                {
                    return;
                }
            }

            axTermMon.Enable();
            WaitForConnection();
        }

        private void buttonDisable_Click(object sender, EventArgs e)
        {
            short res = axTermMon.Disable();

            if (res == (short)TERMMONLib.TermMonConst.Fail)
            {
                MessageBox.Show("Not Enabled");
            }
        }

        private void buttonSetActiveScreen_Click(object sender, EventArgs e)
        {
            // Checks to make sure the screen number given is valid. 0 through 5.
            short i = -1;
            if (textBoxSetActiveScreen.Text.Length > 0) i = short.Parse(textBoxSetActiveScreen.Text);
            if (i >= 0 && i < 6)
            {
                axTermMon.ActiveScreen = i;
            }
            else
            {
                MessageBox.Show("To set active screen use 0 through 5");
            }
        }

        private void buttonWatchdogSet_Click(object sender, EventArgs e)
        {
            // checks to make sure the [[watchdog]] time given is valid.
            if (short.Parse(textBoxWatchdogSeconds.Text) > 32767)
            {
                textBoxWatchdogSeconds.Text = "32767";
            }
            labelWatchdogCount.Text = textBoxWatchdogSeconds.Text;
            axTermMon.WatchdogTime = short.Parse(textBoxWatchdogSeconds.Text);
        }

        private void checkBoxTSDisconnectUserSessions_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBoxTSDisconnectUserSessions.Checked)
            {
                checkBoxTSLogOffUserSessions.Checked = false;
            }
            else
            {
                checkBoxTSLogOffUserSessions.Checked = true;
            }
        }

        private void checkBoxTSLogOffUserSessions_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBoxTSLogOffUserSessions.Checked)
            {
                checkBoxTSDisconnectUserSessions.Checked = false;
            }
            else
            {
                checkBoxTSDisconnectUserSessions.Checked = true;
            }
        }

        private void buttonScanQuery_Click(object sender, EventArgs e)
        {
            short i;
            textBoxScanResponse.Text = "Requesting Scan...";
            textBoxScanResponse.Update();
            i = axTermMon.Command((short)TERMMONLib.TermMonCommand.ScanCodeAndQueryLocation);
            if (i != (short)TERMMONLib.TermMonConst.Success)
                textBoxScanResponse.Text = "Request Failed";
        }

        private void buttonLocLogon_Click(object sender, EventArgs e)
        {
            short i;

            if (comboLocAction.Text == "transfer")
                i = (short)TERMMONLib.TermMonRelevance.ActionTransfer;
            else if (comboLocAction.Text == "clone")
                i = (short )TERMMONLib.TermMonRelevance.ActionClone;
            else if (comboLocAction.Text == "shadow")
                i = (short)TERMMONLib.TermMonRelevance.ActionShadow;
            else
                i = (short)TERMMONLib.TermMonRelevance.ActionNone;

            textBoxScanResponse.Text = "Requesting Logon...";
            textBoxScanResponse.Update();
            textBoxScanResponse.Text = ResultLookup(axTermMon.RelevanceLocationLogon(textBoxLocPathName.Text, i, 1));
        }

        private void buttonScanData_Click(object sender, EventArgs e)
        {
            short i;
            textBoxScanResponse.Text = "Requesting Scan...";
            textBoxScanResponse.Update();
            i = axTermMon.Command((short)TERMMONLib.TermMonCommand.ScanCodeReturnData);
            if (i != (short)TERMMONLib.TermMonConst.Success)
                textBoxScanResponse.Text = "Request Failed";
        }

        private void buttonLocLogoff_Click(object sender, EventArgs e)
        {
            textBoxScanResponse.Text = "Requesting Logoff...";
            textBoxScanResponse.Update();
            textBoxScanResponse.Text = ResultLookup(axTermMon.RelevanceLocationLogoff(1));
        }

        private void buttonBiometricScanAndQuery_Click(object sender, EventArgs e)
        {
            short i;
            textBoxBiometricResult.Text = "Requesting Scan...";
            textBoxBiometricUsername.Text = "";
            i = axTermMon.Command((short)TERMMONLib.TermMonCommand.ScanBiometricAndQueryUser);
            if (i != (short)TERMMONLib.TermMonConst.Success)
                textBoxBiometricResult.Text = "Request Failed";
        }
    }
}