Udało mi się znaleźć w Internecie ciekawy artykuł na temat zamykania procesów w systemie Windows:
http://www.cyfbar.republika.pl/api3.html#api6
Ogólnie napisałem na podstawie powyższego artykułu funkcję, która ma na celu zamknięcie wybranego procesu ze StringGrida (ListaProcesów):
int wiersz=ListaProcesow->Row;
int id=StrToInt(ListaProcesow->Cells[1][wiersz]);
DWORD dwExitCode;
HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS,true,id);
GetExitCodeProcess(hHandle,&dwExitCode);
int zwrot=TerminateProcess(hHandle,dwExitCode);
if(zwrot==0)
ShowMessage("Nie można zakończyć wybranego procesu.");
else
ProcesyClick(0); // tu odswieza liste procesow
ListaProcesow->Cells[1][wiersz] przechowuje numer ID danego procesu (za wyliczanie procesów odpowiada inna funkcja, która zapisuje dane do "ListaProcesow"). Jak jednak wiadomo, nie każdy proces da się tą metodą zakończyć (a w przypadku Visty prawie żadnego nie da się zakończyć nawet gdy uruchamia się swój program z prawami administratora).
Moje pytanie brzmi: czy jest jakiś skuteczny sposób na zamknięcie DOWOLNEGO procesu systemu Windows 2000 i nowszych ? Prawdopodobnie w WinApi nie znajdę gotowego rozwiązania, ale może ktoś jest w stanie mnie nakierować w jakim kierunku dalej podążać ? Na necie są programy potrafiące zamykać dowolne procesy, więc na pewno jakoś się da to zrobić.
Programuję w Borland C++ Builder 4.