Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.07;
Скачать: CL | DM;

Вниз

Програмное завершение процессов в WinXP   Найти похожие ветки 

 
Max Kronos   (2003-04-17 18:10) [0]

Доброго всем времени суток.

Я уже даено мучаюсь над проблемой програмного завершения процессов и никак не могу найти решения. Проблема вот в чем:
Я думаю многие видели в Инет и Game клубах програмки, кот-ые по истечению времени пользователя закрывают его(пользователя) приложения (игру). Так вот, пытался зеализовать это через:
1. PostMessage - работает только на окошках, банальный StarCraft закрыть не может.
2. TerminateProcess - закрывает большинство приграмм(игр), но часто после закрытия перестает вообще что-либо грузится(умные люди говорят что TerminateProcess засоряет память). А к примеру WarCraft III закрыть не может, т.к. после вызова TerminateProcess"а игра спрашивает пользователя действительно ли он хочет выйти. Отвитив НЕТ пользователь играет дальше.


Так вот, вопросы:
1. Как под WinXP получить список процессов.
2. Как из своей программы(работающей в фоновом режиме) завершить любой из них.
3. Как запретить показ панели со списком задач, процессов и т.п после нажатия Ctrl+Alt+Del.

Заранее спасибо.


 
Scorp   (2003-04-17 18:29) [1]

Почитай в SDK j Tool Help Library. Там найдешь функцию, которая делает SnapShot всех процессов в системе с их ID и прочей инфой.
Самый простой способ закрыть процесс - TerminateProcess, и не слушай всякие глупости о том, что он засоряет пам"ять. Как писал дядька Рихтер, после TerminateProcess " завершенный процесс не оставляет после себя никаких следов" (стр.79, выделено курсивом!).


 
Max Kronos   (2003-04-17 18:40) [2]

Так вот как раз в том то и дело, что TerminateProcess следы оставляет и еще какие(и это факт). А даже если бы не оставлял, то что делать с WarCraft"ом и т.п.


 
Hammer   (2003-04-24 12:45) [3]

Как прибить процесс.
Код не мой.. Не помню где стянул, но работает везде, даже в ХР.

в uses добавить "tlhelp32"

дальше:

Function KillTask(FileName:String): integer; //0 - неудачно
var ContinueLoop:BOOL;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
const
PROCESS_TERMINATE=$0001;
begin
Result := 0;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(FileName)) or
(UpperCase(FProcessEntry32.szExeFile)=UpperCase(FileName))) then
Result:=Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID),0));
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

вызов:

...
killTask("calc.exe");
...



 
DVM ©   (2003-04-24 12:53) [4]

Warcraft III замечательно убивается с помощью TerminateProcess.
Следы в памяти - предрассудки.
То, что написали выше убъет Warcraft без разговоров, но в этом коде есть небольшие недочёты.



Страницы: 1 вся ветка

Текущий архив: 2003.07.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
14-20300
Фагот
2003-06-20 16:28
2003.07.07
Ищу литературу по логике программирования


7-20320
orion_st
2003-04-24 18:27
2003.07.07
OLE Automation


3-19988
nv-vetal
2003-06-13 14:28
2003.07.07
dbExpress->MySQL.Как подключиться, и что для этого...


1-20053
Mishenka
2003-06-24 01:15
2003.07.07
Сползают кнопки на форме :(((


1-20054
INTAARI
2003-06-25 11:25
2003.07.07
Освобождение памяти при завершении работы с Tlist