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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
посмотрите, что отвечает сервер, возможно TRANSLATED_TEXT='", т.е. пустой

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 04:03 29-10-2016
a929151



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

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 11:22 29-10-2016
a929151



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

Код:
Option Explicit
Dim WshShell: Set WshShell = CreateObject("WScript.Shell")
Dim objShell: Set objShell = WScript.CreateObject("WScript.Shell")
 
Dim result: result = Translate("word","en","ru")
msgbox result
 
Function Translate(SrcText, LangFrom, LangTo)
    Dim objExplorer: Set objExplorer = WScript.CreateObject("InternetExplorer.Application", "IE_")
    objExplorer.Navigate "https://translate.google.ru/#" & LangFrom & "/" & LangTo & "/"  & SrcText
    objExplorer.Visible = 0
    With objExplorer
        Do While (objExplorer.ReadyState < 4 Or objExplorer.Busy)
            Wscript.Sleep 200
        Loop  
        Translate = objExplorer.Document.getElementById("result_box").innerText
    End With
    objExplorer.Quit
End Function


Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 04:27 30-10-2016 | Исправлено: a929151, 04:32 30-10-2016
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
 
Доброго времени суток. В этом сообщении: http://forum.ru-board.com/topic.cgi?forum=33&topic=11963&start=440#2 есть код который мне нужен. Только, моя задача не удалить файл, а поменять ему атрибут, чтобы тем самым вынести его в песочницу, по образу и подобию этого скрипта, но с переменной окружения в пути:
 

Код:
Function OnFirstSandboxOwner
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("C:\Program Files\Your Program\YourProgram.exe")
objFile.Attributes=objFile.Attributes OR 32
End Function

 
Пробую так:

Код:
Function OnFirstSandboxOwner
Set objFSO = CreateObject("Scripting.FileSystemObject")
BasePath = GetEnvironmentVariable("TS_ORIGIN") : BasePath = Left(BasePath, len (BasePath) - 4) & "\"
objFile=BasePath & "%AppData%\Opera Software\Opera Stable\dictionaries\ru.zip"
If objFSO.FileExists(objFile) Then
objFile.Attributes=objFile.Attributes OR 32, TRUE
End If
End Function

 
Выдаёт ошибку на (, TRUE). Если (, TRUE) убрать, ошибок нет, но и скрипт не срабатывает. Подскажите пожалуйста, где я ошибся.
Заранее благодарю!

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 23:32 11-11-2016 | Исправлено: AVanti473, 23:34 11-11-2016
a929151



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

Код:
Function ToggleArchiveBit(filespec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   If f.attributes and 32 Then
      f.attributes = f.attributes - 32
      ToggleArchiveBit = "Archive bit is cleared."
   Else
      f.attributes = f.attributes + 32
      ToggleArchiveBit = "Archive bit is set."
   End If
End Function


Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 00:58 12-11-2016
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
Я тоже читал этот пример в книге Полякова - "VISUAL BASIC SCRIPT для начинающих и бывалых". И тут есть ряд вопросов:
1) Что есть filespec ? Путь к файлу?
2) Я так и не вижу, как здесь можно использовать переменные окружения.
3) В приведённых мною, выше, примерах, речь шла о скрипте, работающем в контейнере ThinApp. Насколько я понимаю, там имеются свои особенности, понятные участникам беседы, на которую я дал ссылку в своём комментарии.
 
P.S.
TS_ORIGIN – это путь, из которого запущен исполняемый файл.
Функция GetEnvironmentVariable(Name) возвращает переменную окружения, ассоциированную с переменной окружения Name.
Во всяком случае так написано здесь: https://yadi.sk/d/a6yWCPmWchuw2

 
 
Добавлено:
Казалось бы есть ещё:
Функция ExpandPath(InputPath) преобразует путь из формата макроса в формат системы.
 
И пробую такой вариант:

Код:
Function OnFirstSandboxOwner
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objPath = ExpandPath("%AppData%\Opera Software\Opera Stable\dictionaries\ru.zip")
Set objFile = objFSO.GetFile(objPath)
objFile.Attributes=objFile.Attributes OR 32
End Function

 
Но Выдаёт ошибку:
Source: Ошибка выполнения Microsoft VBScript
Description: Требуется объект: '[string: "C:\Documents and Set"]'
File: (null)
Line 2, Character 0

 
И хоть бы падла полный путь в ошибке нарисовал, а то хрен разберёшь, то ли путь не тот что надо, то ли он файла не видит.....

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 08:06 12-11-2016 | Исправлено: AVanti473, 08:24 12-11-2016
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вы бы пробовали по одной операцией тестировать
Так ошибка

Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objPath = ExpandPath("%AppData%")  
MsgBox objPath

а так работает

Код:
Set WshShell = CreateObject("WScript.Shell")
Dim objPath
objPath = WshShell.ExpandEnvironmentStrings("%AppData%")
MsgBox objPath

ну, или короче

