Задача состоит в следующем:
Имеем электронный документооборот. Необходимо отслеживать является ли его окно активным и в случае неактивности давать пользователю N времени прежде чем его закрыть. Активное окно отлавливаю по hendle, который получаю из функции GetForegroundWindow, но когда пользователь открывает некий документ, активным окном становится, например, WORD и запускается таймер, хотя по факту пользователь все же работает в ЭДО. Можно ли определить что инициатором запуска процесса WORD'а был процесс ЭДО?
gwmi win32_process | where description -match "notepad" | select parentprocessid | % {Get-Process | where id -EQ $_.parentprocessid | select name, id} выдаст имя и ПИД родителя нотпада. это все в одну строку.
Спасибо за ответ!
Может вы мне еще поможете? Как я писал выше получаю hendle из ф-ции GetForegroundWindow и по нему определяю активность программы. Но некоторые меню возвращают другой hendle по которому я не могу определить имя процесса или id. Может быть можно и их как-нибудь отлавливать и определять что это меню изи ЭДО?
Заранее спасибо!
azarij: Приветствую! Простите что так долго не отвечал - выходные просто) Попробовал так как вы написали - все равно не могу определить принадлежность некоторых окон к процессу документооборота, ваш скрипт не выводит ошибок, но сказать чье это окно он так же не может, просто приостонавливается (нажал, например, создать документ из файла). Подозреваю что это вызов каких-то системных апи что ли, не могу сам понять. До этого впринципе так же определял (толко без блока try/catch). Я так понимаю как-то с этим блоком бороться беесысленно или у Вас есть еще какие-нибудь идеи?