Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отслеживание запущенных процессов windows, Как следить за нужными процессами 
:(
    Опции темы
birdfree
Дата 12.6.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



Доброго времени суток! 
Помоги начинающему программисту Perl.
Мне требуется при запуске скрипта отслеживать не запущены процессы типа Word.exe, Exel.exe а если процессы запущены то дожно выдаваться стандартный виндовкий MsgBox сто запущен процесс  
PM MAIL   Вверх
NuINu
Дата 13.6.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 19.7.2008

Репутация: 5
Всего: 6



начинающему перл программисту рекомендую Линукс )
PM MAIL   Вверх
birdfree
Дата 13.6.2010, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



уважаемый NuINu, обращаю внимание что мне нужен именно Windows
PM MAIL   Вверх
dva300
Дата 13.6.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 12.6.2010,  18:14)
Доброго времени суток! 
Помоги начинающему программисту Perl.
Мне требуется при запуске скрипта отслеживать не запущены процессы типа Word.exe, Exel.exe а если процессы запущены то дожно выдаваться стандартный виндовкий MsgBox сто запущен процесс

Win32::Process для процессов
на Tk нарисуешь окошко.

только не пойму зачем тут Perl тем более если есть такие сложности. Возьмите Delphi лучше или еще чего.
--------------------
Участник движения Культура Вождения
PM   Вверх
birdfree
Дата 13.6.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



dva300, а что есть Tk? 
А нельзя ли не большой примерчик с win32::process, просто честно говоря я в перле не айс а мне надо срочно написать на нем приложение, а у меня осталось в нем только две проблемы, в том числе и эта

Это сообщение отредактировал(а) birdfree - 13.6.2010, 15:10
PM MAIL   Вверх
dva300
Дата 13.6.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 13.6.2010,  15:03)
dva300, а что есть Tk? 
А нельзя ли не большой примерчик с win32::process, просто честно говоря я в перле не айс а мне надо срочно написать на нем приложение, а у меня осталось в нем только две проблемы, в том числе и эта

Tk - http://search.cpan.org/~ni-s/Tk-804.027/pod/UserGuide.pod
win32::process - http://search.cpan.org/search?query=win32%...ss&mode=all

там есть и примеры.

Цитата

просто честно говоря я в перле не айс а мне надо срочно написать на нем приложение


ну вот я и говорю - зачем Perl ? пишите на то что знаете.

--------------------
Участник движения Культура Вождения
PM   Вверх
dva300
Дата 13.6.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 13.6.2010,  15:03)
dva300, а что есть Tk? 
А нельзя ли не большой примерчик с win32::process, просто честно говоря я в перле не айс а мне надо срочно написать на нем приложение, а у меня осталось в нем только две проблемы, в том числе и эта

ну вот на быструю руку примерно так - пример для определения запуска Excel.
дальше уж сами дорабатывайте.

Код

use strict;
use Win32::Process::Info;
use Tk;

 my $pi = Win32::Process::Info->new ();
 my @info = $pi->GetProcInfo ();   

 foreach (@info)
    {
    while (my ($key,$value) = each(%$_))
        {
        if ($value =~ /excel/i)
            {
            my $mw = MainWindow->new;
            $mw->geometry("200x100");
            $mw->title("Excel started !!!");
            $mw->Label(-text => 'Excel started !!!')->pack();
            $mw->Button(-text => "Close", -command =>sub{exit})->pack();
            MainLoop;
            }
        }
    }



Это сообщение отредактировал(а) dva300 - 13.6.2010, 15:38
--------------------
Участник движения Культура Вождения
PM   Вверх
birdfree
Дата 13.6.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



dva300, Большое вам спасибо за пример!
PM MAIL   Вверх
dva300
Дата 13.6.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 13.6.2010,  16:34)
dva300, Большое вам спасибо за пример!

чем могу 
заработал ? 
--------------------
Участник движения Культура Вождения
PM   Вверх
birdfree
Дата 13.6.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



Да, все работает спасибо. Мне только пришлось не много переписать под Tkx но это мелочи, почему то у моего перла от активстэйт нет такого пакета как Tk получилось это
Код

