Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Свернуть окно

Ответить
Настройки темы
VBS/WSH/JS - Свернуть окно

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Riavenger
Дата: 17-01-2012
Доброе время суток. Пытаюсь сделать скрипт 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" не взирая на то активно ли окно программы. На мой взгляд в этой активности/неактивности окна кроется ненадежность.

Отправлено: 15:54, 17-01-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("Quick_Point.exe",0);
Укажите полный путь.

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


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

Отправлено: 17:48, 17-01-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:25, 17-01-2012 | #3


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


От лишней задержки избавился, но все равно срабатывает сворачивание не каждую загрузку ОС.
Код: Выделить весь код
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 на этом примере.

Отправлено: 20:01, 19-01-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 21:43, 19-01-2012 | #5


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Последний раз редактировалось Riavenger, 20-01-2012 в 12:37.


Отправлено: 12:27, 20-01-2012 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Свернуть окно

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - Как свернуть определенное окно в трей (Tray) Guest Программное обеспечение Windows 21 06-02-2020 18:35
VBS/WSH/JS - vbs - свернуть окно bk99 Скриптовые языки администрирования Windows 6 21-12-2011 19:25
Ресурсы - [решено] Изменение размера Свернуть/Свернуть в окно/Закрыть minos66 Оформление Windows 11/ 10 / 8 / 7 / Vista 2 20-06-2011 15:48
[решено] Как сделать чтобы дочернее окно при выходе не закрывало основное окно assch AutoIt 5 19-07-2010 02:11
свернуть несворачиваемое wale Хочу все знать 5 02-11-2008 02:05




 
Переход