Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, плииз решить "проблему". Сам я в программировании, увы, слабоват. Есть скрипт для установки PPPoE-соединения, вида:
Код:
 
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "%windir%\system32\rasdial.exe ""Internet"" ""login"" ""pass""", 2, true
 

Хотелось бы извернуться, и сделать "отлом" серых IP-адресов, выдаваемых провайдером. Т.е. после соединения (rasdial) вычисляем полученный IP-адрес, и если он не удоволетворяет условиям, то делаем /DISCONNECT и, после паузы, новое соединение (с последующей проверкой).
Как вычислить IP-адрес - знаю, подглядел в соседней теме

Код:
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open "GET", "http://rl.ammyy.com/", false
xmlhttp.send
WScript.Echo xmlhttp.responseText
Set xmlhttp = Nothing

Не знаю только, как составить цикл и совместить эти 2-а кусочка
Помогите, пожалуйста!

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 19:05 23-04-2018
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24
примерно так

Код:
 
Dim Flag
   Dim WSHShell
Do
   Set WSHShell = WScript.CreateObject("WScript.Shell")
   WshShell.Run "%windir%\system32\rasdial.exe ""Internet"" ""login"" ""pass""", 2, true    
   WScript.Sleep 1000 ' pause 1 second
   Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
   xmlhttp.open "GET", "http://rl.ammyy.com/", false
   xmlhttp.send
   Flag = True
   'check gray IP address and if it is then disconnect  
   if xmlhttp.responseText <> "IP address" then  
      Flag = False
      WshShell.Run "%windir%\system32\rasdial.exe ""Internet"" ""/DISCONNECT""
   End If
   Set xmlhttp = Nothing    
Loop While NOT Flag
Set WshShell = Nothing
 


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:04 24-04-2018 | Исправлено: ShIvADeSt, 02:05 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Ругается на 5-ю строку снизу "WshShell.Run "%windir%\system32\rasdial.exe..." :
"Незавершённая строковая константа"
Вроде и изменил, согласно верхней (", 2, true"), а всё равно ругается

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 09:31 24-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24
одну закрывающую " надо в конце, чтобы было попарно

Код:
WshShell.Run "%windir%\system32\rasdial.exe ""Internet"" ""/DISCONNECT"""

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 09:42 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks

Цитата:
одну закрывающую " надо в конце, чтобы было попарно  

Да вроде так и делал... Бестолковость у меня в этих вопросах повышенная
Сейчас скопировал вашу строчку - работает! Только вот... У меня на данном компе другое подключение, не могу проверить в реале - только завтра. Так вот окошко (rasdial.exe) так и мелькает бесконечно - пришлось снимать скрипт через панель задач. Оно и понятно, в приципе - условия-то не выполняются. На реальной машине так не будет?
И по поводу адреса, прописал так:

Код:
if xmlhttp.responseText <> "=82." then  

Так правильно будет?

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 10:03 24-04-2018
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24

Цитата:
И по поводу адреса, прописал так:

Код:
 
if xmlhttp.responseText <> "=82." then    
 

 

Нет конечно.
Грубо говоря после знака <> в кавычках необходимо указать айпишник серого диапазона. Если их много (а скорее всего это так и есть), то нужно дополнительно прописывать сравнение выданного провайдером адреса с серой подсетью.
И вопрос, а Вы уверены, что провайдер выдает белые адреса? Просто обычно это платная услуга. Все остальные получают серые адреса хоть 100500 раз переподключись.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:27 24-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24

Цитата:
Так правильно будет?

скорее нет, вам надо искать фрагмент нужного текста, например inStr

Код:
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")  
xmlhttp.open "GET", "http://rl.ammyy.com/", false  
xmlhttp.send  
WScript.Echo xmlhttp.responseText  
ip = xmlhttp.responseText
Set xmlhttp = Nothing
 
