Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование "удобняшек" на VBScript

Автор: Begmart
Дата сообщения: 17.05.2003 21:27
Предлагаю в этой теме задавать вопросы по сабжу и, соответственно, отвечать на них.

Для тех, кто хочет делать всё средствами операционной системы скажу, что VBS - средство винды . Встроенное средство, надо думать. Мануал (на английском, конечно) наличествует здесь (600 КБ).

Зачем всё это надо? Пример № раз: вам надо при каждом запуске/шатдауне системы экспортировать ветвь реестра и сохранять её куда-нибудь, а потом ещё и удалять слишком старые ветви. Пример № два: простой механизм резевного копирования (скажем, раз в день копировать имейджы, созданные другими программами, и опять-таки удалять старые версии). Пример № 3: хотите вы скачать кучу картинок с сайта, а называются они типа 001.jpg, 002.jpg, 003.jpg. Во всех этих примерах может помочь сторонняя программа, занимающая место, оставляющая навеки следы в реестре. Оно вам надо? А вообще, VBS ещё много чего может, прежде всего, работа с MS Office, но это уже отдельная песня...

Кстати, хорошо бы скачать MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. Хотя это нужно для не самых тривиальных скриптов. Для самых сгодится и то, что есть, я уверен.

Поехали?
Автор: v0yager
Дата сообщения: 18.05.2003 17:56
2 Begmart

Поехали

2 All

По адресу http://www.microsoft.com/technet/treeview/default.asp?url=/technet/scriptcenter/default.asp находится большая библиотека скриптов, Microsoft TechNet Script Center. Библиотеку можно использовать и как справочное пособие, и для изучения возможностей VBS.

На втором ресурсе, Tales from the Script, можно поближе познакомиться с практическими вопросами скрипто-строениями. Публикации в колонке выходят с частотой один раз в месяц.

Автор: Guderian
Дата сообщения: 19.05.2003 10:12
Поддерживаю. Только хочется добавить следующее
- не только vbs, но и js, хотя любители последнего должны быть готовы к тому, что работать он будет медленнее, да и реализация ООП (если его можно таковым назвать) несколько отличается. Хотя, при желании/необходимости их можно комбинировать. Плюс к этому, некоторые маньяки могут использовать Perl, rexx и т.д.
- в обязательном порядке стоит затронуть wmi/adsi, если есть желание осуществлять полезные в системном плане функции
-весьма полезным видится и возможность взаимодействия с большинством офисных приложений
- если у "полезняшек" имеет место гуй, то вспомним про hta

Из ссылок вспоминается если только http://www.serialscripter.com/. Помнится у него достаточно богатый раздел линков был.
Автор: der
Дата сообщения: 05.06.2003 15:10
Здравствуйте!
Подскажите, пож-та, каким образом средствами VBS можно узнать версию (размер) файла?
Автор: v0yager
Дата сообщения: 05.06.2003 15:16

Код: Function ShowFileAccessInfo(filespec)
Dim fso, f, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filespec)
s = f.Path & "<br>"

s = s & "Size: " & f.Size & "<br>"

s = s & "Created: " & f.DateCreated & "<br>"
s = s & "Last Accessed: " & f.DateLastAccessed & "<br>"
s = s & "Last Modified: " & f.DateLastModified
ShowFileAccessInfo = s
End Function
Автор: der
Дата сообщения: 06.06.2003 08:14
не работает

Set oExec = WshShell.Exec("Msg.vbs")

Говорит, что Объект не поддерживает это свойство или метод: 'WshShell.Exec'

Если сделать
Set oExec = WshShell.Run("Msg.vbs"),
то Msg.vbs запускается, но после выдает ошибку:

Требуется объект: 'WshShell.Run(...)'

Начало скрипта выглядит так:

Код:
Dim FSO, WshShell, s1, s2, f, f1,source_path, dest_path, oExec
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
Set oExec = WshShell.run("msg.vbs")
Автор: Begmart
Дата сообщения: 06.06.2003 09:49
Run это процедура, а не функция, поэтому она ничего не возвращает (вообще ничего), а когда ты пытаешься сделать Set oExec = WshShell.Run("msg.vbs"), то соответственно слева стоит переменная, а справа пусто, совсем-совсем пусто, потому и ошибка. Соответственно, вот так будет правильно:


Код:
Dim FSO, WshShell, s1, s2, f, f1,source_path, dest_path
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
WshShell.run("msg.vbs")
Автор: der
Дата сообщения: 06.06.2003 10:16
так мне надо потом этот скрипт msg.vbs сделать Terminate.
Потому переменную и ставлю.
Автор: Begmart
Дата сообщения: 06.06.2003 11:25
Тогда не получится, скорее всего. Почему нельзя объединить в один скрипт?
Автор: v0yager
Дата сообщения: 06.06.2003 11:34
Begmart
Окна информационных сообщений (wscript.exe, WScript.Echo) являются модальными. der сообщение нужно сначала показать, а потом убрать. Вывод сообщения при этом не должен останавливать работу скрипта.

