Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2012, 09:39   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сохраните хендл из ProcInfo.hProcess(ProcInfo.hThread надо закрыть)
и по нему закрывайте.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.08.2012, 20:32   #12
Mr.karpiks
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
сохраните хендл из ProcInfo.hProcess(ProcInfo.hThread надо закрыть)
и по нему закрывайте.
Можешь пример кода привести, пожалуйста я не так селен в delphi!
Mr.karpiks вне форума Ответить с цитированием
Старый 16.08.2012, 19:12   #13
Mr.karpiks
Пользователь
 
Регистрация: 18.03.2012
Сообщений: 11
По умолчанию

Исправите если что не так, попробовал написать сам функцию (собрать из найденного!) закрытия но не знаю что получилось!

Код:
procedure KillExe(Name: PChar; Title: PChar);
const
 PROCESS_TERMINATE = $0001;
var
 ProcessHandle:THandle;
 ProcessID:Integer;
 TheWindow:HWND;
begin
 TheWindow:=FindWindow(Name, Title);
 GetWindowThreadProcessID(TheWindow, @ProcessID);
 ProcessHandle:=OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
 TerminateProcess(ProcessHandle,4);
end;
Исправте если что не так!
Mr.karpiks вне форума Ответить с цитированием
Старый 16.08.2012, 19:58   #14
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Название функции убило.
Явный недостаток: ты сможешь закрыть только по окну. Не будь окна, программу не закроешь.
Предлагаю тебе такой вариант:
Код:
SendMessage(FindWindows(nil,'Название окна'),WM_DESTROY,0,0);
Вроде бы так. Возможно вместо WM_DESTROY надо написать WM_EXIT.
Kix.IV вне форума Ответить с цитированием
Старый 16.08.2012, 22:06   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, вам говорят сохранить хендл hProcess, а вы городите хрень.
обьявляем поле класса формы или глоб переменную типа THandle, допустим chproc:THandle;
после открытия пишем chproc:=ProcInfo.hProcess(hThread закрываем как и прежде)
когда нужно закрыть используем в TerminateProcess этот самый chproc.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.08.2012, 09:55   #16
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

А смысл сохранять хэндл? Он в своей процедуре этого не делает.
Kix.IV вне форума Ответить с цитированием
Старый 17.08.2012, 10:29   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а зачем нам снова искать процесс?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.08.2012, 10:45   #18
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Я не понимаю тебя.
Считаю, что автору больше помощь не нужна и можно закрыть тему.
Kix.IV вне форума Ответить с цитированием
Старый 17.08.2012, 10:46   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

что хочет ТС, по одной кнопке открыть процесс, по второй закрыть.
и зачем нам закрывать хендл если он будет еще нужен во второй кнопке?
вот для этого и сохраняем его.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.08.2012, 10:51   #20
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

И в каком месте он его сохраняет?:
Код:
procedure KillExe(Name: PChar; Title: PChar);
const
 PROCESS_TERMINATE = $0001;
var
 ProcessHandle:THandle;
 ProcessID:Integer;
 TheWindow:HWND;
begin
 TheWindow:=FindWindow(Name, Title);
 GetWindowThreadProcessID(TheWindow, @ProcessID);
 ProcessHandle:=OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
 TerminateProcess(ProcessHandle,4);
end;
Эта процедура просто закрывает процесс по его окну. Я предложил более простой вариант.
Kix.IV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из под другой программы fomikadze Общие вопросы C/C++ 8 13.06.2011 14:47
Остановка программы на определенное количество времени. AIR_3 Помощь студентам 2 02.06.2011 02:52
запуск программы dampirik Общие вопросы .NET 2 02.01.2011 12:38
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33
Управление потоками. Запуск, остановка, приоритет потока. metamfetamin Помощь студентам 5 11.11.2007 12:45