Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

Как закрыть процесс?   Найти похожие ветки 

 
Alek ©   (2004-06-24 13:41) [0]

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


 
Alek ©   (2004-06-24 13:44) [1]

или как хотябы получить хандл нужного мне процесса?


 
Тимохов ©   (2004-06-24 13:51) [2]

если не ошибаюсь можно последовательно воспользоваться след. функциями winapi

findwindow - найти окно из нужного процесса (по имени)
getwindowthreadprocessid - получить id процесса хозяина окна
openprocess - получить handle процесса
terminateprocess - закрыть процесс


 
Тимохов ©   (2004-06-24 13:56) [3]

Дополнение.

вроде надо не сделать в конце closehandle.


 
jack128 ©   (2004-06-24 13:59) [4]


> вроде надо не сделать в конце closehandle.

Не-а. Как раз таки хендл процесса нужно закрыть..


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


> jack128 ©   (24.06.04 13:59) [4]

пост 3 читать так


> вроде надо сделать в конце closehandle.

опечатка


 
Тимохов ©   (2004-06-24 14:01) [6]


> jack128 ©   (24.06.04 13:59) [4]

изначально было так

вроде надо не забыть сделать в конце closehandle.

"забыть" - забыл дописать :)))


 
Alek ©   (2004-06-24 14:04) [7]

ээ спасибо за советы, а как ими пользоваться?? :)
есть ли готовый примерчик?


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

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

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


 
Alek ©   (2004-06-24 14:17) [9]

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


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


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

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

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


 
Alek ©   (2004-06-24 14:31) [11]

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

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


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

0 поставьте.


 
Alek ©   (2004-06-24 14:37) [13]

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

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


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

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


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

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

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


 
Alek ©   (2004-06-24 14:47) [16]

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


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

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


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

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 15:02) [19]

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


 
Alek ©   (2004-06-24 15:14) [20]

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

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:27) [21]

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

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


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

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


 
Fay ©   (2004-06-24 15:54) [23]

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


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


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

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

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


 
Fay ©   (2004-06-24 16:10) [25]

угу 8)


 
Alek ©   (2004-06-24 17:23) [26]

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

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


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


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

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



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

Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.031 c
4-1086095708
Long
2004-06-01 17:15
2004.07.11
Как послать WM_SYSCOMMAND,SC_RESTORE окну, которое


4-1086076656
Shc
2004-06-01 11:57
2004.07.11
Как поместить календарь на форму?


3-1086366374
ceval
2004-06-04 20:26
2004.07.11
Подскажите как организовать поиск


4-1085727240
Ded Moroz
2004-05-28 10:54
2004.07.11
Запуск приложения


14-1087841106
able
2004-06-21 22:05
2004.07.11
Проблемы с материнкой.





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