use strict;
use Win32::Process::Info;
use Tkx;
my $pi   = Win32::Process::Info->new();
my @info = $pi->GetProcInfo();
foreach (@info) {
    while ( my ( $key, $value ) = each(%$_) ) {
        if ( $value =~ /notepad/i ) {
   my $mw = Tkx::widget->new(".");
   
   $mw->g_wm_title("Error");
   my $b = $mw->new_button(
        -text => "Close",
        -command => sub { $mw->g_destroy; },
    );
    $b->g_pack;

            Tkx::MainLoop();
        }
    }
}
print " OK!\n";

PM MAIL   Вверх
birdfree
Дата 14.6.2010, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



в общем то все работает, осталась проблема наведения лоска так сказать вот код
Код

use strict;
use Win32::Process::Info;
use Tkx;
use Net::FTP;
use Encode 'encode', 'decode';

my $pi   = Win32::Process::Info->new();
my @info = $pi->GetProcInfo();
foreach (@info) {
    while ( my ( $key, $value ) = each(%$_) ) {
        if ( $value =~ /word/i ) {
   my $mw = Tkx::widget->new(".");

   $mw->g_wm_title(decode('cp1251', 'ќшибка!'));
   my $label = $mw->new_ttk__label(
   -text => decode('cp1251', '«акройте word!'),
           -font => "Arial_Black",
   -foreground => "red");
      my $label2 = $mw->new_ttk__label(
   -text => decode('cp1251', '» запустите снова.'),
           -font => "Arial_Black",
   -foreground => "red");
      my $b = $mw->new_button(
        -text => decode('cp1251', 'ѕродолжить'),
        -command => sub {
         print "oo\n";},
    );
    $b->g_pack;
   my $b2 = $mw->new_button(
        -text => decode('cp1251', '¬ыйти'),
        -command => sub { $mw->g_destroy; },
    );
    $b2->g_pack;

            Tkx::grid($label, -row => 0, -column => 0, -padx => 10, -pady => 10);
            Tkx::grid($label2, -row => 1, -column => 0, -padx => 10, -pady => 10);
#            Tkx::grid($b, -row => 1, -column => 0, -padx => 10, -pady => 10);
            Tkx::grid($b2, -row => 2, -column => 0, -padx => 10, -pady => 10);
            
            Tkx::MainLoop();
        }
    }
}

print "OK!\n";
#  тут программа
print "OK!\n"


собственно если в памяти нет нужного процесса ты программа прекрасно работает себе дальше и выполняет требуемые действия, еще я добавил кнопочку продолжить, то есть когда нажимаем эту кнопку то снова происходит проверка на наличие процесса и если процесса в памяти нет то выполняется программа дальше, вот только одна загвоздочка, только вот в чем проблема у меня это не получается реализовать, конечно может я спинным мозгом думаю но что то не получается, помогите пожалуйста 
PM MAIL   Вверх
shamber
Дата 14.6.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Цитата(birdfree @  14.6.2010,  05:15 Найти цитируемый пост)
дальше, вот только одна загвоздочка, только вот в чем проблема у меня это не получается реализовать, конечно может я спинным мозгом думаю но что то не получается, помогите пожалуйста  

мозг сломлен... может проще сформулируете?
PM MAIL Jabber   Вверх
birdfree
Дата 14.6.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



Цитата(shamber @ 14.6.2010,  10:57)
Цитата(birdfree @  14.6.2010,  05:15 Найти цитируемый пост)
дальше, вот только одна загвоздочка, только вот в чем проблема у меня это не получается реализовать, конечно может я спинным мозгом думаю но что то не получается, помогите пожалуйста  

мозг сломлен... может проще сформулируете?

Мой Моск, во время написания был практически мертв, щас чуть по лучше. Попробую сформулировать свои мысли четко.
1. Есть цикл, в котором происходит проверка на существование процесса в памяти
2. Если процесс не найден, собственно программа выполняется дальше 
3. Если процесс найден, выдается окно с предупреждением и двумя кнопками, "Выйти" из приложения и "Продолжить"
4. Если нажать кнопку "Продолжить" то мы должны вернуться к пункту 1.  
Собственно не могу реализовать пункт 4.
PM MAIL   Вверх
shamber
Дата 14.6.2010, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



