Riavenger
17-01-2012, 15:54
Доброе время суток. Пытаюсь сделать скрипт WSH который будет наверняка сворачивать программу. Поскольку мой опыт в написании скриптов совсем небольшой возникло несколько проблем, надеюсь на вашу помощь.
Сначала о этой вредной программе. По моей задумке она должна запускаться при старте виндовc (XP), есть собственный автозапуск, но я использую папку Автозагрузка. Программа при запуске принудительно открывает окно - в этом вся проблема. Программа
- сворачивается умеет только в трей;
- не работает запуск "только в процессах", полностью в этом не уверен, проверял только так:
(.js)
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("Quick_Point.exe",0);
Чтобы свернуть программу в трей использовал отправку нажатия клавиши "Enter".
1 вариант.
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("""Quick Point.exe""")
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "{ENTER}"
WScript.Quit
В результате скрипт зацикливался - окно программы быстро мигало, пока ты не щелкнешь по нему. Предположительно не удачно в этом случае использовать WshShell.AppActivate(WshExec.ProcessID), но возможно я не прав. В этом мой вопрос по 1 варианту.
Без AppActivate программа не получала нажатие ENTER т.к. запускается программа через автозагрузку и из-за других запускающихся программ теряется активность окна.
2 вариант. Использовал SLEEP, чтобы исключить случай когда программа просто не успевала бы показаться на экране из-за обилия запускаемых приложений. При этом зацикливание пропало.
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("""Quick Point.exe""")
WScript.SLEEP 2000
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "{ENTER}"
WScript.Quit
Проблема в том что WScript.SLEEP - как выяснилось, не просто пауза в выполнении скрипта, а задержка всех нижеследующих команд (на 2сек. в данном случае). По видимому из-за этого при загрузке сворачивание не всегда срабатывало и не в каждой из моих ОС. Вопрос по 2 варианту - чем заменить WScript.SLEEP? Или как правильно организовать цикл с проверкой Активности окна, может WScript.SLEEP не будет влиять на скорость выполнения цикла.
И такой вопрос, может кто знает способ передать нажатия клавиши "Enter" не взирая на то активно ли окно программы. На мой взгляд в этой активности/неактивности окна кроется ненадежность.
Сначала о этой вредной программе. По моей задумке она должна запускаться при старте виндовc (XP), есть собственный автозапуск, но я использую папку Автозагрузка. Программа при запуске принудительно открывает окно - в этом вся проблема. Программа
- сворачивается умеет только в трей;
- не работает запуск "только в процессах", полностью в этом не уверен, проверял только так:
(.js)
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("Quick_Point.exe",0);
Чтобы свернуть программу в трей использовал отправку нажатия клавиши "Enter".
1 вариант.
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("""Quick Point.exe""")
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "{ENTER}"
WScript.Quit
В результате скрипт зацикливался - окно программы быстро мигало, пока ты не щелкнешь по нему. Предположительно не удачно в этом случае использовать WshShell.AppActivate(WshExec.ProcessID), но возможно я не прав. В этом мой вопрос по 1 варианту.
Без AppActivate программа не получала нажатие ENTER т.к. запускается программа через автозагрузку и из-за других запускающихся программ теряется активность окна.
2 вариант. Использовал SLEEP, чтобы исключить случай когда программа просто не успевала бы показаться на экране из-за обилия запускаемых приложений. При этом зацикливание пропало.
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("""Quick Point.exe""")
WScript.SLEEP 2000
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "{ENTER}"
WScript.Quit
Проблема в том что WScript.SLEEP - как выяснилось, не просто пауза в выполнении скрипта, а задержка всех нижеследующих команд (на 2сек. в данном случае). По видимому из-за этого при загрузке сворачивание не всегда срабатывало и не в каждой из моих ОС. Вопрос по 2 варианту - чем заменить WScript.SLEEP? Или как правильно организовать цикл с проверкой Активности окна, может WScript.SLEEP не будет влиять на скорость выполнения цикла.
И такой вопрос, может кто знает способ передать нажатия клавиши "Enter" не взирая на то активно ли окно программы. На мой взгляд в этой активности/неактивности окна кроется ненадежность.