Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как остановить внешнее приложение / 11 сообщений из 11, страница 1 из 1
30.09.2005, 08:25
    #33297409
leokolus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
Всем привет,

Плиз помогите на примере как на кнопку повесить задание, проверка - запущена ли программа (например Word или Excel) или нет и если да то остановить её.
...
Рейтинг: 0 / 0
30.09.2005, 09:02
    #33297460
boogiman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
В самом начале программы перед реальной работой с Excel - файлом пробовать закрывать Excel принудительно! Если Excel не открыт то никакой ошибки вылетать не будет, если открыт, то должен закрыться, не пробовал, но может поможет!

Try
Excel_doc.Workbooks.Close
Excel_doc.Application.Quit
DESTROY Excel_doc
DESTROY Excel_page
Catch(RuntimeError er_1)
end try
...
Рейтинг: 0 / 0
30.09.2005, 09:08
    #33297474
AIZ
AIZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
FUNCTION ulong FindWindowA(ulong classname,string windowname) LIBRARY "User32.dll"
FUNCTION boolean CloseHandle(ulong w_handle) LIBRARY "Kernel32.dll"

Boolean    lb_ret
Ulong       lul_handle
lul_handle = FindWindowA( 0 , "Содержимое заголовка окна искомого приложения")
IF lul_handle >  0  THEN
   lb_ret = CloseHandle(lul_handle)
// Если надо, проверить lb_ret
END IF
...
Рейтинг: 0 / 0
30.09.2005, 11:52
    #33298021
leokolus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
AIZ приложение находится но не закрывается, так и остаётся работать, в чём дело, никак немогу понять вот код на кнопке

Ulong lul_handle
String ls_appl

ls_appl = 'Amos - Sovereign/Maint & Purchase'

lul_handle = FindWindowA(0, ls_appl)

IF lul_handle > 0 THEN
MessageBox('Run Info','Application ' + ls_appl + ' is running')
CloseHandle(lul_handle)

END IF

Может можно использовать Close File

CloseHandle(hFile) только вот как составить функцию для файла например "amosw.exe", вот нашёл такой вариант

function boolean CloseHandle(long hObject ) library "kernel32.dll"

но ведь имя файла - стринговое как его в long превратить не пойму.
...
Рейтинг: 0 / 0
30.09.2005, 12:47
    #33298191
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
а кто Вам сказал что CloseHandle что-то закрывает?
функция используется для того чтобы "отпустить" объект полученный при помощи CreateFile или OpenProcess или еще какой функцией возвращающей handle.
с тем объектом на который handle указывает эта функция НИЧЕГО не делает.

Надо сообщение WM_QUIT посылать.
Код: plaintext
1.
2.
// hex value of wm_quit is 0x0012. Converted dec value  is  18 .
UInt lui_quit =   18 
PostMessageA( ll_handle, lui_quit,  0 ,  0  );

но понятно что это сообщение и Excel на него может отреагировать, а может и не ;-)
Убивать процессы при помощи TerminateProcess считаю варварством.

2 leokolus
CloseHandle вызывать все же надо. посмотри код приведенный AIZ - то что возвращает FindWindow передается в CloseHandle.
Окно ищется по заголовку. Так что имя файла тут никак не используется, а "заголовок превращается в long" как раз функцией FindWindow.
Просто вставь вышеприведенный кусок перед вызовом CloseHandle.
...
Рейтинг: 0 / 0
30.09.2005, 19:04
    #33299395
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
поиск окна надо делать в цикле,
так как юзер может запустить более одного экземпляра.
ну и конечно отсылать евент WM_QUIT для каждого найденного экземпляра
и не нужен никакой CloseHandle, программа сама себя закроет.
если не выдаст какойто MessageBox
...
Рейтинг: 0 / 0
30.09.2005, 19:37
    #33299433
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
Действительно не надо.
Список объектов для которых CloseHandle нужен:
Access token

Communications device

Console input

Console screen buffer

Event

File

File mapping

Job

Mailslot

Mutex

Named pipe

Process

Semaphore

Socket

Thread
...
Рейтинг: 0 / 0
30.09.2005, 19:41
    #33299439
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
zuzuтак как юзер может запустить более одного экземпляра.
ага. составляю я что-нть эдакое в Excel, параллельно запускаю такую вот программулину и она убивает результаты моих трудов в Excel не давая шанса бедняге спросить хочу ли я сохранить изменения!
Было такое. Если б знал кто писал - поймал бы и попинал от души!!! :-E
...
Рейтинг: 0 / 0
30.09.2005, 19:45
    #33299443
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
ЗоринАндрейБыло такое. Если б знал кто писал - поймал бы и попинал от души!!! :-E
Вот именно поэтому, лучше всего сделать так:
Сначала показываем окошко: "Для дальнейшей работы нашей супер-программы нужно закрыть все экземпляры MS Word и MS Excel"
Юзер нажимает Ok, программа делает FindWindow и если находит хоть одно подходящее окно ругается: "Вас просили закрыть MS Word, а вы не закрыли! Работать не буду пока не закроете" и опять одна единственная кнопка OK. И зациклить :)
...
Рейтинг: 0 / 0
03.10.2005, 08:52
    #33300532
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
White OwlВот именно поэтому, лучше всего сделать так:
Сначала показываем окошко: "Для дальнейшей работы нашей супер-программы нужно закрыть все экземпляры MS Word и MS Excel"
Юзер нажимает Ok, программа делает FindWindow и если находит хоть одно подходящее окно ругается: "Вас просили закрыть MS Word, а вы не закрыли! Работать не буду пока не закроете" и опять одна единственная кнопка OK. И зациклить :)
Ага, только вот если Word или Excel по какой то причине подвис, в процессах висит, а визуала нету, то получим бесконечный цикл, т.к. юзер вряди полезет в TaskManager чтобы искать и убивать там процесс не угодный _нашему_ приложению. Так что, ИМХО, нужно делать не только кнопочку "Ок", сиротливую и одинокую, но и кнопочку "Закрыть автоматически"...

---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
04.10.2005, 12:56
    #33303476
leokolus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить внешнее приложение
Всем спасибо за советы, только как я не пытался - ничего не получается, дело в том что моё приложение должно работать как составляющая основной программы при этом открыто несколько child окон и если делать то что вы предлагаете из вне то всё работает на ура, но если запуск идёт из основной программы то основная программа не закрывается пока не закроешь мою программу, я нашёл выход таким образом - пожготовка закрытия проги осуществляется в основной программе - отсоединение от базы данных и создание батника в котором используется команда TaskKill
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как остановить внешнее приложение / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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