Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.01.2010, 01:05
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 1  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
По умолчанию Как отследить закрытие запущенной из под 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

Старый 08.01.2010, 12:44
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
Но получаемый таким манером хендл окна никак не похож на его 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().

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


Последний раз редактировалось alexcon314; 08.01.2010 в 13:04.
Старый 08.01.2010, 15:58
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 3  
Ответить с цитированием
gfdrf

Регистрация: Mar 2006
Сообщений: 92
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
Вложения
Тип файла: rar Process Example.part1.rar (195.3 Кб, 52 просмотров)
Тип файла: rar Process Example.part2.rar (172.1 Кб, 57 просмотров)


Последний раз редактировалось gfdrf; 08.01.2010 в 17:11.
Старый 08.01.2010, 16:15
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Мда..
За пример сказать ничего не могу, не охота ковыряться, да и вторая часть битая, не открывается. Первую посмотрел, да, но компилить не стал.
То, что работает "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. Почему вы его не смогли найти, я не знаю, ищите лучше.


Последний раз редактировалось alexcon314; 08.01.2010 в 16:18.
Старый 08.01.2010, 17:14
gfdrf вне форума Посмотреть профиль Отправить личное сообщение для gfdrf Найти все сообщения от gfdrf
  № 5  
Ответить с цитированием
gfdrf

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

Старый 08.01.2010, 18:17
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 6  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Цитата:
попробую всёж добится такого...
Какого? Чтобы mdm.Process.create() вернул пид? Под 2.5 вы этого никогда не добъетесь. Под 3.0, возможно, это и так есть, чего там добиваться?
И главное, это никак не влияет на решение поставленной задачи. Какая разница, как вы получите пид, в конце-концов? Пид есть по-любому, что еще нужно?

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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