Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Как отследить закрытие запущенной из под Zinc приложения программы? (http://www.flasher.ru/forum/showthread.php?t=134652)

gfdrf 07.01.2010 01:05

Как отследить закрытие запущенной из под Zinc приложения программы?
 
Доброго вечера уважаемым гуру.
Подскажите пожалуйста такую вещь:
Запускаю из под Zinc приложения стороннюю программу.
Она делает некие действия, потом закрывается.
После её закрытия, моё Zinc приложение, тоже должно что то сделать.
Как отследить её закрытие?

Есть mdm.Process.isOpen(id:Number):Void
но не понимаю, где можно получить ID процесса нужной мнепрограммы? Он ведь при каждом запуске разный...
Есть
Код:

var windowList:Array = mdm.System.getWindowList();

// windowList[0][0] = Window title
// windowList[0][1] = Window handle
// windowList[0][2] = X position
// windowList[0][3] = Y position
// windowList[0][4] = Width
// windowList[0][5] = Height

Но получаемый таким манером хендл окна никак не похож на его ID и использовать его в mdm.Process.isOpen не получается.
Самое интересное, что ведь организовав циклическую проверку windowList, легко видеть что он в массиве есть, или что его нет, но как использовать это, никак не могу сообразить...
А может я туплю?
Или может есть какой то очень красивый способ отслеживания закрытия программы, но я не нашел его ни здесь на форуме, ни в хелпе?

PS Zinc 2.5 ActionScript 2

alexcon314 08.01.2010 12:44

Цитата:

Но получаемый таким манером хендл окна никак не похож на его ID и использовать его в mdm.Process.isOpen не получается
Хэндл окна и хэндл процесса - суть вещи разные. Ибо процесс вполне себе может никаких окон не создавать и прекрасно работать.
В хэлпе есть вот что:
Цитата:

mdm.Process.lastId:Number

Returns the PID process ID of the last Executed Application with Process.create()

Example

var lastProcessID = mdm.Process.lastId;
типа
Код:

mdm.Process.create("", 0, 0, 0, 0, "", "calc", "", 2, 4);
mdm.prompt(mdm.Process.lastId);

Разве что вот так попробовать. Получить пид процесса и по таймеру следить за ним.
Обратите внимание, что для запуска проги нужно в этом случае юзать mdm.process.create(). А не mdm.System.exec().

Насколько я знаю, никаких других встроенных методов для работы с "чужими" окнами и процессами цинк не предоставляет. Если нужно что-то очень уж навороченное, пишите длл с требуемым функционалом.

gfdrf 08.01.2010 15:58

Вложений: 2
alexcon314
ОК! Спасибо! Что то я просмотрел это дело в хелпе, попробую.
А я как раз и использую mdm.process.create().
Я надеялся что если написать что то типа var myProcessID:Number = mdm.Process.create("", 0, 0, 0, 0, "", applicationPath, appFolder, 2, 4);
то myProcessID вернет таки ID процесса. Но он как и написано в хелпе, возвращает лишь true при успешном запуске, иначе false.
НО!
Вот эта конструкция почему то получает ID!
Код AS3:

var myProcessID:Number = mdm.Process.create("", 0, 0, 0, 0, "", applicationPath, appFolder, 2, 4);
        processIDs.push({label:myProcessID});
        myList.dataProvider = new DataProvider(processIDs);

Здесь myList это компонент List. И в нем отображается ID совершенно идентичный тому, что показывает виндовский таскманагер!
Прикладываю fla. Это пример с ZINC-овского сайта. Возможно ли такое на AS2?

PS
Посмотрел сейчас хелп по 2.5 и по 3 но так и не увидел в разделе mdm.Process такой вещи как mdm.Process.lastId:Number :(

alexcon314 08.01.2010 16:15

Мда..
За пример сказать ничего не могу, не охота ковыряться, да и вторая часть битая, не открывается. Первую посмотрел, да, но компилить не стал.
То, что работает "var myProcessID:Number = mdm.Process.create(....", ну так может в третьей версии цинка так оно и есть, чем черт не шутит. Хотя, в хэлпе тройки про mdm.Process.create() написано все так же, как и в хэлпе 2.5. Возможно, просто троечный хэлп неправильный, вполне допускаю. Собственно, можете попробовать скомпилить пример АС2, но в третьем цинке и посмотреть, что возвращает mdm.Process.create().
Только какое это имеет для вас значение, если вы работаете на версии Zinc 2.5?
Что до mdm.Process.lastId в хэлпе оно есть, и в 2.5, и в 3.0. Почему вы его не смогли найти, я не знаю, ищите лучше.

gfdrf 08.01.2010 17:14

Перезалил файлы, может кому сгодятся.
Но думаю всё нормально было. Это ж многотомный архив, и при распаковке хвостик fla из второго файла подхватывается автоматом. Там в примере был скомпиленный файл, но я его выкинул из за ограничений форума по месту.
Поковыряюсь ещё, попробую всёж добится такого...

alexcon314 08.01.2010 18:17

Цитата:

попробую всёж добится такого...
Какого? Чтобы mdm.Process.create() вернул пид? Под 2.5 вы этого никогда не добъетесь. Под 3.0, возможно, это и так есть, чего там добиваться?
И главное, это никак не влияет на решение поставленной задачи. Какая разница, как вы получите пид, в конце-концов? Пид есть по-любому, что еще нужно?


Часовой пояс GMT +4, время: 01:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.