From ee04bfbe3d8ceb3cd0c314def6d18c07072c5685 Mon Sep 17 00:00:00 2001 From: wj32 Date: Thu, 8 Jan 2009 05:07:19 +0000 Subject: [PATCH] new "Description" column for processes git-svn-id: svn://svn.code.sf.net/p/processhacker/code@470 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- trunk/CHANGELOG.txt | 1 + .../Components/ProcessTree/ProcessNode.cs | 5 +++ .../ProcessTree/ProcessTree.Designer.cs | 23 ++++++++++++ .../ProcessTree/ProcessTreeModel.cs | 2 + .../Providers/ProcessSystemProvider.cs | 37 ++++++++++++++++--- 5 files changed, 63 insertions(+), 5 deletions(-) diff --git a/trunk/CHANGELOG.txt b/trunk/CHANGELOG.txt index 9271006ee..b584e4d79 100644 --- a/trunk/CHANGELOG.txt +++ b/trunk/CHANGELOG.txt @@ -3,6 +3,7 @@ Process Hacker 1.3.0.5 * NEW: * "Free" and "Decommit" actions for memory regions + * "Description" column for processes * FIXED: * System information window resizing * "Overflow error" exceptions diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs index 51885c404..3bf2443d9 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessNode.cs @@ -131,6 +131,11 @@ namespace ProcessHacker get { return this.GetBestUsername(_pitem.Username, Properties.Settings.Default.ShowAccountDomains); } } + public string Description + { + get { return _pitem.FileDescription; } + } + public Bitmap Icon { get { return _icon; } diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs index 62cce610f..78aa6922e 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTree.Designer.cs @@ -40,6 +40,8 @@ this.nodeMemory = new Aga.Controls.Tree.NodeControls.NodeTextBox(); this.nodeCPU = new Aga.Controls.Tree.NodeControls.NodeTextBox(); this.nodeUsername = new Aga.Controls.Tree.NodeControls.NodeTextBox(); + this.columnDescription = new Aga.Controls.Tree.TreeColumn(); + this.nodeDescription = new Aga.Controls.Tree.NodeControls.NodeTextBox(); this.SuspendLayout(); // // treeProcesses @@ -51,6 +53,7 @@ this.treeProcesses.Columns.Add(this.columnMemory); this.treeProcesses.Columns.Add(this.columnCPU); this.treeProcesses.Columns.Add(this.columnUsername); + this.treeProcesses.Columns.Add(this.columnDescription); this.treeProcesses.DefaultToolTipProvider = null; this.treeProcesses.DisplayDraggingNodes = true; this.treeProcesses.Dock = System.Windows.Forms.DockStyle.Fill; @@ -67,6 +70,7 @@ this.treeProcesses.NodeControls.Add(this.nodeMemory); this.treeProcesses.NodeControls.Add(this.nodeCPU); this.treeProcesses.NodeControls.Add(this.nodeUsername); + this.treeProcesses.NodeControls.Add(this.nodeDescription); this.treeProcesses.SelectedNode = null; this.treeProcesses.SelectionMode = Aga.Controls.Tree.TreeSelectionMode.Multi; this.treeProcesses.ShowNodeToolTips = true; @@ -172,6 +176,23 @@ this.nodeUsername.ParentColumn = this.columnUsername; this.nodeUsername.Trimming = System.Drawing.StringTrimming.EllipsisCharacter; // + // columnDescription + // + this.columnDescription.Header = "Description"; + this.columnDescription.Sortable = true; + this.columnDescription.SortOrder = System.Windows.Forms.SortOrder.None; + this.columnDescription.TooltipText = null; + this.columnDescription.Width = 140; + // + // nodeDescription + // + this.nodeDescription.DataPropertyName = "Description"; + this.nodeDescription.EditEnabled = false; + this.nodeDescription.IncrementalSearchEnabled = true; + this.nodeDescription.LeftMargin = 3; + this.nodeDescription.ParentColumn = this.columnDescription; + this.nodeDescription.Trimming = System.Drawing.StringTrimming.EllipsisCharacter; + // // ProcessTree // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -198,5 +219,7 @@ private Aga.Controls.Tree.NodeControls.NodeTextBox nodeUsername; private Aga.Controls.Tree.NodeControls.NodeIcon nodeIcon; private Aga.Controls.Tree.TreeColumn columnCPU; + private Aga.Controls.Tree.TreeColumn columnDescription; + private Aga.Controls.Tree.NodeControls.NodeTextBox nodeDescription; } } diff --git a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs index ced9b6fc6..7b700770e 100644 --- a/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs +++ b/trunk/ProcessHacker/Components/ProcessTree/ProcessTreeModel.cs @@ -216,6 +216,8 @@ namespace ProcessHacker return ModifySort(n1.ProcessItem.CPUUsage.CompareTo(n2.ProcessItem.CPUUsage), sortO); else if (sortC == "username") return ModifySort(n1.Username.CompareTo(n2.Username), sortO); + else if (sortC == "description") + return ModifySort(n1.Description.CompareTo(n2.Description), sortO); else return 0; })); diff --git a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs index d57b31cfa..16a0ecc19 100644 --- a/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs +++ b/trunk/ProcessHacker/Providers/ProcessSystemProvider.cs @@ -39,6 +39,8 @@ namespace ProcessHacker public Win32.SYSTEM_PROCESS_INFORMATION Process; public Dictionary Threads; + public string FileDescription; + public Win32.TOKEN_ELEVATION_TYPE ElevationType; public bool IsBeingDebugged; public bool IsElevated; @@ -235,11 +237,6 @@ namespace ProcessHacker item.SessionId = processInfo.SessionId; item.Threads = procs[pid].Threads; - if (pid == 0) - item.Name = "System Idle Process"; - else - item.Name = procs[pid].Name; - try { item.Icon = (Icon)Win32.GetProcessIcon(p).Clone(); @@ -247,6 +244,36 @@ namespace ProcessHacker catch { } + item.Name = procs[pid].Name; + + if (pid == 0) + { + item.Name = "System Idle Process"; + item.FileDescription = "System Idle Process"; + } + else if (pid == 4) + { + item.FileDescription = "Windows Kernel"; + } + else if (pid == -2) + { + item.FileDescription = "Deferred Procedure Calls"; + } + else if (pid == -3) + { + item.FileDescription = "Hardware Interrupts"; + } + else + { + try + { + item.FileDescription = + FileVersionInfo.GetVersionInfo(Misc.GetRealPath(p.MainModule.FileName)).FileDescription; + } + catch + { } + } + try { item.ProcessQueryHandle = new Win32.ProcessHandle(pid, Win32.PROCESS_RIGHTS.PROCESS_QUERY_INFORMATION);