private void Form1_Load(object sender, EventArgs e)
        {
            tmrTick.Interval = Properties.Settings.Default.TimerIntervalSeconds * 1000;

            try
            {
                Debug.WriteLine("Testing ICA client object");
                var icaClient    = new WFICALib.ICAClient();
                var version      = icaClient.Version;
                var enumHandle   = icaClient.EnumerateCCMSessions();
                var sessionCount = icaClient.GetEnumNameCount(enumHandle);
                icaClient.CloseEnumHandle(enumHandle);
            }
            catch (Exception ex)
            {
                MessageBox.Show("An error occured while registering the ICA CCM Object", "Error on Startup", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }

            if (!CheckCCMRegistryKeys())
            {
                MessageBox.Show(@"The CCM registry DWORDS (AllowSimulationAPI & AllowLiveMonitoring) are missing from HKLM:\" + CCMRegPath, "Missing CCM values detected on Startup", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
            Debug.WriteLine("Starting Timer");

            tmrTick.Start();
            this.Visible = false;
        }
        private void tmrTick_Tick(object sender, EventArgs e)
        {
            try
            {
                Debug.WriteLine("Timer Ticking");

                var icaClient    = new WFICALib.ICAClient();
                var enumHandle   = icaClient.EnumerateCCMSessions();
                var sessionCount = icaClient.GetEnumNameCount(enumHandle);
                Debug.WriteLine("Found {0} sessions", sessionCount);
                int itemCount = 0;

                while (itemCount < sessionCount)
                {
                    try
                    {
                        Debug.WriteLine("Sending keepalive to session: {0}", itemCount);
                        string             session    = icaClient.GetEnumNameByIndex(enumHandle, itemCount);
                        WFICALib.ICAClient icaSession = new WFICALib.ICAClient();
                        icaSession.SetProp("OutputMode", "1");
                        icaSession.StartMonitoringCCMSession(session, true);
                        icaSession.Session.Keyboard.SendKeyDown(Properties.Settings.Default.KeyValue);//(int)Keys.B);
                        icaSession.StopMonitoringCCMSession(session);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Keepalive to session: {0} failed: {1}", itemCount, ex.ToString());
                    }
                    itemCount += 1;
                }
                icaClient.CloseEnumHandle(enumHandle);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Timer tick exception: {0}", ex.ToString());
            }
        }