Войти

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


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" не взирая на то активно ли окно программы. На мой взгляд в этой активности/неактивности окна кроется ненадежность.

Iska
17-01-2012, 17:48
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("Quick_Point.exe",0);
Укажите полный путь.

…WScript.SLEEP - как выяснилось, не просто пауза в выполнении скрипта, а задержка всех нижеследующих команд »
Я не вижу разницы.

Используйте библиотеку AutoItX3.dll (http://www.script-coding.com/AutiItX.html) для работы с окнами, либо переходите на использование PowerShell.

Riavenger
17-01-2012, 22:25
Укажите полный путь. »
Кажется так делал. К тому же поправьте если ошибаюсь - полный путь можно не указывать, если скрипт лежит где и запускаемый им .exe.

Riavenger
19-01-2012, 20:01
От лишней задержки избавился, но все равно срабатывает сворачивание не каждую загрузку ОС.
Set WshShell = CreateObject("WScript.Shell")
Set WshExec = WshShell.Exec("""Quick Point.exe""")
WScript.SLEEP 2000
WScript.SLEEP 1
WshShell.AppActivate(WshExec.ProcessID)
WshShell.SendKeys "{ENTER}"
WScript.Quit

По поводу 1 варианта, так и не разобрался отчего зацикливание происходит.

Iska, за ссылку спасибо. Хотелось конечно без сторонних библиотек и вообще разобраться в реальных возможностях VBS на этом примере.

Iska
19-01-2012, 21:43
Riavenger, к сожалению, отсылка нажатий клавиш работает, увы, не стабильно. То есть, если оно и сработает для данной конкретной машины для данного конкретного приложения — не факт, что мы получим аналогичный (и, главное, стабильный) результат для другой машины (или для той же, но в ином программном окружении).

Проблема с установкой сторонних библиотек во многом надумана. Чем сие Вам не подходит?

Riavenger
20-01-2012, 12:27
Проблема с установкой сторонних библиотек во многом надумана. Чем сие Вам не подходит? »
Подходит, если я сам все настраиваю. А если человек, который никогда ничего подобного не делал... как выход писать скрипт для автоматизации инсталяции библиотеки, ну и раз на то пошло - для размещения самого скрипта.
Отпишусь помогла ли библиотека, когда появится время собственно написать новый скрипт.

Зы. по поводу последнего варианта на vbs: похоже скрипт работает 100% если не притрагиваться к мышке с начала загрузки ос до того пока скрипт не проработает.




© OSzone.net 2001-2012