if inStr(ip, "=82.") then
WScript.Echo "IP starts with 82."
else
WScript.Echo "Other IP"
end if

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 10:29 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Грубо говоря после знака <> в кавычках необходимо указать айпишник серого диапазона. Если их много (а скорее всего это так и есть), то нужно дополнительно прописывать сравнение выданного провайдером адреса с серой подсетью.  

Тогда мне этот вариант не подходит. Речь идёт не об единственном адресе, а об отсечении адресов, начинающиеся с 82-го пула.

Цитата:
И вопрос, а Вы уверены, что провайдер выдает белые адреса?

Не уверен, но 82.* - это ЖОПА. К любому другому "спектру" я без проблем цепляюсь снаружи тем же Remote Admin'ом - просто и удобно. Скрипт при соединении скидывает мне на мыло адрес нужной точки, и... Раньше, до того как DynDNS захотели бабла, было гораздо удобнее - проблем не было вообще. Теперь вот приходится изгаляться  
Потому, как:
Цитата:
Просто обычно это платная услуга. Все остальные получают серые адреса хоть 100500 раз переподключись.

Именно, что платная. Тем не менее, повторюсь, меня остальной диапазон (кроме 82.*) вполне устраивает...
 
Tilks

Цитата:
скорее нет, вам надо искать фрагмент нужного текста, например inStr

Возможно, только у меня не получилось совместить "ужа с ежом": попытался вставить ваш фрагмент в скрипт от ShIvADeSt, он мне делает вывод на экран
Закомментировал WScript.Echo - всё равно на экран выводит. Что-то я не врублюсь, как это работает...

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 10:55 24-04-2018 | Исправлено: vasyosuol_24, 10:56 24-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24

Цитата:
Возможно, только у меня не получилось совместить "ужа с ежом":

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

Код:
Dim Flag
Dim WSHShell  
Do  
   Set WSHShell = WScript.CreateObject("WScript.Shell")  
   WshShell.Run "%windir%\system32\rasdial.exe ""Internet"" ""login"" ""pass""", 2, true      
   WScript.Sleep 1000 ' pause 1 second  
   Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")  
   xmlhttp.open "GET", "http://rl.ammyy.com/", false  
   xmlhttp.send  
   Flag = True  
   'check gray IP address and if it is then disconnect  
   if inStr(xmlhttp.responseText, "=82.") then  
      Flag = False  
      WshShell.Run "%windir%\system32\rasdial.exe ""Internet"" ""/DISCONNECT"""
   End If  
   Set xmlhttp = Nothing      
Loop While NOT Flag  
Set WshShell = Nothing  

 
ещё вопрос о том ammyy.com, не подумает о вас, как о DDoS, раз каждую секунду будете бомбить.

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 11:14 24-04-2018 | Исправлено: Tilks, 11:32 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks

Цитата:
уж с ежом примерно так выглядит  

Спасибо! Вроде работает даже. Подробнее определю завтра.

Цитата:
ещё вопрос о том ammyy.com, не подумает о вас, как о DDoS, раз каждую секунду будете бомбить.

А оно не закроется разве (процес выполнения скрипта), после получения нужного IP?
Сейчас, вроде закрылось само - процесса "wscript" не вижу, ничего на экране не мелькает. Пауза в 1 секунду маловата, конечно - ну, не я это предложил. Можно и увеличить. Даже, наверное, лучше  
Вообще, я этой методой (определение IP посредством ammyy.com) уже года 3 пользуюсь, сбоев пока не было до сих пор.
 
Добавлено:
Ещё бы в конце добавить "Интернет-соединение установлено", с завершением работы скрипта.
Не знаю только, как. В смысле, MsgBox с сообщением воткнуть нетрудно, это я умею. Вопрос в том, чтобы его правильно воткнуть, в нужное место...

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 11:41 24-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24

Цитата:
Не знаю только, как.