у вас цикл заканчивается, когда закончились данные в массиве info...
Выход из ситуации очевиден. вам при нажатии кнопки продолжить, нужно добавить значений в этот массив.

Добавлено через 4 минуты и 2 секунды
birdfree, а вообще програмка у вас криво написана. вам бы разнести создание "окна" и код "сканирующий" наличие окна. а тоу  вас там каша
PM MAIL Jabber   Вверх
birdfree
Дата 14.6.2010, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



Уважаемый shamber, как я уже говорил в перле я крайне плохо понимаю, если вас не затруднит не могли бы привести пример.
PM MAIL   Вверх
dva300
Дата 14.6.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 14.6.2010,  15:28)
Уважаемый shamber, как я уже говорил в перле я крайне плохо понимаю, если вас не затруднит не могли бы привести пример.

birdfree вы не злитесь. просто вы в данном случае меня, например, поймите - попахивает тем что нужно просто взять и написать программу за вас. а это не дело. 
если вы начинающий то это скорее плюс нежели минус - стремитесь что-то новое постичь. задачи достаточно простые да и направление вам указывают верное.

--------------------
Участник движения Культура Вождения
PM   Вверх
shamber
Дата 14.6.2010, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Tkx это ужос smile блин попытался запустить скрипт не вышло smile отвык я от них
PM MAIL Jabber   Вверх
dva300
Дата 14.6.2010, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(shamber @ 14.6.2010,  19:42)
Tkx это ужос smile блин попытался запустить скрипт не вышло smile отвык я от них

 smile 
и это все для рисования одного окошка 

--------------------
Участник движения Культура Вождения
PM   Вверх
shamber
Дата 14.6.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



я проверить не смог, а вы попытайтесь, особенно если у вас окошко нормально рисуется. Перед вызовом my @info = $pi->GetProcInfo(); просто добавьте бесконечный цикл while(1). Это позволит вам продолжить поиск нужного окошка.
PM MAIL Jabber   Вверх
birdfree
Дата 14.6.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



shamber, я пробовал ставить бесконечный цикл не получилось. По этому и обратился зп помощью.
dva300, я понимаю что это выглядит не очень хорошо, я вам крайне благодарен за помощь. Я постараюсь в дальнейшем разбираться самостоятельно.  smile 
PM MAIL   Вверх
dva300
Дата 14.6.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 14.6.2010,  21:27)
shamber, я пробовал ставить бесконечный цикл не получилось. По этому и обратился зп помощью.
dva300, я понимаю что это выглядит не очень хорошо, я вам крайне благодарен за помощь. Я постараюсь в дальнейшем разбираться самостоятельно.  smile

birdfree когда видно что человек стремиться то и помогается легче. 
боритесь  я готов вам помогать 


Это сообщение отредактировал(а) dva300 - 14.6.2010, 22:12
--------------------
Участник движения Культура Вождения
PM   Вверх
birdfree
Дата 15.6.2010, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



shamber, я пробовал ставить бесконечный цикл не получилось. По этому и обратился зп помощью.
dva300, я понимаю что это выглядит не очень хорошо, я вам крайне благодарен за помощь. Я постараюсь в дальнейшем разбираться самостоятельно.  smile 
PM MAIL   Вверх
dva300
Дата 15.6.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 15.6.2010,  11:45)
shamber, я пробовал ставить бесконечный цикл не получилось. По этому и обратился зп помощью.
dva300, я понимаю что это выглядит не очень хорошо, я вам крайне благодарен за помощь. Я постараюсь в дальнейшем разбираться самостоятельно.  smile

а чего дважды то повторять ?  smile 

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

P.S. Извини. на Tkx сам перепишешь  smile  

Код

