• Как побороть проблемы с производительностью?

    tonyslark
    @tonyslark Автор вопроса
    azarij: Спасибо большое) Буду тыкать)))
  • Как побороть проблемы с производительностью?

    tonyslark
    @tonyslark Автор вопроса
    azarij: Подскажите еще про [System.GC]::Collect(). Где го стоит вызывать, как когда?
  • Как побороть проблемы с производительностью?

    tonyslark
    @tonyslark Автор вопроса
    azarij: ну скажем так если бы такого рода функционал был заложен изначально в СЭД, то я бы этот всесь сыр-бор и не городил) но на их форуме об этом уже 6 лет просят, а воз и нынче там..)))
  • Как побороть проблемы с производительностью?

    tonyslark
    @tonyslark Автор вопроса
    Доброго времени суток! Нет Вы не правильно поняли. Скрипт стартует при запуске системы. С периодичностью в 3с система опрашивается на наличие процессов СЭД (ф-ция Directumchk). Как только процессы найдены управление передается ф-ции ActWinStr которая в безконечном цикле смотрит не пропал ли процесс, не истело ли время простоя с-мы (idle time) и смотрит на активное окно - если это СЭД то ничего не делать, иначе запустить таймер на 900 секунд (это и есть этот джоб который Вас смущает) и все опять по кругу (напоминаю цикл бесконечный). Как только 900с истекает выводится окно с предупреждением.
    Как Вы поняли прикрепить на планировщик это дело не получится)
    Скрипт начинает "кушать" не сразу - изначально на ХРюше метров 40-50 ОП, потом растет и достигая 250Мб опять сбрасывает на 40.
    Так ли сильно безконечный цикл может грузить систему? Может есть варианты чем его заменить?
    Заранее спасибо!
  • Как определить id или handle системных окон?

    tonyslark
    @tonyslark Автор вопроса
    azarij: Все, разобрался) СПАСИБО ВАМ ОГРОМНОЕ!!! WASP реально очень помог. Есть замечательная штука Select-Window -ActiveWindow. Там можно узнать имя активного процесса и вот WASP нормально определяет имя процесса для разного рода таких как в вопросе окон (открыть, сохранить как и т.д)
  • Как определить id или handle системных окон?

    tonyslark
    @tonyslark Автор вопроса
    azarij: Доброго времени суток. Я тут приболел и только взялся за работу)
    WASP хорошая штука, вот только я немного вас дезинформировал - handle и мой скрипт определял, а вот по хендлу этому получить id или еще хоть какую-нибудь информацию не получается.
    Кстати, GetForegroundWindow и WASP возвращают разные handle но всеравно по ним я не могу определить хотя бы id процесса.
    С однострочником вы мне и до этого помогали (в другом вопросе), за него спасибо!
    Для себя вижу лишь один вариант - анализировать Class который возвращает WASP
    Или у вас еще есть идеи? Буду рад их услышать!
    Заранее спасибо!
  • Как определить id или handle системных окон?

    tonyslark
    @tonyslark Автор вопроса
    yellowmew: На предприятии развернута СЭД. Имеется ограниченное кол-во лицензий и очень много "нехороших" пользователей которые добросовестно эти лицензии освобождать не хотят. Написал скрипт который проверяет запущена ли СЭД у пользователя и работает ли он в нем (с помощью GetForegroundWindow ). Как только пользователь переключился на сторонню программу вкл таймер (15 мин) и если время истекло пользователя предупреждают что отключат его (или просят самого закрыть). Проблема в том что у некоторых менюшек невозможно определить хендл и соответственно узнать чье это меню (в таких случаях запускается мой тайме на 15 мин) т.е если вдруг пользователь "затупил" и открывает файл 15 мин (facepalm) то ео и отключить может. Все впринципе и так работает, но просто все хочется сделать "поправильному")
  • Как определить инициатора процесса?

    tonyslark
    @tonyslark Автор вопроса
    azarij: Добрый день (или утро/вечер). Не смотрели решение моей проблемы?
  • Как определить инициатора процесса?

    tonyslark
    @tonyslark Автор вопроса
    azarij: Приветствую! Простите что так долго не отвечал - выходные просто) Попробовал так как вы написали - все равно не могу определить принадлежность некоторых окон к процессу документооборота, ваш скрипт не выводит ошибок, но сказать чье это окно он так же не может, просто приостонавливается (нажал, например, создать документ из файла). Подозреваю что это вызов каких-то системных апи что ли, не могу сам понять. До этого впринципе так же определял (толко без блока try/catch). Я так понимаю как-то с этим блоком бороться беесысленно или у Вас есть еще какие-нибудь идеи?
  • Как определить инициатора процесса?

    tonyslark
    @tonyslark Автор вопроса
    Или может быть есть другие методы/функции для определения активного окна?
  • Как определить инициатора процесса?

    tonyslark
    @tonyslark Автор вопроса
    Спасибо за ответ!
    Может вы мне еще поможете? Как я писал выше получаю hendle из ф-ции GetForegroundWindow и по нему определяю активность программы. Но некоторые меню возвращают другой hendle по которому я не могу определить имя процесса или id. Может быть можно и их как-нибудь отлавливать и определять что это меню изи ЭДО?
    Заранее спасибо!