Код:
Set WshShell = CreateObject("WScript.Shell")
MsgBox WshShell.ExpandEnvironmentStrings("%AppData%")

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 11:14 12-11-2016 | Исправлено: Tilks, 11:22 12-11-2016
Proshaa

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

Код:
Function OnFirstSandboxOwner
Set objFSO = CreateObject("Scripting.FileSystemObject")
BasePath = GetEnvironmentVariable("TS_ORIGIN") : BasePath = Left(BasePath, len (BasePath) - 4) & "\"
objFile=BasePath & "%AppData%\Opera Software\Opera Stable\dictionaries\ru.zip"  
If objFSO.FileExists(objFile) Then
objFile.Attributes=objFile.Attributes OR 32
objFile.Attributes=objFile.Attributes AND 32
End If  
End Function  

 
вот так должно работать.
 
TRUE в том скрипте - удаление файла без запроса подтверждения у пользователя. при изменении атрибутов такого запроса нет, потому и ошибка.
 
ExpandPath и будет давать ошибку, т.к. в реале этого пути не существует, а виртуалу он не нужен, там как раз макросы рулят
 
Tilks
%AppData% - это макрос среды, просто в ОС - и будет ошибка.

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 11:24 12-11-2016 | Исправлено: Proshaa, 11:30 12-11-2016
AVanti473



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

Цитата:
CreateObject("WScript.Shell")

 
В обсуждении по ссылке в моём первом посте, если я не ошибаюсь, Alex_Piggy пишет, что "Wscript запрещен". Насколько я понял из его примеров, это касается именно WScript.Shell Поэтому, было применено решение с GetEnvironmentVariable("TS_ORIGIN")
 
Proshaa

Цитата:
вот так должно работать.

 
А по факту, увы, но не работает. Не ругается ни на что, но и не работает. Могу лишь предположить, что дело в  BasePath = Left(BasePath, len (BasePath) - 4) Как я понимаю, это вычисление обратного пути, относительно исполнительного файла. Впрочем, большое спасибо за помощь, но я рискну обойтись другим кривым решением, которое нашёл ещё утром. Всё будет так:
 

Код:
Function OnFirstSandboxOwner
ExecuteVirtualProcess("C:\ПапкаДляСкрипта\Скрипт.exe")
End Function

 
Разумеется, всю основную работу будет делать Скрипт.exe, созданный в vTask. vbs-ник будет только его запускать... И вот такая конструкция реально работает. Жаль, конечно, что надо прописывать полный путь (на случай разных там нежданциков с Program Files (x86) чтобы файл скрипта лежал рядом с исполнительным файлом программы, для удобства), но не критично. Хотя, если добавить ExpandPath..... Но да я не стал заморачиваться. Работает так - уже хорошо!

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 15:22 12-11-2016 | Исправлено: AVanti473, 15:27 12-11-2016
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti473
там ошибка логическая. поскольку надо вытащить в песочницу файл из сборки, то TS_ORIGIN и прочие BasePath  нужны только когда он уже вытащен.
а атрибуты надо менять по пути установки
далее. скрипт не ругается, потому, что условие If objFSO.FileExists(objFile) не выполняется = туда и не заходит = как бы "не работает". файла-то нет в песочнице.
 
когда что-то не работает - добавляйте MsgBox в проблемные места и выводите в нём сомнительную информацию, как это сделано у Tilks

Код:
 
Function OnFirstParentStart
Dim objFSO, objPath, objFile, attrib, ToggleArchiveBit  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
objPath = ExpandPath("%ProgramFilesDir%\Opera Software\Opera Stable\dictionaries\ru.zip")
Set objFile = objFSO.GetFile(objPath)
If objFSO.FileExists(objPath) Then
 attrib =objFile.Attributes
   If attrib and 32 Then
      objFile.attributes = attrib - 32
      ToggleArchiveBit = "Archive bit is cleared."
   Else
      objFile.attributes = attrib + 32
      ToggleArchiveBit = "Archive bit is set."
   End If  
 MsgBox "Поменяли атрибут: " & ToggleArchiveBit  
Else
 MsgBox "Не нашли файл " & objPath
End If  
End Function  

