Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как закрыть приложение вызванное из совей программы / 18 сообщений из 18, страница 1 из 1
22.09.2003, 12:04
    #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
22.09.2003, 12:47
    #32271581
Adony
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
Код: plaintext
SendMessage(Handle,WM_CLOSE, 0 , 0 );
...
Рейтинг: 0 / 0
22.09.2003, 12:53
    #32271592
oleg_e
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
Проверь чему равен hwndDistiller.
...
Рейтинг: 0 / 0
22.09.2003, 13:38
    #32271678
WildMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
to Adony:Попробовал, реакция таже.
to Хендл Дисциллера равен 42 (согласно описанию значение не ошибочное >32)
Причем при всех вызовах 42 (то есть поднимаецца приложение и потом вызываеца запущенный экземпляр, как я понял)

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

Хотя мне вот тут сказали что Хинстанс это не хендл окна , блин..
А как это можно связать?
то что возвращает ШеллЭкз и хендл окна которое он запускает?
...
Рейтинг: 0 / 0
22.09.2003, 14:32
    #32271762
Adony
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
FindWindow??
...
Рейтинг: 0 / 0
22.09.2003, 14:34
    #32271767
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
HINSTANCE бесполезен для поиска hwnd IMHO....
да и вообще бесполезен
лучше наверно использовать ShellExecuteEx, которая может возвращать process handle, потом WaitForInputIdle чтобы подождать завершения инициализации приложения, потом искать окно (EnumWindows) пока не найдешь свой process handle (GetWindowThreadProcessId)
...
Рейтинг: 0 / 0
22.09.2003, 15:18
    #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
22.09.2003, 18:04
    #32272093
oleg_e
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
Просто найди окно через FindWindow и пошли ему WM_CLOSE
...
Рейтинг: 0 / 0
22.09.2003, 18:07
    #32272096
WildMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
2 srf2000:
а как ожидать пок априложение отработает?
Что то не могу я найти описание этой функции :(
...
Рейтинг: 0 / 0
23.09.2003, 03:12
    #32272314
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
Handle и pid процессора это разные вещи
стрелять напрямую процесс нельзя, потому как программа ничего не успеваеткорректно завершить и помирает, это неприлично и юзать можно только для зависших прог. Аналогично кстате и с потоками
...
Рейтинг: 0 / 0
23.09.2003, 06:36
    #32272340
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
никто не предлагал стрелять процесс :)
предлагалось:

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

естественно process handle и process ID разные вещи...
но из process ID можно получить process handle (через OpenProcess).
потом сравнить его с полученным из ShellExecuteEx
потом послать окну wm_close
...
Рейтинг: 0 / 0
23.09.2003, 06:44
    #32272344
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
"Я так понимаю мне возвращаеться хенл процесса, не окна (Процесс в данном случае одно и то же что и процессы в таскменеджере?, ЕСли да может не стоит искать окан а убивать сам процесс?)"
...
Рейтинг: 0 / 0
23.09.2003, 06:51
    #32272348
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
WildMan заблуждается.
процесс конечно грохать не стоит :)
...
Рейтинг: 0 / 0
23.09.2003, 13:38
    #32272914
WildMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
Малость разобрался %) Теперь вопрос про функцию WaitForInputIdle
Что и как? Не смог почему то найти ее описания.
Так как приложение (внешнее) отрабатывается от 2 до 8 секунд, если я сразу после того как вычислил хендл окна посылаю сообщенние WM_CLOSE, оно естественно ругаецца что мол в работе.....
дайте синтаксис плз или ссылку, где я могу почитать...
...
Рейтинг: 0 / 0
23.09.2003, 14:14
    #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
23.09.2003, 14:46
    #32273030
WildMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть приложение вызванное из совей программы
Всем спасибо, кто мне помог!
Кому этот вопрос был интересен (из числа таких же балбесов как я %)))
Я в итоге нашел примеры на Делфи:
Запуск приложений из Delphi.
http://delphi.hostmos.ru/statpv.php?section=delphi&stat=10
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как закрыть приложение вызванное из совей программы / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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