Aptem |
Отправлено: 28.06.2004, 15:08 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
Привет, всем!
Думаю вопрос понятен !!! Как убить процесс, зная его имя ??? Например, в WinXP в диспетчере задач есть процесс EXCEL.EXE, так как же его убить ?
Спасибо за внимание. Прошу не посылать меня на... поиск по форуму, просто времени совсем нет искать.
|
|
Father |
Отправлено: 29.06.2004, 07:54 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
Ну вобщем тебе надо раздобыть дескриптор убиваемого процесса, чтобы потом вызвать TerminateProcess(hProcess,0). Это можно сделать несколькими способами, например так, как показано ниже:
(Только перед компиляцией этого надо к проекту подключить "C:\Program Files\Borland\CBuilder6\Lib\Psdk\psapi.lib")
CODE | #include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>
//------------------------------------------------------------------------------
void __fastcall TForm1::TerminateProcessByName(AnsiString aProcess)
{ DWORD aProcesses[1024], cbNeeded, cProcesses;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return;
cProcesses = cbNeeded / sizeof(DWORD);
for (UINT i = 0; i < cProcesses; i++ )
{ TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ |
PROCESS_TERMINATE,
FALSE, aProcesses[i] );
if (hProcess != NULL)
{ HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{ GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
if (aProcess == szProcessName)
if (!TerminateProcess(hProcess,0))
MessageBox(Handle, "Cannot terminate process!", "Error!", MB_OK + MB_ICONERROR);
};
};
CloseHandle( hProcess );
};
};
//------------------------------------------------------------------------------ | |
|
Aptem |
Отправлено: 30.06.2004, 08:47 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
Все работает как надо ! ОГРОМНОЕ спасибо ! КЛАСС !
|
|
Dushman |
Отправлено: 02.07.2004, 09:45 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
объясните plz чайнику, как заставить это работать
|
|
Gedeon |
Отправлено: 02.07.2004, 11:10 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ctrl+C, Ctrl+V
и
Только перед компиляцией этого надо к проекту подключить "C:\Program Files\Borland\CBuilder6\Lib\Psdk\psapi.lib"
Т.е. Project->AddToProject ...
|
|
Dushman |
Отправлено: 02.07.2004, 11:53 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 8
|
и вставить выделенное в FormCreate ??
|
|
Aptem |
Отправлено: 04.07.2004, 07:50 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
Суть в том, что есть процесс, который нужно убить. Эту функцию ты вставляешь туда, где необходимо это действие, либо в FormCreate, либо в Button OnClick зашиваешь, это не важно !! Самое главное — подключить библиотеку, я это делаю немного по-другому, программно:
CODE |
#pragma comment ( lib, "lib\psapi.lib" )
#include <psapi.h>
|
Эти директивы пишешь в заголовочном файле, то есть в *.h, хотя можно в любом месте, но нужно соблюдать правила оформления !!!
Затем передаешь имя процесса в функцию и все, процесс исчезает из Менеджера задач ! Например, я убивал процесс EXCEL.EXE !!!
|
|
Guest |
Отправлено: 05.07.2004, 12:26 |
|
Не зарегистрирован
|
Спасибо |
|