background img

The New Stuff

Пишем простейший диспетчер задач

Сегодня мы будем делать простейший диспетчер задач ОС Windows. Он будет очень примитивный и уметь делать только две команды: получить список всех процессов в ОС и снять процесс)
Приступим:
1. Запускаем нашу любимою Visual Studio
2. Создаем проект WinForms
3. Добавляем на форму из панели элементов две кнопки типа Button и один ListBox
4. первую кнопку назовем "Получить список процессов", а вторую "Снять выделенный процесс"
5. Обработаем событие Click для кнопки "Получить список процессов" и напишем следующий код:
listBox1.Items.Clear();
var processList = Process.GetProcesses();
foreach (var proc in processList)
listBox1.Items.Add(String.Format("{0}.exe", proc.ProcessName));
6. Добавляем пространство имен System.Diagnostics без него у нас ничего не получится )
7. Далее обработаем событие Click для кнопки "Снять выделенный процесс" и напишем следующее
if (listBox1.SelectedIndex != -1)
{
var taskName = listBox1.Items[listBox1.SelectedIndex].ToString();
taskName = taskName.Substring(0, taskName.Length - 4);
foreach (var procToKill in Process.GetProcessesByName(taskName))
procToKill.Kill();
button1.PerformClick();
}
8. А теперь еще сделаем чтоб при нажатие в listBox_e на имени процесса он снимался, для этого обрабатываем события DoubleClick в listBox и вызовем наш код из пункта 7,
button2.PerformClick();
Все, компилируем и смотрим на результат)
Вот что получилось у меня

Весь выше представлен код очень прост и я надеюсь Вам не состоит никакого труда в нем разобраться, ну а если возникнут какие то вопросы то пишите в комментариях или мне на почту, отвечу с удовольствием =)
Удачи в ПРОграммирование.
Скачать проект.

UPD
Ответ на вопрос анонимного читателя ;)
Все просто, используйте wmi, о нем я когда- то уже писал.
Добавьте следующий метод в программу:
public void BrowsApp(string nameApp)
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (identity != null)
{
string currentUser = identity.Name.Split('\\')[1];

string query = "Select * from Win32_Process Where Name = \"" + nameApp + "\"";
var searcher = new ManagementObjectSearcher(query);
var processes = searcher.Get();

foreach (ManagementObject proc in processes)
{
string owner;
var argList = new[] { string.Empty };
int returnVal = Convert.ToInt32(proc.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
owner = argList[0];
else
continue;

if (owner != currentUser)
continue;

MessageBox.Show(proc["ExecutablePath"].ToString());
}
}
}
И заменить код в обработчике событий listBox1_DoubleClick вместо button2.PerformClick(); напишите BrowsApp(listBox1.Items[listBox1.SelectedIndex].ToString());
Пример работы программы:

Сегодня мы будем делать простейший диспетчер задач ОС Windows. Он будет очень примитивный и уметь делать только две команды: получить список всех процессов в ОС и снять процесс)
Приступим:
1. Запускаем нашу любимою Visual Studio
2. Создаем проект WinForms
3. Добавляем на форму из панели элементов две кнопки типа Button и один ListBox
4. первую кнопку назовем "Получить список процессов", а вторую "Снять выделенный процесс"
5. Обработаем событие Click для кнопки "Получить список процессов" и напишем следующий код:
listBox1.Items.Clear();
var processList = Process.GetProcesses();
foreach (var proc in processList)
listBox1.Items.Add(String.Format("{0}.exe", proc.ProcessName));
6. Добавляем пространство имен System.Diagnostics без него у нас ничего не получится )
7. Далее обработаем событие Click для кнопки "Снять выделенный процесс" и напишем следующее
if (listBox1.SelectedIndex != -1)
{
var taskName = listBox1.Items[listBox1.SelectedIndex].ToString();
taskName = taskName.Substring(0, taskName.Length - 4);
foreach (var procToKill in Process.GetProcessesByName(taskName))
procToKill.Kill();
button1.PerformClick();
}
8. А теперь еще сделаем чтоб при нажатие в listBox_e на имени процесса он снимался, для этого обрабатываем события DoubleClick в listBox и вызовем наш код из пункта 7,
button2.PerformClick();
Все, компилируем и смотрим на результат)
Вот что получилось у меня

Весь выше представлен код очень прост и я надеюсь Вам не состоит никакого труда в нем разобраться, ну а если возникнут какие то вопросы то пишите в комментариях или мне на почту, отвечу с удовольствием =)
Удачи в ПРОграммирование.
Скачать проект.

UPD
Ответ на вопрос анонимного читателя ;)
Все просто, используйте wmi, о нем я когда- то уже писал.
Добавьте следующий метод в программу:
public void BrowsApp(string nameApp)
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (identity != null)
{
string currentUser = identity.Name.Split('\\')[1];

string query = "Select * from Win32_Process Where Name = \"" + nameApp + "\"";
var searcher = new ManagementObjectSearcher(query);
var processes = searcher.Get();

foreach (ManagementObject proc in processes)
{
string owner;
var argList = new[] { string.Empty };
int returnVal = Convert.ToInt32(proc.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
owner = argList[0];
else
continue;

if (owner != currentUser)
continue;

MessageBox.Show(proc["ExecutablePath"].ToString());
}
}
}
И заменить код в обработчике событий listBox1_DoubleClick вместо button2.PerformClick(); напишите BrowsApp(listBox1.Items[listBox1.SelectedIndex].ToString());
Пример работы программы:


0 коммент.:

Отправить комментарий

Popular Posts