просто завершающей строкой.

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 12:58 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, вот здесь нашёл скрипт для определения teamviwer id.
Не могу понять в чём дело: выдаёт ошибку в последней строчке ("Предлагается наличие 'Next' ")
Цикл, насколько я понимаю, закрыт - чего ему ещё нужно?

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 14:47 24-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24

Цитата:
Цикл, насколько я понимаю, закрыт - чего ему ещё нужно?  

попробуйте последние две строчки местами поменять.

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 18:17 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks

Цитата:
попробуйте последние две строчки местами поменять.
 

Не помогает. Ошибка прежняя.

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 18:26 24-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24
там пол кода нет, в конце должен быть Next,  в начале Set WshShell = CreateObject("WScript.Shell")
это Dim arrSubKeys(9,5) тоже должно быть больше 9
tf.WriteBlankLines(2)  , что такое tf в коде нема, скорее файл какой то записывает.
у меня нет такого ключа HKEY_LOCAL_MACHINE\Software\TeamViewer\Version12\ClientID
 
Короче нахрен его, вот TeamViewer_ID_light.vbs проверял на TV 12 (32 bit) на W7 (64 bit)

Код:
Dim RegTVClientID,RegTVVersion  
Set WshShell = CreateObject("WScript.Shell")
RegTVClientID = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TeamViewer\ClientID")  
RegTVVersion = WshShell.RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version")  
MsgBox "TeamViewer Version: " & RegTVVersion & vbCrLf &  "ID: " & RegTVClientID
 

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 19:25 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks

Цитата:
Короче нахрен его, вот TeamViewer_ID_light.vbs проверял на TV 12 (32 bit) на W7 (64 bit)  

Пасиб! Я, правда, до сих пор использую 6-й - в "верхних" версиях не вижу никакого смысла. Да и вообще TeamViewer приходится использовать от безысходности, пролазит всюду, зараза. Но - неудобен. Как и другие подобные клиенты, тот же ammyy, например. Я как раз и наткнулся на методу определения IP, когда тусил в ветке по ammyy - искал альтернативу TeamViewer. Только нет их, альтернатив . Потому, как на самом деле не TeamViewer нужен, а RemoteAdmin. Что-то я отклонился от темы
В общем, я поправил для себя, вот здесь:
Код:
 
RegTVClientID = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version6\ClientID")  
RegTVVersion = WshShell.RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version6\Version")  
 
 
Всё работает, спасибо. Остальное, понятно - аналогично.
 
Добавлено:
P.S. Я-то думал - какая-то хитрая метода, а оно просто читает значение из реестра.

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 20:17 24-04-2018
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks
Вроде всё работает - проверил. Я про Этот Скрипт. Я, правда допилил его малёк - из-за этого возник ряд проблем. В частности, добавил отсылку поученного адреса на свой e-mail. Но теперь всё работает - Спасибо!

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 20:17 25-04-2018
uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как на vbs заменить в файле одну строку на другую?

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 12:19 04-05-2018
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
Const ForReading = 1  
Const ForWriting = 2  
 
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objFile = objFSO.OpenTextFile("file.txt", ForReading)  
 
strText = objFile.ReadAll  
objFile.Close  
'=====================================  
ReplaceSource = "" 'Что ищем  
Replacetarget = "" ' На что меняем  
'======================================  
strNewText = Replace(strText, ReplaceSource, Replacetarget)  
 
Set objFile = objFSO.OpenTextFile("file.txt", ForWriting)  
objFile.WriteLine strNewText  
objFile.Close  

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 12:35 04-05-2018
Accessor



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, есть у меня задача заменить в файле-подписи для MS Outlook логотип. Лого - это обычная картинка, которая расположена в самом конце документа Word. Я понимаю, что алгоритм замены сводится к открытию документа Word, поиску картинки, её удалению и вставки на её место новой. Подскажите, пожалуйста набор команд для этого алгоритма, плиз.

Всего записей: 2863 | Зарегистр. 31-10-2003 | Отправлено: 12:48 04-07-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru