powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как закрыть приложение вызванное из совей программы
18 сообщений из 18, страница 1 из 1
Как закрыть приложение вызванное из совей программы
    #32271511
WildMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть:Из программы через shellexecute вызываецца внешняя программа (AdobeDistiller) вызываецца так: передаецца хендл приложения моего, операция -nil, файлнейм- файл *.Ps ,который собственно вызывает внешнее приложение по ассоциаиции с расширением, Параметры-nil, режим окна-скрытый.
После определения ( не суть важно как), что работа завершена (а она завершаецца и прилоение остаецца, а самое интерсеное так как я в цикле вызываю неск фалйов ps, то уже на втором файле режим SW_HIDE, не срабатывает приложение стнаовица видимым).
и для закрытия я пробовал
PostMessage(hwndDistiller, WM_CLOSE, 0,0);
DestroyWindow(hwndDistiller);
не помогает.
Что я упускаю или не понимаю? :(

PS/ Почему не вызываю приложение через имая файла: EXE-приложения? параметры : файл *.PS ? при это она множит экземпляри прикладной ппрограммы и та через некторое время начинает ругацца, а если у меян 5, 10 файлов...
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271581
Adony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SendMessage(Handle,WM_CLOSE, 0 , 0 );
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271592
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь чему равен hwndDistiller.
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271678
WildMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Adony:Попробовал, реакция таже.
to Хендл Дисциллера равен 42 (согласно описанию значение не ошибочное >32)
Причем при всех вызовах 42 (то есть поднимаецца приложение и потом вызываеца запущенный экземпляр, как я понял)

------
Может можно как то отследить что поисходит (например, какойнить отлуп, типа нет прав) при вызове СендМессадж?
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271685
Adony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как хэндл ищем?
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271694
WildMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читаем :
function ShellExecute...:HINST
возвращаемые значения:
Ф-ция возвращает Хендл открытого приложения или сервера DDE...

Хотя мне вот тут сказали что Хинстанс это не хендл окна , блин..
А как это можно связать?
то что возвращает ШеллЭкз и хендл окна которое он запускает?
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271762
Adony
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FindWindow??
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271767
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HINSTANCE бесполезен для поиска hwnd IMHO....
да и вообще бесполезен
лучше наверно использовать ShellExecuteEx, которая может возвращать process handle, потом WaitForInputIdle чтобы подождать завершения инициализации приложения, потом искать окно (EnumWindows) пока не найдешь свой process handle (GetWindowThreadProcessId)
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32271846
WildMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HINSTANCE бесполезен для поиска hwnd IMHO....
да и вообще бесполезен

Что я нашел у микрософт:)

Код: plaintext
1.
2.
It is not a true HINSTANCE, however. 
The only thing that can be done with the returned HINSTANCE 
is to cast it to an int and compare it with the value  32  or one of the error codes below

А ШелЭкзеЕкс не имеет ограничений по версиям? Я не понмю ,может конечно , это была другая функция но я отказаляс от использованяи функции с суффиксоом Экс (Я так понимаю Экстендед), из-за того что она не поддерживлась 2000

-------------------
А можно чуть подробнее, а то я не силен в WinAPI
1. лучше наверно использовать ShellExecuteEx, которая может возвращать process handle ,
Я так понимаю мне возвращаеться хенл процесса, не окна (Процесс в данном случае одно и то же что и процессы в таскменеджере?, ЕСли да может не стоит искать окан а убивать сам процесс?)
2 потом искать окно (EnumWindows) пока не найдешь свой process handle (GetWindowThreadProcessId)
Энумерейт перебирает окна , так? а где я подставлю для сравнения свой процесс хендл и вытаскиваю виндов хендл?
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272093
oleg_e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто найди окно через FindWindow и пошли ему WM_CLOSE
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272096
WildMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 srf2000:
а как ожидать пок априложение отработает?
Что то не могу я найти описание этой функции :(
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272314
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Handle и pid процессора это разные вещи
стрелять напрямую процесс нельзя, потому как программа ничего не успеваеткорректно завершить и помирает, это неприлично и юзать можно только для зависших прог. Аналогично кстате и с потоками
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272340
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никто не предлагал стрелять процесс :)
предлагалось:

лучше наверно использовать ShellExecuteEx, которая может возвращать process handle, потом WaitForInputIdle чтобы подождать завершения инициализации приложения, потом искать окно (EnumWindows) пока не найдешь свой process handle (GetWindowThreadProcessId)

естественно process handle и process ID разные вещи...
но из process ID можно получить process handle (через OpenProcess).
потом сравнить его с полученным из ShellExecuteEx
потом послать окну wm_close
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272344
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Я так понимаю мне возвращаеться хенл процесса, не окна (Процесс в данном случае одно и то же что и процессы в таскменеджере?, ЕСли да может не стоит искать окан а убивать сам процесс?)"
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272348
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildMan заблуждается.
процесс конечно грохать не стоит :)
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272914
WildMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Малость разобрался %) Теперь вопрос про функцию WaitForInputIdle
Что и как? Не смог почему то найти ее описания.
Так как приложение (внешнее) отрабатывается от 2 до 8 секунд, если я сразу после того как вычислил хендл окна посылаю сообщенние WM_CLOSE, оно естественно ругаецца что мол в работе.....
дайте синтаксис плз или ссылку, где я могу почитать...
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32272989
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно так (на С):

SHELLEXECUTEINFO ExecInfo;
ExecInfo.cbSize=sizeof(ExecInfo);
ExecInfo.fMask=SEE_MASK_NOCLOSEPROCESS;
...
if(!ShellExecuteEx(&ExecInfo))
ShowMessage("Error!");
else
{
WaitForInputIdle(ExecInfo.hProcess, INFINITE);
CloseHandle(ExecInfo.hProcess);
ShowMessage("Program Finished loading");
}
...
Рейтинг: 0 / 0
Как закрыть приложение вызванное из совей программы
    #32273030
WildMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, кто мне помог!
Кому этот вопрос был интересен (из числа таких же балбесов как я %)))
Я в итоге нашел примеры на Делфи:
Запуск приложений из Delphi.
http://delphi.hostmos.ru/statpv.php?section=delphi&stat=10
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как закрыть приложение вызванное из совей программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]