![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как закрыть процесс?
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
про каждую прочтите, что не понятно - спрашивайте.
будет из вас программист. Может вам и не надо быть программистом? Тогда я ничем не могу помочь