예제 #1
0
        private void ManageProcesses()
        {
            var windowedProcesses = WindowsShell.GetWindowsByProcessId();

            //log.Debug("Processes found were " + string.Join(", ", windowedProcesses.Keys));
            var removedProcessKeys = _processSet.Except(windowedProcesses.Keys).ToHashSet();
            var addedProcessKeys   = windowedProcesses.Keys.Except(_processSet).ToHashSet();

            var addedEventArgs   = addedProcessKeys.Count > 0 ? new ProcessChangedEventArgs(addedProcessKeys) : null;
            var removedEventArgs = removedProcessKeys.Count > 0 ? new ProcessChangedEventArgs(removedProcessKeys) : null;

            _processSet = windowedProcesses.Keys.ToHashSet();

            if (addedEventArgs != null)
            {
                log.Info("System detected that processes were added. Raising event...");
                ProcessesAddedEvent?.Invoke(this, addedEventArgs);
            }

            if (removedEventArgs != null)
            {
                log.Info("System detected that processes were removed. Raising event...");
                ProcessesRemovedEvent?.Invoke(this, removedEventArgs);
            }
        }
예제 #2
0
        private void SystemEventsOnDisplaySettingsChanged(object sender, EventArgs e)
        {
            log.Info("Desktop settings changed. Triggering a hard update...");
            Stop();
            // Snapshot all process
            var allApps = new ProcessChangedEventArgs(new HashSet <int>(_processSet));

            // Trigger a notification to remove all of them
            ProcessesRemovedEvent?.Invoke(this, allApps);
            _processSet.Clear();
            // Restart the timer to force a re-trigger of all placements
            Start();
        }