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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   VBS и Radmin (http://forum.oszone.net/showthread.php?t=315472)

Numufar 02-06-2016 09:53 2639583

VBS и Radmin
 
Доброго времени суток.
Есть куча удалённых компов, к которым постоянно приходится коннектиться по 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 2639627

Цитата:

Цитата Numufar
Можно ли переделать скрипт так »

Нет. С «.SendKeys()» — нет.

Numufar 02-06-2016 16:33 2639689

Цитата:

Цитата Iska
Нет. С «.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 2639754

Цитата:

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

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

Numufar 03-06-2016 16:20 2639950

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

Iska 03-06-2016 21:45 2640062

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


Время: 10:06.

Время: 10:06.
© OSzone.net 2001-