Войти

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


Numufar
02-06-2016, 09:53
Доброго времени суток.
Есть куча удалённых компов, к которым постоянно приходится коннектиться по 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
02-06-2016, 12:52
Можно ли переделать скрипт так »
Нет. С «.SendKeys()» — нет.

Numufar
02-06-2016, 16:33
Нет. С «.SendKeys()» — нет. »
Оказывается, можно.

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
02-06-2016, 19:39
Оказывается, можно. »
Numufar, «.SendKeys()» не даёт никаких гарантий, что «нажатия» дойдут до потребного окна и будут им обработаны.

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

Iska
03-06-2016, 21:45
Numufar, надёжнее использовать связку из VBScript с библиотекой AutoItX.dll, либо сам AutoIt, либо AutoHotKey.




© OSzone.net 2001-2012