этот код работает, проверено. файл вытаскивается в песочницу. после отладки MsgBox удалить или закомментировать (')
 
используйте макросы ТА - так не надо беспокоиться о
Цитата:
на случай разных там нежданциков с Program Files (x86)  

 
обратный путь вычисляется так:

Код:
TSOrigin = GetEnvironmentVariable("TS_ORIGIN")
TSLastSlash = InStrRev(TSOrigin, "\")
SourcePath = Left(TSOrigin, TSLastSlash)

 
имя песочницы берётся из Package.ini

Код:
SandboxParent = GetBuildOption("SandboxPath")
SandboxName = GetBuildOption("SandboxName")
If SandboxParent = "." Then
    SandboxPath = SourcePath & SandboxName
Else
    SandboxPath = SandboxParent & Chr(92) & SandboxName
End If  
 


Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 20:03 12-11-2016 | Исправлено: Proshaa, 20:09 12-11-2016
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa
 
Большое спасибо за подробные объяснения. MsgBox конечно же использовал, только без результата. Скажем, допустим, первым шагом идёт присвоение пути с учётом переменной среды, а вторым шагом MsgBox с этим путём. Как результат - ошибка на первом шаге и до MsgBox вообще не доходило у меня. Уверен, что Ваш вариант может быть рабочим, но как я уже писал, решил задачу через запуск vbs-скриптом, вТаск-овского скрипта, который и делает всю необходимую работу! Так уже поступаю не первый раз. Точное в тинапе - первый раз, а до этого такой метод использовал в спуне, где на автостарт можно ставить несколько точек (скрипт и екзешник программы). На самом деле, как показала практика, в спуне вообще можно точкой запуска делать прямо vbs-ник, даже не компилируя его в екзешник, и всё работает. Но, учитывая все сложности с составлением vbs, да ещё отдельные трудности под различные задачи, vTask в этом плане куда гибче и интереснее! Вопрос был в его запуске, ну и сегодня я его решил. Хотя это и не вопрос был вовсе, просто до этого дня руки не доходили откопать решение. Соответственно вопрос по vbs отпал сам собой. Сейчас есть более интересные проблемы, например, гогда модуль флешплеера виден в браузере (в настройках плагинов), подключён, разрешено его использование без ограничений, а на веб-страничках пишет, что такого плагина не установлено. ))) Но, это уже тема совсем другой ветки. Если не решу эти троблы, обозначу их в ветке по тинапу.
 
Большое СПАСИБО за участие в моём вопросе по скриптам!

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 21:34 12-11-2016 | Исправлено: AVanti473, 21:36 12-11-2016
Michail1234



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста правила переноса строк в скрипте? Допустим есть константа:
 
Conct1 = " И вот тут я набираю то что не умещается в одну строку или отформатировано для удобство восприятия в несколько строк."  
 
На что при запуске скрипта я получаю ошибку: Не завершенная строковая константа. Как  правильно перенести на следующую строку значение, либо выражение?

Всего записей: 43 | Зарегистр. 11-04-2006 | Отправлено: 12:55 14-11-2016
a929151



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

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 12:57 14-11-2016
Michail1234



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я так и знал что все просто Спасибо огромное!!!!

Всего записей: 43 | Зарегистр. 11-04-2006 | Отправлено: 13:13 14-11-2016
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть батник для добавления/удаления правила firewall'а в XP/Vista+:

Код:
 
@echo off
 
goto %1
 
:add
netsh advfirewall firewall add rule name=%3 profile=domain,private protocol=any enable=yes DIR=In program=%2 Action=Allow
if errorlevel 1 netsh.exe firewall add allowedprogram %2 %3
goto :eof
 
:delete
netsh advfirewall firewall delete rule name=%3
if errorlevel 1 netsh.exe firewall delete allowedprogram %2
 

Надо переделать его либо в JScript, либо в VBScript. И то, и то для меня - поле нетронутое, потому вопрос: что проще для освоения и реализации такой задачи? По первому гуглению создалось впечатление, что на VBScript самые простые задачи - это целые простыни кода.

----------
Magically yours
Raistlin

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 02:11 28-11-2016 | Исправлено: GCRaistlin, 02:12 28-11-2016
Laserje18

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Стояла банальная задача удалить пустые строки из текстового файла и было предложено такое вот решение:

Код:
Join(Filter(Split(f.ReadAll(),vbNewLine,-1,1),"",True,1),vbNewLine)

Но оно не сработало, и не могу понять почему.
Кто-нибудь может объяснить, почему и можно ли этот подход заставить работать?

Всего записей: 64 | Зарегистр. 11-09-2012 | Отправлено: 18:52 17-12-2016
romby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи, первая ссылка в шапке - нерабочая. Перезалейте, пожалуйста, мануал vbsdoc.exe, и/или поправьте эту ссылку. Не могу нигде найти.

Всего записей: 1785 | Зарегистр. 09-02-2006 | Отправлено: 15:51 01-01-2017 | Исправлено: romby, 15:56 01-01-2017
Engaged_Clown



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romby
Добавил зеркало, только там мануал от 2000го года.

----------
Опросы ru-board'а

Всего записей: 8782 | Зарегистр. 08-06-2006 | Отправлено: 16:13 01-01-2017
sundraw

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

Всего записей: 837 | Зарегистр. 15-05-2011 | Отправлено: 16:53 07-01-2017 | Исправлено: sundraw, 23:38 11-01-2017
korosya

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, есть ли возможность с помощью vbs узнать свойства файла, в частности интересует Описание файла (FileDescription)

Всего записей: 1005 | Зарегистр. 19-07-2003 | Отправлено: 15:03 01-02-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 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