|
|
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
Всем привет, Плиз помогите на примере как на кнопку повесить задание, проверка - запущена ли программа (например Word или Excel) или нет и если да то остановить её. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 08:25 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
В самом начале программы перед реальной работой с Excel - файлом пробовать закрывать Excel принудительно! Если Excel не открыт то никакой ошибки вылетать не будет, если открыт, то должен закрыться, не пробовал, но может поможет! Try Excel_doc.Workbooks.Close Excel_doc.Application.Quit DESTROY Excel_doc DESTROY Excel_page Catch(RuntimeError er_1) end try ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 09:02 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 09:08 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
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 превратить не пойму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 11:52 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
а кто Вам сказал что CloseHandle что-то закрывает? функция используется для того чтобы "отпустить" объект полученный при помощи CreateFile или OpenProcess или еще какой функцией возвращающей handle. с тем объектом на который handle указывает эта функция НИЧЕГО не делает. Надо сообщение WM_QUIT посылать. Код: plaintext 1. 2. но понятно что это сообщение и Excel на него может отреагировать, а может и не ;-) Убивать процессы при помощи TerminateProcess считаю варварством. 2 leokolus CloseHandle вызывать все же надо. посмотри код приведенный AIZ - то что возвращает FindWindow передается в CloseHandle. Окно ищется по заголовку. Так что имя файла тут никак не используется, а "заголовок превращается в long" как раз функцией FindWindow. Просто вставь вышеприведенный кусок перед вызовом CloseHandle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 12:47 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
поиск окна надо делать в цикле, так как юзер может запустить более одного экземпляра. ну и конечно отсылать евент WM_QUIT для каждого найденного экземпляра и не нужен никакой CloseHandle, программа сама себя закроет. если не выдаст какойто MessageBox ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 19:04 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
Действительно не надо. Список объектов для которых CloseHandle нужен: Access token Communications device Console input Console screen buffer Event File File mapping Job Mailslot Mutex Named pipe Process Semaphore Socket Thread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 19:37 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
zuzuтак как юзер может запустить более одного экземпляра. ага. составляю я что-нть эдакое в Excel, параллельно запускаю такую вот программулину и она убивает результаты моих трудов в Excel не давая шанса бедняге спросить хочу ли я сохранить изменения! Было такое. Если б знал кто писал - поймал бы и попинал от души!!! :-E ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 19:41 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейБыло такое. Если б знал кто писал - поймал бы и попинал от души!!! :-E Вот именно поэтому, лучше всего сделать так: Сначала показываем окошко: "Для дальнейшей работы нашей супер-программы нужно закрыть все экземпляры MS Word и MS Excel" Юзер нажимает Ok, программа делает FindWindow и если находит хоть одно подходящее окно ругается: "Вас просили закрыть MS Word, а вы не закрыли! Работать не буду пока не закроете" и опять одна единственная кнопка OK. И зациклить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2005, 19:45 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
White OwlВот именно поэтому, лучше всего сделать так: Сначала показываем окошко: "Для дальнейшей работы нашей супер-программы нужно закрыть все экземпляры MS Word и MS Excel" Юзер нажимает Ok, программа делает FindWindow и если находит хоть одно подходящее окно ругается: "Вас просили закрыть MS Word, а вы не закрыли! Работать не буду пока не закроете" и опять одна единственная кнопка OK. И зациклить :) Ага, только вот если Word или Excel по какой то причине подвис, в процессах висит, а визуала нету, то получим бесконечный цикл, т.к. юзер вряди полезет в TaskManager чтобы искать и убивать там процесс не угодный _нашему_ приложению. Так что, ИМХО, нужно делать не только кнопочку "Ок", сиротливую и одинокую, но и кнопочку "Закрыть автоматически"... --- С уважением, IKAR ikarhomecenter@narod.ru IkarHomeCenter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2005, 08:52 |
|
||
|
Как остановить внешнее приложение
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за советы, только как я не пытался - ничего не получается, дело в том что моё приложение должно работать как составляющая основной программы при этом открыто несколько child окон и если делать то что вы предлагаете из вне то всё работает на ура, но если запуск идёт из основной программы то основная программа не закрывается пока не закроешь мою программу, я нашёл выход таким образом - пожготовка закрытия проги осуществляется в основной программе - отсоединение от базы данных и создание батника в котором используется команда TaskKill ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2005, 12:56 |
|
||
|
|

start [/forum/topic.php?fid=15&tid=1338099]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 330ms |

| 0 / 0 |
