Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как закрыть процесс?


Страницы:   1 2

Alek ©   (2004-06-24 13:41:00) 

При запуски программы мне нужно заврешить один запущеный в виндовс процесс.
Как это можно сделать?


Тимохов   (2004-06-24 17:26:00) [1]


> Alek ©   (24.06.04 17:23) [26]

поздравляю!!!


Alek   (2004-06-24 17:23:00) [2]

Тимохов -  спасибо вышло :)

Всем спасибо за предоставленный урок :)


Fay   (2004-06-24 16:10:00) [3]

угу 8)


Тимохов   (2004-06-24 16:08:00) [4]


> Fay ©   (24.06.04 15:54) [23]

да мне то в общем не за чем.

ЗЫ. Нельзя за один урок научить всему:))) Для начала надо научится обработку результата корректно делать.


Fay   (2004-06-24 15:54:00) [5]

А нахрен вам PROCESS_ALL_ACCESS?!
PROCESS_TERMINATE не хватит?


Тимохов   (2004-06-24 15:30:00) [6]

в мсдн null для числовых параметров значит 0


Тимохов   (2004-06-24 15:27:00) [7]

ладно:
1. в findwindow поменяйте местами параметры.
2. null замените на 0 (два места)

я проверил :)))


Alek   (2004-06-24 15:14:00) [8]

Идентификатор передается во втором параметре

h:=FindWindow('Form1',nil);

if h <> null then begin
GetWindowThreadProcessId(h,@p);
hndl:=OpenProcess(PROCESS_ALL_ACCESS,true,p);
if hndl <> null then begin
 if not TerminateProcess(hndl,0) then ShowMessage('Error');
end;
end;

всеравно не работает :(


Тимохов   (2004-06-24 15:02:00) [9]

початайте внимательно ответ 14 и 17, а также справку к getwindowthreadprocessid (где там вызвращается ид процесса?)


Alek   (2004-06-24 15:00:00) [10]

h:=FindWindow('Form1',nil);

if h <> null then begin
d:=GetWindowThreadProcessId(h,p);
hndl:=OpenProcess(PROCESS_ALL_ACCESS,true,d);
if hndl <> null then begin
 if not TerminateProcess(hndl,0) then ShowMessage('Error');
end;
end;

Написал тепер я вот это, но всеравно не закрывается мое приложение.


Тимохов   (2004-06-24 14:49:00) [11]

Посмотрите [15].
Если бы вы сделали так, то сразу поняли, что как минимум OpenProcess отрабатывает с ошибкой, т.к. скорее всего такой процесс просто не может быть найден, т.к. в качестве иденитфикатора процесса вы передаете идентификатор потока :)))


Alek   (2004-06-24 14:47:00) [12]

насколько я понимаю первый параметр у меня стоит правильно, а вот второй не совсем. Насколько я понял, то во второй параметр записывается идентификатор процеса.
И тип у него поинтер, я дал ему переменныю а - поинтер. Но дальше она нигде не используется ведь.


Тимохов   (2004-06-24 14:41:00) [13]

никогда не используйте функции winapi.
1. каждая должна быть на одной строке.
2. про каждую надо прочесть, какой она результат возвращает в случае ошибки.
3. обязательно проыерять на такой результат.

следование этим трем советам позволило бы вам уже найти как минимум одну ошибке (а может еще больше - не смотрел внимательно)


Тимохов   (2004-06-24 14:39:00) [14]

вы внимательно читали справку к getwindowthreadprocessid?


Alek   (2004-06-24 14:37:00) [15]

TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS,true,getwindowthreadprocessid(FindWindow('Form1',nil),a)),0);</COD E>

Насколько я понимаю после этого кода мое приложение должно закрыться, а не закрывается. Что я все же не так сделал?


Тимохов   (2004-06-24 14:34:00) [16]

0 поставьте.


Alek   (2004-06-24 14:31:00) [17]

Почитав справку у меня получилось вот это вот:

getwindowthreadprocessid(FindWindow('Form1',nil),a);
TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS,true,a), а вот тут непонятно что за параметр );


Тимохов   (2004-06-24 14:20:00) [18]


> Alek ©   (24.06.04 14:17) [9]

не смотрите справку дельфи.

я сказал, что это функции win api, т.е. лучше всего они описаны в документации msdn (microsoft software development network), которая в полном (наверное) объеме представлена на msdn.microsoft.com


Alek   (2004-06-24 14:17:00) [19]

А вдруг бы прошо :)
Просто я посмотрел справку в делфи и не очень то понял как с ними работать


Тимохов   (2004-06-24 14:08:00) [20]

опять духом халявы потянуло...

откройте msdn.microsoft.com
про каждую прочтите, что не понятно - спрашивайте.
будет из вас программист. Может вам и не надо быть программистом? Тогда я ничем не могу помочь


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо