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

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

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fff222fffy1
это надо постить в wind0ws, скрипты не причём, такие возможности MessageBox есть по всей системе, и давно уже.

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 18:02 21-05-2016
fff222fffy1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, буду знать, просто поделился случайно обнаруженным.
Меня собственно больше интересуют ответы на мои предыдущие вопросы, а это так, мимоходом. Если все и так знают, то можно и удалить.

Всего записей: 30 | Зарегистр. 07-01-2010 | Отправлено: 18:41 21-05-2016
Tilks

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

Цитата:
Если все и так знают, то можно и удалить.

не все, конечно, знают, но тут не удаляют, если сильно хочется, можно самому пост поправить, но не удалить.

Цитата:
больше интересуют ответы на мои предыдущие вопросы

тогда надо ждать какого то программиста, который программирует на VBScript.
по моему, большинство использует VBScript, чтобы облегчить себе жизнь, написав пару строчек кода.
ваши же вопросы затрагивает классы, использование которых оправдано в каком нибудь большом проекте, а здесь, на форуме, даже процедурный код не часто, где уж нам до классов. И название темы тоже, как бы, намекает словом - "удобняшек".
 
VBScript мне нужен только в расширениях других программ, например - Directory Opus, EmEditor , хотя в них есть поддержка и JavaScript , и если писать с нуля, то я предпочитаю его.

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 20:31 21-05-2016
AlessTO

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет,
есть такой скрипт:
скрипт
Пока не добавил ключ разделения на тома - все работало замечательно. Теперь при создании дифференциальных архивов в логе - ошибка создания тома. Я понимаю что это связано с константой EXT, но как победить проблему не ведаю - вразумите пожалуйста. Архиватор при разбитии на тома - использует нумерацию в качестве расширения - 001, 002 и т.д.

Всего записей: 253 | Зарегистр. 09-12-2006 | Отправлено: 12:02 24-05-2016 | Исправлено: AlessTO, 12:07 24-05-2016
Dacor

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите кому не сложно, как переделать скрипт чтобы он принимал аргументы из файла, а не из командной строки.
 
Скрипт вызывается из bat файла который ему передает список аргументов
 

Код:
 
start "title" /b /wait cscript.exe "%~dp0HideWindowsUpdates.vbs" 971033 2902907

 
А очень хотелось бы батнику в качестве аргумента передавать txt файл, а он бы передавал его содержимое скрипту.
 
HideWindowsUpdates.vbs

Код:
 
'// Inspired by Opmet and Colin Bowern: _http://serverfault.com/a/341318
If Wscript.Arguments.Count < 1 Then
    WScript.Echo "Syntax: HideWindowsUpdates.vbs [Hotfix Article ID]" & vbCRLF & _
        " - Examples: HideWindowsUpdates.vbs 2990214" & vbCRLF & _
        " - Examples: HideWindowsUpdates.vbs 3022345 3035583"
    WScript.Quit 1
End If
 
Dim objArgs
Set objArgs = Wscript.Arguments
Dim updateSession, updateSearcher
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateUpdateSearcher()
 
Wscript.Stdout.Write "Searching for pending updates..."  
Dim searchResult
Set searchResult = updateSearcher.Search("IsInstalled=0")
 
Dim update, kbArticleId, index, index2
WScript.Echo CStr(searchResult.Updates.Count) & " found."
For index = 0 To searchResult.Updates.Count - 1
    Set update = searchResult.Updates.Item(index)
    For index2 = 0 To update.KBArticleIDs.Count - 1
        kbArticleId = update.KBArticleIDs(index2)
 
        For Each hotfixId in objArgs
            If kbArticleId = hotfixId Then
                If update.IsHidden = False Then
                    WScript.Echo "Hiding update: " & update.Title
                    update.IsHidden = True
                Else
                    WScript.Echo "Already hidden: " & update.Title
                End If          
            End If
        Next
 
    Next
Next
'// EOF
 