der

message.vbs

Код: WScript.Echo "Страшное и ужастное предупреждение "
Автор: der
Дата сообщения: 06.06.2003 12:20
v0yager

вариант с exec:
не поддерживается метод или свойство



Автор: Begmart
Дата сообщения: 06.06.2003 12:25
Ну значит так .

Правда я так и не придумал, где можно использовать этот подход. der, расскажи, если не влом, зачем тебе выводить сообщение в отдельном скрипте?
Автор: v0yager
Дата сообщения: 06.06.2003 12:39
der

В какой конфигурации (хард и софт) ты запускаешь скрипты?

Перед постом скриптов я их спроверил на своей машине (Win2K PRO, SP3). Все работает. Версия runtime родная, обновления к ней я не ставил.
Автор: der
Дата сообщения: 06.06.2003 13:17
ест экзешник, с которым работают почти все юзеры в сетке.
Он периодически обновляется.
Сейчас, чтобы запустить его, люди запускают бат файл, который переписывает им всегда свежак с сервака на локальный комп, и потом запускает.
я хочу это дело сделать в WSH. И чтобы он не всегда тупо переписывал, а только если размеры файла не совпадают.
В момент переписывания, у людей на экране ничего не происходит.
вот я и хочу, чтобы перед началом загрузки (если она нужна) повесить окно "ПОДОЖДИТЕ, ПОЖАЛУЙСТА...", а потом его снять.
Мне v0yager посоветовал делать это через запуск второго скрипта, и его терминирование.
А у тебя есть другие мысли?

Добавлено

Цитата:
Перед постом скриптов я их спроверил на своей машине (Win2K PRO, SP3). Все работает. Версия runtime родная, обновления к ней я не ставил.


аналогично! )) Только W2K AS
Автор: v0yager
Дата сообщения: 06.06.2003 13:50
der

Опубликуй в посте текст скрипта, в котором есть вызов Exec.
Автор: der
Дата сообщения: 06.06.2003 14:54

Код:
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

' показываем сообщение
Set oExec = WshShell.Exec("wscript.exe msg.vbs")

MsgBox "Как буд-то мы здесь что-то делаем!"

' убирает сообщение
oExec.Terminate
Автор: v0yager
Дата сообщения: 06.06.2003 15:09
der

в интере нашел ссылку на похожую ситуацию: здесь. Тоже проблемы с .Exec.


После всего описанного в предыдущих постах можно сделать вывод - сбой происходит в WSH scripting host. Попробуй загрузить последнюю версию runtime с сайта ms и установить последний (как минимум второй) сервиспак.

В данном случае баг не в скрипте.
Автор: der
Дата сообщения: 06.06.2003 16:44
понял. спасибо.

а можно ли тоже самое решить другим способом?
я имею ввиду просьбу немного подождать? Ну или хотя бы стандартное окно копирования файла?
Автор: v0yager
Дата сообщения: 06.06.2003 17:03
der

в WSH есть два хоста, которые выполняют скрипты: wscript.exe, cscript.exe. На конструкцию Wscript.Echo каждый из них реагирует по своему:
- wscript - выводит диалоговое модальное окно и ждет его закрытия
- cscript - выводит текст в stdout и интерпретирует скрипт дальше

Для решения твоей задачи есть две основные схемы:

1. Вывод уведомления в консольном виде (а-ля echo в старых ДОСовских бат-файлах). Текста можно написать много, псевдографика, и т.п. Для запуска скрипта нужно использовать cscript.exe, текст выводить через WScript.Echo.

2. Вывод уведомления в виде окна Win GUI. Тогда нужно применять уже описанный в предыдущих постах алгоритм. Правда, допустимы вариации. Вместо вызова другого скрипта с выдачей сообщения можно вызвать любую программу (возможно написанную специально для этого случая, в том числе и с анимацией типа копировать файл). Вызов скрипта - через wscript.exe

Но в 2. алгорим все равно остается: Exec, получение объекта со ссылкой на процесс, выполнения работы, закрытие процесс через Terminate. Алгоритм не зависит от того, каким образом ты выводишь уведомление пользователю.
Автор: der
Дата сообщения: 07.06.2003 08:55
Ну, все!!!
Спасибо большое!
После того, как скачал MS Scripting 5.6 все заработало!

Автор: Sergey_AV
Дата сообщения: 31.03.2004 08:51
All

