Example #1
0
        /// <summary>
        /// Gets all current windows tasks running on the system.
        /// </summary>
        /// <returns><see cref="Task{TResult}"/></returns>
        public async Task <List <WinTask> > GetAll()
        {
            var result = await Task.Run(async() =>
            {
                var tasks          = new List <WinTask>();
                var wmiQueryString = "SELECT ProcessId, ExecutablePath, CommandLine FROM Win32_Process";
                using (var searcher = new ManagementObjectSearcher(wmiQueryString))
                    using (var results = searcher.Get())
                    {
                        var query = from p in Process.GetProcesses()
                                    join mo in results.Cast <ManagementObject>()
                                    on p.Id equals(int) (uint) mo["ProcessId"]
                                    select new
                        {
                            Process     = p,
                            Path        = (string)mo["ExecutablePath"],
                            CommandLine = (string)mo["CommandLine"],
                        };

                        var innerQuery = query.ToList();
                        innerQuery.RemoveAll(e => e.Path == null);

                        foreach (var item in innerQuery)
                        {
                            tasks.Add(new WinTask
                            {
                                ProcessId      = item.Process.Id,
                                ExecutablePath = item.Path,
                                ExecutableName = Path.GetFileName(item.Path),
                            });
                        }

                        tasks.RemoveAll(e => e.ExecutablePath == null);
                    }

                var internalTasks = tasks.GroupBy(x => x.ExecutablePath).Select(x => x.First()).ToList();
                return(internalTasks.OrderBy(e => e.ExecutableName).ToList());
            });

            foreach (var item in result)
            {
                item.Icon = iconService.GetImageSourceFromFilePath(item.ExecutablePath);
            }

            return(result);
        }