PDA

Показать полную графическую версию : AppActivate не срабатывает


Solarity
27-05-2010, 05:29
Задача: требуется запускать на компьютерах пользователей программы и управлять ими средствами WSH, с учётом того, что пользователи, возможно, будут продолжать зачем-то тыкать в другие окна. Поэтому, перед выполнением действий вызываем AppActivate.
Пример из справки:

Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("notepad")
WScript.SLEEP 2000
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "0123456789"


Если после запуска блокнота изменить активное окно, WshShell.AppActivate(WshExec.ProcessID) не отрабатывает. Как это забороть?

amel27
27-05-2010, 11:19
Solarity, у меня скрипт нормально отработал - переключился на блокнот как и задумано, как вариант - попробуйте указать заголовок окна вместо PID, проверьте правильность возвращаемого PID... а вообще для задач "управления программами" AutoIT доктор прописал... ;)

Solarity
27-05-2010, 11:37
Проверял на нескольких компах - открываю папку со скриптом, запускаю, открывается блокнот, тут же кликаю по папке - и блокнот оказавшийся на заднем плане там и остаётся, только мигает оранжевым в панели задач. =)
PID правильный, блокнот реагирует, просто не так, как надо. =)
Сам хочу писать на AutoIt, но я не один и коллега хочет единообразия, а он за WSH. =)

amel27
27-05-2010, 12:56
на заднем плане там и остаётся, только мигает оранжевым в панели задач »
AFAIK эту проблему и на API решить не просто, не то что скриптом (гляньте хоть тут (http://www.wasm.ru/forum/viewtopic.php?id=14748)): AppActivate только переводит фокус ввода, а отображать окно поверх остальных не обязано... и вообще, ненадежно всё это, тем более при активных пользователях... в AutoIT по крайней мере многие вещи с (некоторыми) окнами можно делать и без их активации




© OSzone.net 2001-2012