Главная страница
    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.45 MB
Время: 0.007 c
1-20052
Edvard
2003-06-25 15:24
2003.07.07
Как сохранить содержимое ListBox


1-20069
anod
2003-06-25 15:55
2003.07.07
Как определить одновременное нажатие клавиш


1-20155
Yanis
2003-06-23 21:33
2003.07.07
Как запустить файл?


4-20362
Alex_c
2003-05-01 12:56
2003.07.07
Проблема с сервисом (service)


8-20172
Raiden
2003-03-16 09:20
2003.07.07
Проблема со скоростью DelphiХ-игры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский