C/C++: Пишем процесс-менеджер
Николай "G" Андреев
Xakep, номер #056, стр. 056-076-3
После того, как ты завершил работу с дескриптором процесса или любым другим хэндлом, стоит его закрыть с помощью функции CloseHandle.
Практика убийства процесса проста так же, как и теория. В нашей программе массив идентификаторов процессов и список связаны, так что при нажатии на кнопку завершения процесса необходимо будет вычислить номер выделенного в списке элемента и уже с ним работать. В итоге код завершения получился довольно компактный:
// вычисляем индекс выделенного элемента
int index = SendDlgItemMessage(hwnd, IDC_LISTBOX1, LB_GETCOUNT, 0, 0);
// открываем процесс из массива с этим индексом
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, false, idarray[index]);
// убиваем его
TerminateProcess(hProcess, 0);
// закрываем хэндл
CloseHandle(hProcess);
Break
Так уж вышло, что я терпеть не могу стандартные системные утилиты Windows и всегда стараюсь написать свои. Так получилось и с процесс-менеджером. Я описал самую примитивную программу для манипулирования процессами, так что для твоего творчества остается уйма места. Например, ты можешь заменить listbox на listview и добавить к именам процессов их иконки или, например, создать возможность изменения приоритетов процесса с помощью функции SetPriorityClass. Если возникли какие-нибудь вопросы, идеи или замечания - пиши. Постараюсь ответить. Проект для Visual Studio .NET, полный исходный текст программы с подробными комментариями и уже скомпилированный exe'шник ты можешь взять на диске или скачать с сайта www.xakep.ru.
На этом все. Удачного компилирования.
Мне часто пишут письма с просьбой объяснить, как работает та или иная утилита, или чем руководствоваться при написании системных программ. В последнее время при ответе на такие письма я стал ограничиваться всего лишь ссылкой на одну великую книгу: "Programming Applications for Windows" (русское название - "Windows для профессионалов"), автором которой является редактор Microsoft Press Джеффри Рихтер. Эта книга является библией системного программирования под Windows. В ней читатель может найти ответы на все вопросы, возникающие при написании приложений. Безусловно, огромный интерес при прочтении книги вызывает целая глава о перехвате API функций, о технологии, позволяющей как угодно манипулировать системой. Книга содержит в себе огромное количество прекрасно оформленных исходников и будет полезна любому начинающему или продвинутому кодеру.