use strict;
use Win32::Process::Info;
use Tk;

 my $pi = Win32::Process::Info->new ();
 my $flag = 1;
 while($flag)
    {
    $flag = undef;
    my @info = $pi->GetProcInfo ();   
    foreach (@info)
        {
        while (my ($key,$value) = each(%$_))
            {
            if ($value =~ /excel/i)
                {
                my $mw = MainWindow->new();
                $mw->withdraw();

                my $ftp_warn = $mw->messageBox(
                -title   => 'Message',
                -message => "Excel found. Continue ?",
                -type    => 'YesNo',
                -icon    => 'question',
                );
                if ( $ftp_warn eq 'No' ) 
                    {
                    exit;
                    }
                else 
                    {
                    $flag = 1;
                    last;
                    }
                }
            }
        last if $flag;    
        }
    }
print "main programm....\n";    

--------------------
Участник движения Культура Вождения
PM   Вверх
birdfree
Дата 17.6.2010, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



dva300, Спасибо вам большое, есче раз! 
Все оказалось просто, оказывается не умею пользоваться оператором last  smile  smile  smile 
Честно говоря, ту конструкцию что предложил, уважаемый dva300, я решил использовать с самого начала, я просто не умею пользоваться last  smile 

Это сообщение отредактировал(а) birdfree - 17.6.2010, 01:55
PM MAIL   Вверх
dva300
Дата 17.6.2010, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата(birdfree @ 17.6.2010,  01:16)
dva300, Спасибо вам большое, есче раз! 
Все оказалось просто, оказывается не умею пользоваться оператором last  smile  smile  smile 
Честно говоря, ту конструкцию что предложил, уважаемый dva300, я решил использовать с самого начала, я просто не умею пользоваться last  smile

 smile  согласно диалога выше проблема как мне думалось была в цикле while 
программа будет и без last работать (за комментируйте и проверьте) только немного не правильно потому как....

Объясню зачем нужен last - т.к. в задаче не стоит условие количественного определения запущенных процессов т.е. массив @info пробегать весь не надо
поэтому мы ввели признак $flag который станет правдой как только первое упоминание об интересующих нас процессах будет найдено. оно же есть условие выхода и из глобального цикла while.
как только значение найдено - выходим из циклов и обновляем массив @info новыми данными и повторяем все заново.
 
как видите цикл foreach и вложенный while по хешам можно и не прерывать - просто придется еще пару раз нажать на кнопку "Далее"
хотя это естественно не правильно потому как процессов в системе больше нет. для этого и нужен last.

--------------------
Участник движения Культура Вождения
PM   Вверх
birdfree
Дата 17.6.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



Цитата(dva300 @ 17.6.2010,  13:28)

Объясню зачем нужен last - т.к. в задаче не стоит условие количественного определения запущенных процессов т.е. массив @info пробегать весь не надо
поэтому мы ввели признак $flag который станет правдой как только первое упоминание об интересующих нас процессах будет найдено. оно же есть условие выхода и из глобального цикла while.
как только значение найдено - выходим из циклов и обновляем массив @info новыми данными и повторяем все заново.
 
как видите цикл foreach и вложенный while по хешам можно и не прерывать - просто придется еще пару раз нажать на кнопку "Далее"
хотя это естественно не правильно потому как процессов в системе больше нет. для этого и нужен last.

Вот у меня как раз в этом и была проблема, что я не мог сделать выход из цикла, все срабатывало но из цикла он не выходил. Большое спасибо! 
PM MAIL   Вверх
dva300
Дата 17.6.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2010
Где: Москва

Репутация: -1
Всего: 1



Цитата

Большое спасибо!

Большое пожалуйста  smile 

что хоть за задача была ? а то мы как китайские программисты - пишем часть не понимая что есть целое smile
P.S. надеюсь задача была не просто вывести кнопку на экран  smile 
--------------------
Участник движения Культура Вождения
PM   Вверх
birdfree
Дата 17.6.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 12.12.2008

Репутация: 1
Всего: 1



Программа вытаскивала из 1с данные потом преобразовывала, туда добавлялись, данные из exel, в итоге все выкладывалось по фтп на сервера, в общем то это все автоматизированно, графический интерфейс создан для отлова ошибок при работе с отображением у оператора на экране ))) ВОт такая вот не хитрая программа )) 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1151 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.