Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Отслеживание запущенных процессов windows |
Автор: birdfree 12.6.2010, 18:14 |
Доброго времени суток! Помоги начинающему программисту Perl. Мне требуется при запуске скрипта отслеживать не запущены процессы типа Word.exe, Exel.exe а если процессы запущены то дожно выдаваться стандартный виндовкий MsgBox сто запущен процесс |
Автор: NuINu 13.6.2010, 00:04 |
начинающему перл программисту рекомендую Линукс ) |
Автор: birdfree 13.6.2010, 03:08 |
уважаемый NuINu, обращаю внимание что мне нужен именно Windows |
Автор: dva300 13.6.2010, 13:28 | ||
Win32::Process для процессов на Tk нарисуешь окошко. только не пойму зачем тут Perl тем более если есть такие сложности. Возьмите Delphi лучше или еще чего. |
Автор: birdfree 13.6.2010, 15:03 |
dva300, а что есть Tk? А нельзя ли не большой примерчик с win32::process, просто честно говоря я в перле не айс а мне надо срочно написать на нем приложение, а у меня осталось в нем только две проблемы, в том числе и эта |
Автор: dva300 13.6.2010, 15:17 | ||||
Tk - http://search.cpan.org/~ni-s/Tk-804.027/pod/UserGuide.pod win32::process - http://search.cpan.org/search?query=win32%3A%3Aprocess&mode=all там есть и примеры.
ну вот я и говорю - зачем Perl ? пишите на то что знаете. |
Автор: dva300 13.6.2010, 15:37 | ||||
ну вот на быструю руку примерно так - пример для определения запуска Excel. дальше уж сами дорабатывайте.
|
Автор: birdfree 13.6.2010, 16:34 |
dva300, Большое вам спасибо за пример! |
Автор: dva300 13.6.2010, 16:39 | ||
чем могу заработал ? |
Автор: birdfree 13.6.2010, 18:46 | ||
Да, все работает спасибо. Мне только пришлось не много переписать под Tkx но это мелочи, почему то у моего перла от активстэйт нет такого пакета как Tk получилось это
|
Автор: birdfree 14.6.2010, 05:15 | ||
в общем то все работает, осталась проблема наведения лоска так сказать вот код
собственно если в памяти нет нужного процесса ты программа прекрасно работает себе дальше и выполняет требуемые действия, еще я добавил кнопочку продолжить, то есть когда нажимаем эту кнопку то снова происходит проверка на наличие процесса и если процесса в памяти нет то выполняется программа дальше, вот только одна загвоздочка, только вот в чем проблема у меня это не получается реализовать, конечно может я спинным мозгом думаю но что то не получается, помогите пожалуйста |
Автор: birdfree 14.6.2010, 11:16 | ||||
Мой Моск, во время написания был практически мертв, щас чуть по лучше. Попробую сформулировать свои мысли четко. 1. Есть цикл, в котором происходит проверка на существование процесса в памяти 2. Если процесс не найден, собственно программа выполняется дальше 3. Если процесс найден, выдается окно с предупреждением и двумя кнопками, "Выйти" из приложения и "Продолжить" 4. Если нажать кнопку "Продолжить" то мы должны вернуться к пункту 1. Собственно не могу реализовать пункт 4. |
Автор: shamber 14.6.2010, 13:43 |
у вас цикл заканчивается, когда закончились данные в массиве info... Выход из ситуации очевиден. вам при нажатии кнопки продолжить, нужно добавить значений в этот массив. Добавлено через 4 минуты и 2 секунды birdfree, а вообще програмка у вас криво написана. вам бы разнести создание "окна" и код "сканирующий" наличие окна. а тоу вас там каша |
Автор: birdfree 14.6.2010, 15:28 |
Уважаемый shamber, как я уже говорил в перле я крайне плохо понимаю, если вас не затруднит не могли бы привести пример. |
Автор: dva300 14.6.2010, 17:12 | ||
birdfree вы не злитесь. просто вы в данном случае меня, например, поймите - попахивает тем что нужно просто взять и написать программу за вас. а это не дело. если вы начинающий то это скорее плюс нежели минус - стремитесь что-то новое постичь. задачи достаточно простые да и направление вам указывают верное. |
Автор: shamber 14.6.2010, 19:42 |
Tkx это ужос ![]() ![]() |
Автор: dva300 14.6.2010, 20:02 | ||
![]() и это все для рисования одного окошка |
Автор: shamber 14.6.2010, 21:19 |
я проверить не смог, а вы попытайтесь, особенно если у вас окошко нормально рисуется. Перед вызовом my @info = $pi->GetProcInfo(); просто добавьте бесконечный цикл while(1). Это позволит вам продолжить поиск нужного окошка. |
Автор: birdfree 14.6.2010, 21:27 |
shamber, я пробовал ставить бесконечный цикл не получилось. По этому и обратился зп помощью. dva300, я понимаю что это выглядит не очень хорошо, я вам крайне благодарен за помощь. Я постараюсь в дальнейшем разбираться самостоятельно. ![]() |
Автор: dva300 14.6.2010, 22:11 | ||
birdfree когда видно что человек стремиться то и помогается легче. боритесь я готов вам помогать |
Автор: birdfree 15.6.2010, 11:45 |
shamber, я пробовал ставить бесконечный цикл не получилось. По этому и обратился зп помощью. dva300, я понимаю что это выглядит не очень хорошо, я вам крайне благодарен за помощь. Я постараюсь в дальнейшем разбираться самостоятельно. ![]() |
Автор: dva300 15.6.2010, 14:39 | ||||
а чего дважды то повторять ? ![]() ниже код согласно твоих условий. пока будешь жать "Да" программа будет проверять наличие процесса в системе. Если процесс исчезнет - продолжиться выполнение программы. Нажмешь "Нет" - программа завершиться. P.S. Извини. на Tkx сам перепишешь ![]()
|
Автор: birdfree 17.6.2010, 01:16 |
dva300, Спасибо вам большое, есче раз! Все оказалось просто, оказывается не умею пользоваться оператором last ![]() ![]() ![]() Честно говоря, ту конструкцию что предложил, уважаемый dva300, я решил использовать с самого начала, я просто не умею пользоваться last ![]() |
Автор: dva300 17.6.2010, 13:28 | ||
![]() программа будет и без last работать (за комментируйте и проверьте) только немного не правильно потому как.... Объясню зачем нужен last - т.к. в задаче не стоит условие количественного определения запущенных процессов т.е. массив @info пробегать весь не надо поэтому мы ввели признак $flag который станет правдой как только первое упоминание об интересующих нас процессах будет найдено. оно же есть условие выхода и из глобального цикла while. как только значение найдено - выходим из циклов и обновляем массив @info новыми данными и повторяем все заново. как видите цикл foreach и вложенный while по хешам можно и не прерывать - просто придется еще пару раз нажать на кнопку "Далее" хотя это естественно не правильно потому как процессов в системе больше нет. для этого и нужен last. |
Автор: birdfree 17.6.2010, 13:54 | ||
Вот у меня как раз в этом и была проблема, что я не мог сделать выход из цикла, все срабатывало но из цикла он не выходил. Большое спасибо! |
Автор: dva300 17.6.2010, 14:08 | ||
Большое пожалуйста ![]() что хоть за задача была ? а то мы как китайские программисты - пишем часть не понимая что есть целое ![]() P.S. надеюсь задача была не просто вывести кнопку на экран ![]() |
Автор: birdfree 17.6.2010, 18:03 |
Программа вытаскивала из 1с данные потом преобразовывала, туда добавлялись, данные из exel, в итоге все выкладывалось по фтп на сервера, в общем то это все автоматизированно, графический интерфейс создан для отлова ошибок при работе с отображением у оператора на экране ))) ВОт такая вот не хитрая программа )) |