Люди! Подскажите, плииз, как максимально простым способом скомпилить vbs-скрипт в .ехе-файл? Про Вижуал Студию знаю, хотелось без оной, попроще . Это возможно?

ЗЫ. Я не вирус пишу, просто есть некий процесс, нуждающийся в автоматизации; хотелось бы запретить посторонним людям вносить изменения в vbs-скрипт...
Автор: unhappy
Дата сообщения: 31.03.2004 17:30
Есть ведь некий encoder для скриптов. На microsoft'е лежит рядом с прочими фичами для написания скриптов. Точно не помню, но помоему после него очень трудно вносить какие-то изменеия в скрипт
А проще имхо если под XP или 2k права только на чтение поставить, а редактирование запретить. Это надежнее. А-то .exe можно и переименовать, и удалить...
Автор: Sergey_AV
Дата сообщения: 01.04.2004 06:06
unhappy

Цитата:
Есть ведь некий encoder для скриптов. На microsoft'е лежит рядом с прочими фичами для написания скриптов. Точно не помню, но помоему после него очень трудно вносить какие-то изменеия в скрипт

Знаю, пока именно на нем и остановился . Но проблема имеет и другую сторону - этот же самый скрипт (аналогичный) надо заводить и под 9х. А под 9х этот VBS просто так не заводится - надо ставить всякие WSH, WMI, etc. И ставить это все автоматически, т.е. .ехе было бы идеальным решением...
Цитата:
А проще имхо если под XP или 2k права только на чтение поставить, а редактирование запретить. Это надежнее. А-то .exe можно и переименовать, и удалить...

Это все на диске находится; так что о правах речь не идет . Беда вся в том, что слишком много людей доступ к этому диску имеет, не хотелось бы его использование в нехороших целях...
Автор: unhappy
Дата сообщения: 01.04.2004 22:05
Тогда имхо единтсвенный вариант - переписать в visual studio - и скомпилировать .exe - в инете люди сабж обсуждали и вроде как определенно заявили что сие невозможно.
В частности вот здесь: http://www.experts-exchange.com/Programming/Q_20868116.html
Автор: Blins
Дата сообщения: 12.04.2004 10:21
Люди, кто знает как в окне вывести сообщение с разбиением на строки (что использовать - Popup или Echo и т.п. не важно). Хотелось-бы видеть:
1. Файл asjhfgvv.sys - 100 Kb
2. Файл ghfgh.com - 10b
3...
Какой символ запихнуть в строку, чтобы перейти на следующую, или это невозможно?

Добавлено
Вопрос снят - chr(13) помогло...
Автор: Sav
Дата сообщения: 14.04.2004 11:50
Подскажите как быузнать вставлен ли сидюк в драйв из скрипта? Лучше конечно просто из .cmd, но можно .vbs
Автор: Sergey_AV
Дата сообщения: 14.04.2004 13:22
Sav

Цитата:
Подскажите как быузнать вставлен ли сидюк в драйв из скрипта?

Я делаю так:
' Определяем букву CDROM по свойствам дисков
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
Dim dc, d
Set dc = fso.Drives
Dim LCDROM
LCDROM = ""
For Each d in dc
If d.DriveType = 4 Then
LCDROM = d.DriveLetter
Exit For
End If
Next

' Проверка, что CDROM обнаружен. Если нет, то сообщение и конец работы
If LCDROM="" Then
d=MsgBox("Не обнаружен CDROM", VbExclamation, "OPT_1")
Else

End If

Не совсем, правда то, но очень близко .
Автор: EgOrus
Дата сообщения: 28.11.2004 00:09
Как с помощью vbs можно создать окно без кнопок?
Мне нужно чтобы в процессе выполнения скрипта во время определенных операций показывалось окно с разным текстом но без кнопок.
Автор: Dimasty
Дата сообщения: 30.11.2004 09:17
Кстати, на m$_technet вся их коллекция лежит в CHM, удобно забрать и пользоваться...
Автор: Outsider
Дата сообщения: 09.12.2004 16:04
Всем привет, хотел спросить, есть ли способ скачать файл *.exe по протоколу http при помощи VBS? Один метод есть точно:

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "http://server.ru/folder/file.exe", 1
WScript.Sleep 2000
WshShell.SendKeys("{ENTER}")

в итоге работает, но, если скриптик стартует в фоновом режиме (например через назначенные задания) то все останавливается - не воспринимается

WshShell.SendKeys("{ENTER}")

поскольку активного окна нету. Есть ли способ работать в данном случае как с фаловой системой???
Из разряда

Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "C:\file.exe" , "D:\Archive\" , OverwriteExisting

может кто поделиться умной мыслью???

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

Предыдущая тема: Работа в Delphi c CryptoApi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.