Пример #1
0
        public List <ProcessInfo> GetValue()
        {
            List <ProcessInfo> procesInfos = new List <ProcessInfo>();
            List <Process>     processes   = new List <Process>();

            try
            {
                switch (ProcessFilterType)
                {
                case ProcessCollectorFilterType.ProcessName:
                    processes.AddRange(Process.GetProcessesByName(ProcessFilter));
                    break;

                case ProcessCollectorFilterType.ExecutableName:
                    foreach (var p in Process.GetProcesses())
                    {
                        try
                        {
                            if (p.MainModule != null && p.MainModule.ModuleName.ToLower() == ProcessFilter.ToLower())
                            {
                                processes.Add(p);
                            }
                        }
                        catch { }
                    }
                    break;

                case ProcessCollectorFilterType.DisplayName:
                    processes.AddRange((from p in Process.GetProcesses()
                                        where p.MainWindowTitle.ToLower() == ProcessFilter.ToLower()
                                        select p));
                    break;

                case ProcessCollectorFilterType.FullPath:
                    //
                    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher($"SELECT ProcessId,ExecutablePath FROM Win32_Process WHERE ExecutablePath like '{ProcessFilter.Replace("\\","\\\\")}%'"))
                    {
                        using (ManagementObjectCollection results = searcher.Get())
                        {
                            int nItems = results.Count;
                            if (nItems > 0)
                            {
                                foreach (ManagementObject objServiceInstance in results)
                                {
                                    object val = objServiceInstance.Properties["ProcessId"].Value;
                                    try
                                    {
                                        //int processId = 0;
                                        if (int.TryParse(val.ToString(), out int processId))
                                        {
                                            processes.Add(Process.GetProcessById(processId));
                                        }
                                    }
                                    catch { }
                                }
                            }
                        }
                    }
                    break;

                case ProcessCollectorFilterType.StartUpCommandLine:
                    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher($"SELECT ProcessId,CommandLine FROM Win32_Process WHERE CommandLine like '{ProcessFilter.Replace("\\","\\\\")}'"))
                    {
                        using (ManagementObjectCollection results = searcher.Get())
                        {
                            int nItems = results.Count;
                            if (nItems > 0)
                            {
                                foreach (ManagementObject objServiceInstance in results)
                                {
                                    object val = objServiceInstance.Properties["ProcessId"].Value;
                                    try
                                    {
                                        if (int.TryParse(val.ToString(), out int processId))
                                        {
                                            processes.Add(Process.GetProcessById(processId));
                                        }
                                    }
                                    catch { }
                                }
                            }
                        }
                    }
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
            }

            if (processes.Count > 0)
            {
                foreach (Process process in processes)
                {
                    procesInfos.Add(ProcessInfo.CreateFromProcess(process, true)); // CheckPerformance));
                }
            }

            return(procesInfos);
        }