public TreeProcessor(TreeNode node, ProcessTreeNode eventHandler) { if (eventHandler != null) { ProcessTreeNodeEventHandler += eventHandler; Process(node); } }
/// <summary> /// Enums the nodes. /// </summary> /// <param name="nodes">The nodes.</param> /// <param name="callback">The callback.</param> private static void EnumNodes(TreeNodeCollection nodes, ProcessTreeNode callback) { foreach (TreeNode node in nodes) { callback(node); if (node.Nodes.Count > 0) { EnumNodes(node.Nodes, callback); } } }
private static void FillTree() { DateTime start = DateTime.Now; var results = new List <Process>(); // query the management system objects for any process that has the current // process listed as it's parentprocessid string queryText = string.Format("select processid, parentprocessid from win32_process"); using (var searcher = new ManagementObjectSearcher(queryText)) { foreach (var obj in searcher.Get()) { object pidObj = obj.Properties["processid"].Value; object parentPidObj = obj.Properties["parentprocessid"].Value; if (pidObj != null) { int pid = Convert.ToInt32(pidObj); if (!processes.ContainsKey(pid)) { processes.Add(pid, new ProcessTreeNode(pid)); } ProcessTreeNode currentNode = processes[pid]; if (parentPidObj != null) { currentNode.Parent = Convert.ToInt32(parentPidObj); } } } } DateTime num1 = DateTime.Now; foreach (ProcessTreeNode node in processes.Values) { if (node.Parent != 0 && processes.ContainsKey(node.Parent)) { processes[node.Parent].Children.Add(node.Pid); } } timeFilled = DateTime.Now; StaticLogger.Log(string.Format("ProcessTree.FillTree() completed in {0} seconds. 1={1} 2={2}", (timeFilled - start).TotalSeconds, (num1 - start).TotalSeconds, (timeFilled - num1).TotalSeconds)); }
private static void FillTree() { processes.Clear(); var results = new List <Process>(); string queryText = string.Format("select processid, parentprocessid from win32_process"); using (var searcher = new ManagementObjectSearcher(queryText)) { foreach (var obj in searcher.Get()) { object pidObj = obj.Properties["processid"].Value; object parentPidObj = obj.Properties["parentprocessid"].Value; if (pidObj != null) { int pid = Convert.ToInt32(pidObj); if (!processes.ContainsKey(pid)) { processes.Add(pid, new ProcessTreeNode(pid)); } ProcessTreeNode currentNode = processes[pid]; if (parentPidObj != null) { currentNode.Parent = Convert.ToInt32(parentPidObj); } } } } foreach (ProcessTreeNode node in processes.Values) { if (node.Parent != 0 && processes.ContainsKey(node.Parent)) { processes[node.Parent].Children.Add(node.Pid); } } timeFilled = DateTime.Now; }
/// <summary> /// Traverses the specified callback. /// </summary> /// <param name="callback">The callback.</param> public void Traverse(ProcessTreeNode callback) { EnumNodes(_treeView.Nodes, callback); }