Esempio n. 1
0
        private void OnTicker(ITrackingListener trackingListener)
        {
            DateTime systemStartupTime;
            TimeSpan userIdleDuration;

            if (!Win32.GetLastInputInfo(out systemStartupTime, out userIdleDuration))
            {
                return;
            }

            if (_isBusy)
            {
                return;
            }

            _isBusy = true;
            try
            {
                RecordMeasurement(trackingListener, systemStartupTime, userIdleDuration);
            }
            finally
            {
                _isBusy = false;
            }
        }
Esempio n. 2
0
        public void StartTicker(ITrackingListener trackingListener)
        {
            if (_tickerRunning)
            {
                throw new InvalidOperationException("Cannot call StartTicker more than once");
            }

            _ticker.Elapsed += delegate { OnTicker(trackingListener); };

            _ticker.Start();
            _tickerRunning = true;
        }
Esempio n. 3
0
        private void RecordMeasurement(ITrackingListener trackingListener, DateTime systemStartupTime, TimeSpan userIdleDuration)
        {
            var now = DateTime.Now;

            _activeWindowTitle          = GetActiveWindowTitle() ?? NULL_WINDOW_TITLE;
            _activeWindowModuleFilepath = GetActiveWindowModuleFilePath() ?? NULL_FILE_PATH;
            _activeWindowString         = _activeWindowTitle + "|" + _activeWindowModuleFilepath;

            trackingListener.OnActiveWindowInfo(new OnActiveWindowInfoEvent(now, _activeWindowTitle, _activeWindowModuleFilepath, systemStartupTime, userIdleDuration));

            if (!_activatedWindowsAndTimes.ContainsKey(_activeWindowString))
            {
                _activatedWindowsAndTimes.Add(_activeWindowString, new WindowTimes(_activeWindowTitle, _activeWindowModuleFilepath));
            }

            var winTimes = _activatedWindowsAndTimes[_activeWindowString];

            if (!_activeWindowString.Equals(_lastWindowString, StringComparison.InvariantCultureIgnoreCase))
            {
                _lastWindowString = _activeWindowString;

                winTimes.TotalTimes.Add(now, DateTime.MinValue);
            }

            var lastStartTime = winTimes.TotalTimes.Last().Key;

            winTimes.TotalTimes[lastStartTime] = now;

            if (userIdleDuration.TotalSeconds > _minimumIdleDuration.TotalSeconds)
            {
                if (!_activeWindowString.Equals(_lastIdleWindowString, StringComparison.InvariantCultureIgnoreCase))
                {
                    _lastIdleWindowString = _activeWindowString;
                    winTimes.IdleTimes.Add(now.Subtract(userIdleDuration), DateTime.MinValue);
                }

                var lastIdleStart = winTimes.IdleTimes.Last().Key;
                winTimes.IdleTimes[lastIdleStart] = now;
            }
            else
            {
                _lastIdleWindowString = null;
            }
        }