//		private bool IsSimulatorFocused()
//		{
//			foreach (Process p in Process.GetProcessesByName(_sim.ProcessName))
//			{
//				if (GetForegroundWindow() == p.MainWindowHandle)
//				{
//					return true;
//				}
//			}
//
//			return false;
//		}

        private void InitDevices()
        {
            tmrTurn.Stop();

            try
            {
                _mcm = new MotionControllerManager.MotionControllerManager();
                _mcm.initialize(true);
                _mcm.initDetectors();
                _mcm.update(0);
                //Set initial controller sequence
                for (int i = 0; i < _mcm.Count; i++)
                {
                    ControllerSequence[i] = i;
                }
                //Assign to handbells
                for (int i = 0; i < 4; i++)
                {
                    _hb[i] = new Handbell(_mcm, i);
                    if (i >= _mcm.Count)
                    {
                        _hb[i].Enabled = false;
                    }
                    else
                    {
                        _hb[i].Enabled = true;
                        _hb[i].UpdateSettings();
                        _hb[i].Update(0);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message != "No Motion Controller Found" && _suppressNoControllerMessage)
                {
                    MessageBox.Show(ex.Message, "Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            _lastTick = Environment.TickCount;
            btnReset_Click(null, EventArgs.Empty);
            if (_mcm.Count > 0)
            {
                btnReset.Focus();
            }
            else
            {
                btnFindControllers.Focus();
            }

            if (_monitorForm != null)
            {
                _monitorForm.ReInitLines();
            }
            tmrTurn.Start();
        }
        private void tmrTurn_Tick(object sender, EventArgs e)
        {
            _ticksSinceUpdate = Environment.TickCount - _lastTick;
            _updates++;
            _sumticks       += _ticksSinceUpdate;
            _averageticks    = _sumticks / _updates;
            _secsSinceUpdate = (double)_ticksSinceUpdate / 1000d;
            if (_secsSinceUpdate < 0)
            {
                _secsSinceUpdate = 0;
            }
            _mcm.update(_secsSinceUpdate);
            _lastTick = Environment.TickCount;

            for (int i = 0; i < _mcm.Count; i++)
            {
                if (i < 4)
                {
                    _hb[i].Update(_lastTick);
                    if (_hb[i].HandstrokeStrike)
                    {
                        SendKeystrokes(_sim.KeyHS[i], false, true);
                        this.Controls["txtCountHS" + i].Text = Convert.ToString(Convert.ToInt32(this.Controls["txtCountHS" + i].Text) + 1);
                    }
                    if (_hb[i].BackstrokeStrike)
                    {
                        SendKeystrokes(_sim.KeyBS[i], true, false);
                        this.Controls["txtCountBS" + i].Text = Convert.ToString(Convert.ToInt32(this.Controls["txtCountBS" + i].Text) + 1);
                    }
                    if (_hb[i].Button1Pressed)
                    {
                        SendKeystrokes(_sim.KeyB1[i], false, false);
                        this.Controls["txtCountB1" + i].Text = Convert.ToString(Convert.ToInt32(this.Controls["txtCountB1" + i].Text) + 1);
                    }
                    if (_hb[i].Button2Pressed)
                    {
                        SendKeystrokes(_sim.KeyB2[i], false, false);
                        this.Controls["txtCountB2" + i].Text = Convert.ToString(Convert.ToInt32(this.Controls["txtCountB2" + i].Text) + 1);
                    }
                    if (_hb[i].Button3Pressed)
                    {
                        SendKeystrokes(_sim.KeyB3[i], false, false);
                        this.Controls["txtCountB3" + i].Text = Convert.ToString(Convert.ToInt32(this.Controls["txtCountB3" + i].Text) + 1);
                    }
                    if (_hb[i].Button4Pressed)
                    {
                        SendKeystrokes(_sim.KeyB4[i], false, false);
                        this.Controls["txtCountB4" + i].Text = Convert.ToString(Convert.ToInt32(this.Controls["txtCountB4" + i].Text) + 1);
                    }
                    if (_hb[i].Handstroke)
                    {
                        this.Controls["txtCountHS" + i].BackColor = Color.Orange;
                    }
                    else
                    {
                        this.Controls["txtCountHS" + i].BackColor = SystemColors.Window;
                    }
                    if (_hb[i].Backstroke)
                    {
                        this.Controls["txtCountBS" + i].BackColor = Color.Orange;
                    }
                    else
                    {
                        this.Controls["txtCountBS" + i].BackColor = SystemColors.Window;
                    }
                    if (_hb[i].Button1Down)
                    {
                        this.Controls["txtCountB1" + i].BackColor = Color.Orange;
                    }
                    else
                    {
                        this.Controls["txtCountB1" + i].BackColor = SystemColors.Window;
                    }
                    if (_hb[i].Button2Down)
                    {
                        this.Controls["txtCountB2" + i].BackColor = Color.Orange;
                    }
                    else
                    {
                        this.Controls["txtCountB2" + i].BackColor = SystemColors.Window;
                    }
                    if (_hb[i].Button3Down)
                    {
                        this.Controls["txtCountB3" + i].BackColor = Color.Orange;
                    }
                    else
                    {
                        this.Controls["txtCountB3" + i].BackColor = SystemColors.Window;
                    }
                    if (_hb[i].Button4Down)
                    {
                        this.Controls["txtCountB4" + i].BackColor = Color.Orange;
                    }
                    else
                    {
                        this.Controls["txtCountB4" + i].BackColor = SystemColors.Window;
                    }
                }
            }

            if (_monitorForm != null)
            {
                _monitorForm.UpdateGraph(_hb, _mcm.Count);
            }

            if (_optionsForm != null)
            {
                _optionsForm.Tick();
            }
        }