Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Свернуть окно (http://forum.oszone.net/showthread.php?t=225491)

Riavenger 17-01-2012 15:54 1837979

Свернуть окно
 
Доброе время суток. Пытаюсь сделать скрипт 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 1838097

Код:

var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("Quick_Point.exe",0);

Укажите полный путь.

Цитата:

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

Я не вижу разницы.


Используйте библиотеку AutoItX3.dll для работы с окнами, либо переходите на использование PowerShell.

Riavenger 17-01-2012 22:25 1838404

Цитата:

Цитата Iska
Укажите полный путь. »

Кажется так делал. К тому же поправьте если ошибаюсь - полный путь можно не указывать, если скрипт лежит где и запускаемый им .exe.

Riavenger 19-01-2012 20:01 1839839

От лишней задержки избавился, но все равно срабатывает сворачивание не каждую загрузку ОС.
Код:

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 1839901

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

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

Riavenger 20-01-2012 12:27 1840256

Цитата:

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

Подходит, если я сам все настраиваю. А если человек, который никогда ничего подобного не делал... как выход писать скрипт для автоматизации инсталяции библиотеки, ну и раз на то пошло - для размещения самого скрипта.
Отпишусь помогла ли библиотека, когда появится время собственно написать новый скрипт.

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


Время: 15:25.

Время: 15:25.
© OSzone.net 2001-