VBS/WSH/JS - VBS и Radmin

Ответить
Аватара пользователя
Numufar

VBS/WSH/JS - VBS и Radmin

Сообщение Numufar »

Доброго времени суток.

Есть куча удалённых компов, к которым постоянно приходится коннектиться по RAdmin. На всех машинах логин и пароль одинаковые. Для того, чтобы постоянно не вводить одни и те же логин и пароль, написал скрипт:





Код:

Код: Выделить всё

set WshShell = WScript.CreateObject("WScript.Shell") 
WshShell.Exec ("""C:\Program Files (x86)\Radmin Viewer 3\Radmin.exe"" /connect:192.168.1.100:4899" ) 
WScript.Sleep 4000 
WshShell.SendKeys "admin" 
WshShell.SendKeys "{TAB}" 
WshShell.SendKeys "admin" 
WshShell.SendKeys "{ENTER}"

Подключение проходит и всё бы хорошо, но. Если на удалённом компе медленный интернет и окно ввода логина и пароля не появляется в течение времени(или не появляется вообще), указанного в Wscript.Sleep, то подключения не происходит, а почему-то открывается проводник.

И собственно вопрос. Можно ли переделать скрипт так, чтобы как только появлялось нужное окно, оно бралось в таргет и срабатывал SendKeys? Увеличивать Sleep не вариант, компьютеров очень много, и на большинстве из них скрипт работает, а ждать каждого подключения по 10-15 секунд не комильфо. Пробовал так:





Код:

Код: Выделить всё

set WshShell = WScript.CreateObject("WScript.Shell") 
Set WshExec = WshShell.Exec ("""C:\Program Files (x86)\Radmin Viewer 3\Radmin.exe"" /connect:192.168.1.100:4899") 
If WshExec.Status Then WshShell.AppActivate(WshExec.ProcessID)  
WScript.Sleep 4000 
WshShell.SendKeys "admin" 
WshShell.SendKeys "{TAB}" 
WshShell.SendKeys "admin" 
WshShell.SendKeys "{ENTER}"

Скрипт работает точно так же, как и прежде. Подскажите, кто чем может Изображение
Аватара пользователя
Iska

Re: VBS/WSH/JS - VBS и Radmin

Сообщение Iska »

Цитата Numufar:



Можно ли переделать скрипт так
VBS/WSH/JS - VBS и Radmin




Нет. С «.SendKeys()» — нет.
Аватара пользователя
Numufar

Re: VBS/WSH/JS - VBS и Radmin

Сообщение Numufar »

Цитата Iska:



Нет. С «.SendKeys()» — нет.
VBS/WSH/JS - VBS и Radmin




Оказывается, можно.





Код:

Код: Выделить всё

Dim timeout  
timeout = 13  
set WshShell = WScript.CreateObject("WScript.Shell")  
Set WshExec = WshShell.Exec ("""C:\Program Files (x86)\Radmin Viewer 3\Radmin.exe"" /connect:192.168.1.100:4899")  
Do  
    If WshShell.AppActivate("Система безопасности Radmin: 192.168.1.100") Then  
        WshShell.SendKeys "admin"   
        WshShell.SendKeys "{TAB}"   
        WshShell.SendKeys "admin"   
        WshShell.SendKeys "{ENTER}"   
        Exit Do  
    End If  
    If timeout = 0 Then  
        WScript.Echo "Прости, но Радмин на этом компе не фурычит "  
        Exit Do  
    End If  
    WScript.Sleep 1000  
    timeout = timeout - 1  
Loop

Скрипт в течении 13 секунд каждую секунду проверяет, не запустилось ли окно Радмина, и, если запустилось, передаёт ему параметры из SendKeys().
Аватара пользователя
Iska

Re: VBS/WSH/JS - VBS и Radmin

Сообщение Iska »

Цитата Numufar:



Оказывается, можно.
VBS/WSH/JS - VBS и Radmin




Numufar, «.SendKeys()» не даёт никаких гарантий, что «нажатия» дойдут до потребного окна и будут им обработаны.
Аватара пользователя
Numufar

Re: VBS/WSH/JS - VBS и Radmin

Сообщение Numufar »

Iska, Единственный косяк, из-за которого может не сработать скрипт - это если после появления окна Радмина, но до посылания скриптом в него SendKeys(между этими действиями 1 секунда) сделать активным другое окно. При желании интервал проверки можно уменьшить до 0.001с, тогда уж точно никуда нажать не успеете) Но, думается, такой скрипт будет нехило сжирать ресурсы компьютера.
Аватара пользователя
Iska

Re: VBS/WSH/JS - VBS и Radmin

Сообщение Iska »

Numufar, надёжнее использовать связку из VBScript с библиотекой AutoItX.dll, либо сам AutoIt, либо AutoHotKey.
Ответить

Вернуться в «Программирование и базы данных»