Главная страница
    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.006 c
14-20272
race1
2003-06-18 15:54
2003.07.07
lan


11-20027
Alexander
2002-10-31 13:55
2003.07.07
Вопрос по KOLLabel: у меня она лежит на панели с выравниванием


1-20038
Игорь_П
2003-06-25 13:12
2003.07.07
DBLookUpComboBox


1-20095
Mihey
2003-06-24 00:45
2003.07.07
Общее событие OnClick для нескольких контролов...


4-20355
DVM
2003-05-07 14:28
2003.07.07
Drag&Drop файлов из своей программы во внешние приложения.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский