Files
mirror-processhacker/1.x/trunk/ProcessHacker/Forms/Ui/ChooseProcessDialog.cs
T
dmex 4be3d4a056 PH1.x: Handle Properties to PropSheetPage
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4780 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2011-10-29 11:29:01 +00:00

123 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using ProcessHacker.Native.Objects;
using ProcessHacker.Native.Security;
namespace ProcessHacker.Native.Ui
{
public partial class ChooseProcessDialog : Form
{
private int _selectedPid;
public ChooseProcessDialog()
{
InitializeComponent();
}
private void ChooseProcessDialog_Load(object sender, EventArgs e)
{
this.RefreshProcesses();
}
public int SelectedPid
{
get { return _selectedPid; }
}
private void RefreshProcesses()
{
Dictionary<int, SystemProcess> processes = Windows.GetProcesses();
listProcesses.BeginUpdate();
listProcesses.Items.Clear();
var generic_process = imageList.Images["generic_process"];
imageList.Images.Clear();
imageList.Images.Add("generic_process", generic_process);
foreach (var process in processes.Values)
{
string userName = string.Empty;
string fileName = null;
try
{
using (ProcessHandle phandle = new ProcessHandle(process.Process.ProcessId, OSVersion.MinProcessQueryInfoAccess))
{
using (TokenHandle thandle = phandle.GetToken(TokenAccess.Query))
using (Sid sid = thandle.User)
userName = sid.GetFullName(true);
fileName = phandle.ImageFileName;
}
}
catch
{ }
ListViewItem item = new ListViewItem(new string[]
{
process.Process.ProcessId == 0 ? "System Idle Process" : process.Name,
process.Process.ProcessId.ToString(),
userName
});
if (!string.IsNullOrEmpty(fileName))
{
Icon fileIcon = FileUtils.GetFileIcon(fileName);
if (fileIcon != null)
{
imageList.Images.Add(process.Process.ProcessId.ToString(), fileIcon);
item.ImageKey = process.Process.ProcessId.ToString();
}
}
if (string.IsNullOrEmpty(item.ImageKey))
item.ImageKey = "generic_process";
listProcesses.Items.Add(item);
}
listProcesses.EndUpdate();
}
private void ChooseProcess()
{
if (listProcesses.SelectedItems.Count != 1)
return;
_selectedPid = int.Parse(listProcesses.SelectedItems[0].SubItems[1].Text);
this.DialogResult = DialogResult.OK;
this.Close();
}
private void buttonRefresh_Click(object sender, EventArgs e)
{
this.RefreshProcesses();
}
private void buttonOK_Click(object sender, EventArgs e)
{
this.ChooseProcess();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void listProcesses_DoubleClick(object sender, EventArgs e)
{
this.ChooseProcess();
}
private void listProcesses_SelectedIndexChanged(object sender, EventArgs e)
{
buttonOK.Enabled = listProcesses.SelectedItems.Count == 1;
}
}
}