Всего записей: 1584 | Зарегистр. 02-08-2007 | Отправлено: 00:31 27-05-2016 | Исправлено: Dacor, 00:31 27-05-2016
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dacor
пробуй, у меня не работает обновление, потому проверить не могу, но если раскомментировать 3 строчки после ' for testing , то выводит содержимое файла построчно.
в подаваемом файле каждая строчка один аргумент, без пробелов, в конце и в начале.
код

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 13:34 27-05-2016 | Исправлено: Tilks, 13:35 27-05-2016
Dacor

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks
Попробовал. Что то не получилось(
Выводит на экран:
C:\>start "title" /b /wait cscript.exe "C:\HideWindowsUpdates.vbs" kb.txt
"C:\HideWindowsUpdates.vbs" kb.txt
Сервер сценариев Windows (Microsoft R) версия 5.8
Copyright (C) Корпорация Майкрософт 1996-2006, все права защищены.
C:\kb.txt
яю3
Searching for pending updates...260 found.
 
и всё..
 
Если раскоментить "для теста" то выводит странную строку "яю3", количество символов вне зависимости сколько апдейтов прописано. Потом ищет, находит 260 штук, но ничего не прячет.
Еще это нормально что он потребовал framework3.5? Тому варианту было не нужно.  
И файл он берет только если запускать из командной строки из каталога. Если просто тыкнуть в батник, пишет что файл не найден. Но это я разобрался, запускал из строки. Фреймворк поставил. Но не сработало(
Если важно, концы строк в kb.txt - CR LF. Номера обновлений в столбик, пробелов нет.

Всего записей: 1584 | Зарегистр. 02-08-2007 | Отправлено: 01:15 28-05-2016 | Исправлено: Dacor, 01:17 28-05-2016
Tilks

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

Цитата:
странную строку "яю3"

может у вас кодировка файла юникод с меткой, и метку странную и выводит.
проверил, да наверно юникодная метка мешает, надо сохранять в кодировке без метки.

Цитата:
И файл он берет только если запускать из командной строки из каталога. Если просто тыкнуть в батник, пишет что файл не найден.

я запускал без батника, просто в ком строке> HideWindowsUpdates.vbs test.txt
 
создал ваш батник, у меня всё пишет в консоль.
создал свой , тогда нормально. текст в батнике:
HideWindowsUpdates.vbs test.txt
 
Добавлено:
если kb.txt должен быть в юникоде, то надо добавить параметр, чтобы скрипт знал что мы передаём юникод.  
Set File = FSO.GetFile(CurrentDirectory &"\"& WScript.Arguments(0))
Set TextStream = File.OpenAsTextStream(1, -1)
http://www.script-coding.com/WSH/FileSystemObject.html#5.3.4.
 
или поменять те две строчки на одну такую
Set TextStream = FSO.OpenTextFile(CurrentDirectory &"\"& WScript.Arguments(0), 1, False, -1)
последний параметр (-1) это юникод кодировка.
-2 - Открыть файл в формате, используемом системой по умолчанию.
-1 - Открыть файл в формате Unicode.
0 - Открыть файл в формате ASCII (по умолчанию).
больше параметров здесь:
http://www.script-coding.com/WSH/FileSystemObject.html#3.24.

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 01:36 28-05-2016 | Исправлено: Tilks, 08:38 28-05-2016
Lord0fLight

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть стандартный код опубликованный на https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa393907%28v=vs.85%29.aspx
 
Он позволяет отследить запуск нового процесса и потом убить его:

Код:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent " _
 & " WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")
i = 0
Do While i = 0
 Set objLatestProcess = colMonitoredProcesses.NextEvent
 If objLatestProcess.TargetInstance.Name = "Download.exe" Then
 objLatestProcess.TargetInstance.Terminate()
 End If
Loop

Меняю "Download.exe" на "calc.exe" - работает, калькулятор не запускается больше чем на ~1 сек.
Но если ставлю "excel.exe" то Excel как ни в чём не бывало работает! В чем причина?
 
win 7 64 bit, Excel 2007.
 

Всего записей: 15 | Зарегистр. 29-09-2006 | Отправлено: 13:03 28-05-2016
Alexzzy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lord0fLight
"excel.exe" <> "EXCEL.EXE"

Всего записей: 1474 | Зарегистр. 10-07-2013 | Отправлено: 18:11 28-05-2016
Lord0fLight

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexzzy
Спасибо!  
 
Есть ли способ обратиться к книге, которая создана вновь появившимся процессом excel?

Всего записей: 15 | Зарегистр. 29-09-2006 | Отправлено: 00:07 29-05-2016
Dacor

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks
Благодарю за помощь! Спасибо огромное! Заработало с юникодом. Моя ошибка, текстовик был в неведомом формате, первый раз такое увидел. Аргумент -1 не сработал, юникод видится как китайские иероглифы, но мануал читал, почему так - непонятно.  Вариант "поменять те две строчки на одну такую" не пробовал, потому что между ними еще одна, и в какой последовательности они должны идти я не знаю.
Если запускать строкой HideWindowsUpdates.vbs test.txt то вылазит ошибка, необходимо вначале запустить cscript //H:Cscript.
 

Цитата:
никакие фреймворки не нужны  

На 7ке и правда не нужны, а на 8ке предлагает скачать и если отказаться то не работает. Засада(
 
И по поводу "И файл он берет только если запускать из командной строки из каталога. Если просто тыкнуть в батник, пишет что файл не найден. " Это я имел ввиду что обычно же запускаешь просто батник из каталога. И в этом случае текстовый файл с апдейтами не находится. Если из командной строки пробраться в каталог, то конечно всё работает.
 
А можно ли так сделать чтобы в текстовом файле с номерами, кроме номеров еще и были описания этих апдейтов, например через точкузпт? Или это великие сложности?

Всего записей: 1584 | Зарегистр. 02-08-2007 | Отправлено: 00:28 29-05-2016 | Исправлено: Dacor, 00:36 29-05-2016
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dacor
я так понимаю, что для работы с обновлениями нужны права админа, т.е надо запускать батник пкм > от админа.
но в таком случае текущая папка становится c:\wind0ws\system32 и файла test.txt или kb.txt в той папке нет.
если так, то надо в батнике писать полный путь до kb.txt , а в самом скрипте убирать мои добавки вычисляющие текущую папку
CurrentDirectory = fso.GetAbsolutePathName(".")
или если такой kb.txt только один, то просто его и записать в скрипт, и не надо будет его передавать параметром.
вообщем много вопросов, чтобы понять как лучше использовать этот скрипт.
 

Цитата:
А можно ли так сделать чтобы в текстовом файле с номерами, кроме номеров еще и были описания этих апдейтов, например через точкузпт?


Код:
While Not TextStream.AtEndOfStream
    objArgs.Add TextStream.ReadLine()
Wend
TextStream.Close

заменить на такой

Код:
Dim tempString, char
While Not TextStream.AtEndOfStream
    tempString = TextStream.ReadLine()
    char = Left(tempString, 1)
    ' WScript.Echo tempString
    IF char <> ";" AND char <> "" Then  
    objArgs.Add tempString
    End If
Wend
TextStream.Close

 
будет проверка на первый символ в строке ; или пустая строка (перевод каретки, без пробелов)
то есть комментарий будет, если в начале строки будет ;
;а кто это
2990214

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 14:02 29-05-2016
Dacor

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

Цитата:
или если такой kb.txt только один, то просто его и записать в скрипт, и не надо будет его передавать параметром.  вообщем много вопросов, чтобы понять как лучше использовать этот скрипт.  

Ваша правда, ведь запуская батник по ПКМ ему нельзя прописать в качестве аргумента тхт файл, и поэтому его надо жестко прописать внутри. Идея была вытащить все номера артиклей в отдельный файл и использовать дважды, для удаления и сокрытия. И в этом случае внешний файл будет один, просто в него что то будет добавляться/убираться.
 

Цитата:
будет проверка на первый символ в строке ; или пустая строка (перевод каретки, без пробелов)  то есть комментарий будет, если в начале строки будет ;  

Фантастика, просто супер! Не перестаю благодарить!
 
По поводу требования установки Фреймворка на 8.1 при запуске скрипта, нашел статью по этому вопросу. Возможно будет интересно ознакомиться, вот она  
https://blogs.msdn.microsoft.com/dsvc/2013/03/04/usage-of-net-collections-types-in-vbscript-is-not-supported-after-net-4-5/
вкратце - это из за использования ArrayList в модификации, и надо ставить Фреймворк, и это как верно подметил комментатор "This seems pretty crazy to me!"

Всего записей: 1584 | Зарегистр. 02-08-2007 | Отправлено: 20:11 29-05-2016
Numufar

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

Всего записей: 4 | Зарегистр. 01-06-2016 | Отправлено: 15:02 01-06-2016
king_stiven

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

Код:
MyProcedure  ">"
 
Sub MyProcedure(Par)
Do
  .......
Loop Until 2  Par  4

 
 
 
должно подставиться, как  
Loop Until 2  >  4

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 21:34 01-10-2016 | Исправлено: king_stiven, 21:34 01-10-2016
romby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть ли в сабже более-менее стандартный диалог списочного выбора или более-менее простой способ построения такого диалога?

Всего записей: 1792 | Зарегистр. 09-02-2006 | Отправлено: 20:42 08-10-2016
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть вот такая прога
http://forum.ru-board.com/topic.cgi?forum=35&topic=17670&start=0

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 02:59 09-10-2016
romby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Требуется найти (по имени) и удалить мьютекс. Подскажите, как это сделать на VBS?!

Всего записей: 1792 | Зарегистр. 09-02-2006 | Отправлено: 21:38 15-10-2016 | Исправлено: romby, 21:39 15-10-2016
a929151



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

Код:
Option Explicit
Dim BaseURL, url, RetText, i, f, J
wscript.echo Translate("hallo","de","ru") 'с немецкого на русский
wscript.echo Translate("hallo","de","hy") 'с немецкого на армянский
Function Translate(SrcText, LangFrom, LangTo)
BaseURL = "https://translate.google.ru/?tr=f&hl=en&ie=UT.."
url = UnEscape(Escape(BaseURL & "&text=" & SrcText & "&langpair=" & LangFrom & "|" & LangTo))
With CreateObject("MSXML2.XMLHTTP")
.Open "POST", URL, False
.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
.send 'послали запрос для перевода
While .ReadyState <> 4 'ждём загрузки в ответе сервера всех данных
DoEvents
Wend
RetText = .ResponseText
End With
'где-то в ответе сервера есть подобная строка [TRANSLATED_TEXT='ЇаЁўҐв';INPUT_TOOL_PATH=] , ну мы и выкусываем только нужный перевод фразы
i = InStr(RetText, "TRANSLATED_TEXT='") + Len("TRANSLATED_TEXT='") ': wscript.echo i
J = InStr(RetText, "INPUT_TOOL_PATH='") - 2 ': WScript.echo j
Translate = Mid(RetText, i, J - i)
End Function

 
Раньше код работал, сейчас выдаёт

Код:
---------------------------
Windows Script Host
---------------------------
Сценарий:    E:\Translate.vbs
Строка:    20
Символ:    1
Ошибка:    Недопустимый вызов или аргумент процедуры: 'Mid'
Код:    800A0005
Источник:     Ошибка выполнения Microsoft VBScript
 
---------------------------
ОК    
---------------------------
 

 
подскажите в чём проблема  
win 10 x64

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 01:25 29-10-2016
Открыть новую тему     Написать ответ в эту тему

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