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; } }
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; }
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; } }