|
Шаг 33 - Win98 как NT. Убиваем процесс.
Итак, мы с Вами получили список процессов. Теперь на диалоговую панель добавим новую кнопку Terminate Process. Если в списке выделен процесс, то по нажатию на эту кнопку процесс будет удален. Вот код.
void CScanProcessDlg::OnTernimate()
{
int inIndex;
inIndex=m_List1.GetCurSel();
if (inIndex!=LB_ERR)
{
CString csExName;
m_List1.GetText(inIndex,csExName);
HANDLE hSnap;
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap == NULL)
{
AfxMessageBox("Error Load ToolHelp");
}
else
{
PROCESSENTRY32 proc;
if (Process32First(hSnap, &proc))
{
if (csExName==proc.szExeFile) TerminateProcess(hSnap,0);
while (Process32Next(hSnap, &proc))
{
if (csExName==proc.szExeFile)
{
HANDLE ProcessHandle=NULL;
ProcessHandle = OpenProcess(SYNCHRONIZE, TRUE, proc.th32ProcessID);
if (ProcessHandle!=NULL)
{
TerminateProcess(ProcessHandle,0);
CloseHandle(ProcessHandle);
Sleep(5000);
OnScan();
}
else AfxMessageBox("Not Open Process");
}
}
CloseHandle(hSnap);
}
}
}
else AfxMessageBox("Select Process");
}
Сначала проверяем выбран ли элемент списка if (inIndex!=LB_ERR). Если выбран пробегаем по процессам. Код повторяется как при сканировании процесса. Конечно можно было создать массив при сканировании. Но процесс дело тонкое, то он есть, а то его нет. Лучше на мой взгляд просканировать еще раз. Если его находим, то открываем с помощью функции OpenProcess(). Дальше спокойно вызываем TerminateProcess.
HANDLE OpenProcess
(
DWORD dwDesiredAccess, // флаг доступа
BOOL bInheritHandle, // флаг наследования
DWORD dwProcessId // идентификатор процесса
);
Идентификатор процесса мы берем из структуры PROCESSENTRY32 - это переменная, которая заполняется при запуске.
BOOL TerminateProcess(
HANDLE hProcess, // Указатель процесса
UINT uExitCode // Код возврата процесса
);
Задержку я сделал для того, чтобы обновить список через некоторое время, так как удаление процесса не моментальное дело. Программу я испытывал на Windows 98. Удаляет все процессы кроме Kernel :) Оно и понятно, сам себя удалять не будешь. При этом помните шаг "Шаг 31 - Программа, которая не удаляется из списка задач". Отсюда удалить ее можно и это получается. Кроме того удалить можно и процесс оболочки. Все работает как в NT. Отсюда рождается много интересных вещей. Например, можно выяснить почему тормозит Windows. Многие процессы просто не нужны для работы. Попробуйте поудаляйте.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|