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

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

Автор: kazavo4ka
Дата сообщения: 03.06.2011 05:14

Цитата:
А скрипт без указания в нем своего названия возможно создать?

это как? )
Автор: fire4x
Дата сообщения: 03.06.2011 10:43
kazavo4ka

Цитата:
Цитата:А скрипт без указания в нем своего названия возможно создать?

это как? )



Цитата:
Set oFso = CreateObject("Scripting.FileSystemObject")
oFso.DeleteFile "C:\myscript.vbs", True


OSADJAN уже привел примеры.

P.S. Еще одна задача:
Вывести окно с заголовком "заголовок1", содержимым "содержимое1" и двумя кнопками "да" и "нет".
Если нажать "да" - запускается файл 1.exe, если "нет" - 2.exe.
Вывести окно с заголовком "заголовок2", содержимым "содержимое2".

Автор: kazavo4ka
Дата сообщения: 03.06.2011 10:59

Цитата:
Вывести окно с заголовком "заголовок1", содержимым "содержимое1" и двумя кнопками "да" и "нет".
Если нажать "да" - запускается файл 1.exe, если "нет" - 2.exe.
Вывести окно с заголовком "заголовок2", содержимым "содержимое2".

http://msdn.microsoft.com/en-us/library/x83z1d9f(v=vs.85).aspx
Автор: fire4x
Дата сообщения: 03.06.2011 11:25
kazavo4ka, а на русском можете "чтиво" посоветовать?

P.S. Как его изменить, чтобы заголовок "Question:" сохранялся во всех окнах, а не только в начальном?

Код:
Dim wshShell, btn
Set wshShell = WScript.CreateObject("WScript.Shell")

' Call the Popup method with a 7 second timeout.
btn = WshShell.Popup("Do you feel alright?", 7, "Question:", &H4 + &H20)

Select Case btn
' Yes button pressed.
case 6
WScript.Echo "Glad to hear you feel alright."
' No button pressed.
case 7
WScript.Echo "Hope you're feeling better soon."
' Timed out.
case -1
WScript.Echo "Is there anybody out there?"
End Select
Автор: kazavo4ka
Дата сообщения: 03.06.2011 11:38
fire4x
http://www.script-coding.com/WSH/WshShell.html#3.2.

Это первое что нашел. Т.к. в этом плане русскоязычными ресурсами не пользовался, то больше, к сожалению, ничего не могу подсказать

Разве что поискать самостоятельно, метод называется Popup (обычно называют WshShell.Popup и т.д.).


Ну и может пригодится - катал тут для 1С'ников скрипт чтобы автоматически запускать 1С с нужными им параметрами и затем отправлять лог по почте (там и popup есть):
[more=Скрипт]'показываем пользователю окошки с надписями
set wshShell= Wscript.CreateObject("WScript.Shell")
intButton = wshShell.Popup ("Инициализированна процедура обмена данными между 1С 8 УАТ и 1С 8 УПП" & vbCrLf & _
" " & vbCrLf & _
"В зависимости от объема данных/загруженности сервера и т.д. обработка может длиться от 5 до 20+ минут"& vbCrLf & _
" "& vbCrLf & _
"Запускаем?", 0, _
"1С", 64+4)

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objReadFile = objFSO.OpenTextFile("\\fileserver\1c\temp\email_adresses.txt", 1)
strEmailAdress = objReadFile.ReadAll

Sub Procedure1
'запускаем 1С с нужными параметрами
wshshell.Run """c:\Program Files (x86)\1cv82\8.2.13.219\bin\1cv8.exe"" ENTERPRISE /DisableStartupMessages /WA- /Sserver1C\uat /NАдминистрированиеИБ /Pole /CОбменУАТУПП", 1, True
wshshell.Run """c:\Program Files (x86)\1cv82\8.2.13.219\bin\1cv8.exe"" ENTERPRISE /DisableStartupMessages /WA- /Sserver1c\upp /NАдминистрированиеИБ /Pole /CОбменУАТУПП", 1, True

'снова показываем пользователю окошки с надписями
set wshShell= Wscript.CreateObject("WScript.Shell")
wshShell.Popup "Обмен данными завершен" & vbCrLf & _
" " & vbCrLf & _
"Результат будет выслан вам по эл.почте после нажатия кнопки ОК", 60, _
"1С", 64

'находим отображаемое в AD DS имя пользователя (ФИО) и объявлеям его переменной, чтобы потом в письмо вставить
Set objADSystemInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)
FullUserName = objUser.displayName

'находим текстовые файл в заданной папке и объявлеям их переменной, чтобы потом в письмо вставить, а затем переместить в архивную папку
Const PATH = "\\fileserver\1c\temp\exchange_files"
Const DEST = "\\fileserver\1c\temp\Отчеты об обмене (архив)\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(PATH)
Set oFiles= oFolder.files

'процедура формирования и отправки письма

sBody = "Прикрепленный к письму файл содержит подробный реестр проблемных документов при загрузке из УАТ в УПП" & VbCrLf
sBody = sBody & " "& VbCrLf
sBody = sBody & "Обмен данными был инициализирован пользователем " & FullUserName & "" & VbCrLf
sBody = sBody & " "& VbCrLf
sBody = sBody & " "& VbCrLf
sBody = sBody & " "& VbCrLf
sBody = sBody & "Данное письмо составлено автоматически, отвечать на него не нужно." & VbCrLF
sBody = sBody & "Если у вас возникли какие-либо вопросы по обмену, то, пожалуйста, свяжитесь со службой технической поддержки 1С."

Const cdoSendUsingPickup = 1 'Отправить письмо с использованием локального smtp сервера
Const cdoSendUsingPort = 2 'Отправить письмо через сервер smtp в сети

Const cdoAnonymous = 0 'Без аутентификации
Const cdoBasic = 1 'Базовая аутентификация (открытым тесктом)
Const cdoNTLM = 2 'NTLM

Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Обмен УАТ - УПП"
objMessage.From = """1С"" <1c@ololo.ru>"
objMessage.To = strEmailAdress
For Each oFiles in oFolder.files
objMessage.AddAttachment PATH & oFiles.name
Next
objMessage.Textbody = sBody


'==Здесь прописываем конфигурационные параметры для связи с smtp сервером

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Имя или IP адрес smtp сервера
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.ololo.ru"

'Вид аутентификации, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic

'Имя пользователя на smtp сервере
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "1c@ololo.ru"

'Пароль
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "ПАРОЛЬ"

'Порт сервера (обычно 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

'Использовать SSL для подключения (False или True)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True

'Таймаут соединения в секундах (максимальное время пока CDO будет пытаться соедениться с smtp сервером)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 120

objMessage.Configuration.Fields.Update

'==Тут параметры заканчиваются

objMessage.Send

'перемещаем найденный ранее файл в ранее заданную папку для дальнейшего хранения
For Each oFiles in oFolder.files
fso.CopyFile PATH+oFiles.name, DEST, True
Next

'удаляем файлы из старого места
For Each oFiles in oFolder.files
fso.DeleteFile PATH+oFiles.name, True
Next
End sub


'определяем действия при нажатии кнопок yes и no, а также при простое
Select Case intButton
' Если жмакнули yes
case 6
Call Procedure1


'если жмакунли no
case 7
wscript.quit
End Select
[/more]
это вариант "полуавтоматический", легко заменяется на автоматический заменой параметров метода popup. Написан корявенько, но работает )
Автор: fire4x
Дата сообщения: 03.06.2011 12:16
kazavo4ka, у меня возник вопрос:
если использовать WshShell.Popup, то можно указать заголовок окна, но окно будет обязательно с кнопкой,
если использовать WScript.Echo, то кнопки не будет, он и заголовок не поставить вроде

а есть ли вариант окна без кнопок, но со заданием своего заголовка?
есть ли вариант окна без кнопок, но со заданием своего заголовка и таймаутом окна?

P.S. Спасибо за ссылки. Буду штудировать.
Автор: kazavo4ka
Дата сообщения: 03.06.2011 12:18

Цитата:
P.S. Как его изменить, чтобы заголовок "Question:" сохранялся во всех окнах, а не только в началь

Насколько я помню, echo не позволяет таких вещей делать. А вот MsgBox и тот же Popup могут, поэтому вместо Echo используй Popup.

Добавлено:

Цитата:
если использовать WshShell.Popup, то можно указать заголовок окна, но окно будет обязательно с кнопкой,

но ведь в echo тоже есть кнопка )


Цитата:
а есть ли вариант окна без кнопок, но со заданием своего заголовка?
есть ли вариант окна без кнопок, но со заданием своего заголовка и таймаутом окна?

имеешь ввиду чтобы только крестик у окна был и все? Если да, то не знаю как такое сделать в vbs. По-моему в vbscript это вряд ли можно провернуть. Нужно уже что-нибудь типа hta писать (либо пользоваться какими-нибудь сторонними библиотеками, либо смотреть на другой скриптовый язык - тот же power shell, и т.д.).
А вот таймаут в popup'е задается легко
Автор: fire4x
Дата сообщения: 03.06.2011 12:34

Цитата:
но ведь в echo тоже есть кнопка )

Упс, есть


Цитата:
имеешь ввиду чтобы только крестик у окна был и все?

имел ввиду как popup, но чтобы "не на что нажать" (обычное сообщение без подтверждения)
Автор: kazavo4ka
Дата сообщения: 03.06.2011 12:41

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

т.е. насколько я понял, такое же окно как при использовании echo нужно - окно с заголовком + текст + кнопка ок, по нажатию на которую окошко просто закрывается

если я все правильно понял, то в popup на кнопку "ок" повесь холостое действие или exit. И все - получится тоже самое что и в echo
Автор: fire4x
Дата сообщения: 03.06.2011 13:37
Возможно ли создание окон со своими кнопками - типа вопрос и варианты ответа на выбор?

P.S. Какие скрипты кроме ВБС можно запустить на Хрюше и выше без установки дополнительных библиотек и иже с ними?
Автор: ComradG
Дата сообщения: 03.06.2011 14:38

Цитата:
Возможно ли создание окон со своими кнопками - типа вопрос и варианты ответа на выбор?
гляди в сторону PowerShell (на XP устанавливается опционально + требует Framework), а на cscript создать свои собственные окна у тебя не получится.

Цитата:
А скрипт без указания в нем своего названия возможно создать?

Код: Wscript.ScriptName 'вернет только имя скрипта
Wscript.ScriptFullName 'вернет полный путь до скрипта
Автор: fire4x
Дата сообщения: 05.06.2011 17:20
В чем разница между:


Цитата:
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile WScript.ScriptFullName, 0

и
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile WScript.ScriptFullName, True
Автор: smirnvlad
Дата сообщения: 05.06.2011 17:37
fire4x
с True удалит даже если у файла установлен атрибут Только для чтения, с False(0) - нет
Автор: fire4x
Дата сообщения: 05.06.2011 18:40
А как будет выглядеть скрипт, который удалит не только себя, но и папку в которой он лежит?
Автор: OSADJAN
Дата сообщения: 05.06.2011 19:18
Точно вирусняк делаешь. На просторах интернета примеров полно
Вот первый попавшийся, но Dr.Web его отлавливает:

Код: Option Explicit

Dim objWshShell
Dim objFSO
Dim strParentFolder

Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strParentFolder = objFSO.GetParentFolderName(WScript.ScriptFullName)
objWshShell.CurrentDirectory = objFSO.GetParentFolderName(strParentFolder)
objFSO.GetFolder(strParentFolder).Delete True

Set objFSO = Nothing
Set objWshShell = Nothing

WScript.Quit 0
Автор: fire4x
Дата сообщения: 05.06.2011 20:00
OSADJAN

Цитата:
Точно вирусняк делаешь. На просторах интернета примеров полно

А вот ты, видать, в вирусах хорошо разбираешься...

Цитата:
Код:Option Explicit

Dim objWshShell
Dim objFSO
Dim strParentFolder

Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

strParentFolder = objFSO.GetParentFolderName(WScript.ScriptFullName)
objWshShell.CurrentDirectory = objFSO.GetParentFolderName(strParentFolder)
objFSO.GetFolder(strParentFolder).Delete True

Set objFSO = Nothing
Set objWshShell = Nothing

WScript.Quit 0

Можно расписать какие строки за что отвечают?

Автор: OSADJAN
Дата сообщения: 06.06.2011 01:02

Цитата:
Можно расписать какие строки за что отвечают?


Код: Option Explicit
'--------------------
'объявляем переменные
Dim objWshShell
Dim objFSO
Dim strParentFolder
'----------------------
'создаём объекты
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'----------------------------
'работа с именами
strParentFolder = objFSO.GetParentFolderName(WScript.ScriptFullName) 'полное имя, т.е. - путь + имя: (WScript.ScriptFullName)
objWshShell.CurrentDirectory = objFSO.GetParentFolderName(strParentFolder) 'путь к папке скрипта"strParentFolder)
objFSO.GetFolder(strParentFolder).Delete True 'удаление
'----------------------
'удаляем объекты
Set objFSO = Nothing
Set objWshShell = Nothing
'--------------------------
'закрываем скрипт
WScript.Quit 0
Автор: fire4x
Дата сообщения: 17.06.2011 20:29
Нужен скрипт для транслитерации/смены кодировки в файле.
Автор: ComradG
Дата сообщения: 17.06.2011 22:33
fire4x
если из какой-то конкретной кодировки в другую, то провернуть оное можно, но для всех кодировок разом - едва ли. помнится писал я конвертер на jscript (utf-8 в koir-8), так код занял не один десяток строк. может это подойдет?
Автор: fire4x
Дата сообщения: 17.06.2011 23:30
ComradG

Цитата:
для всех кодировок разом - едва ли

Т.е. чисто теоретически это возможно, но слишком трудоемко?

Цитата:
если из какой-то конкретной кодировки в другую, то провернуть оное можно

Насчет какой-то конкретной кодировки я еще не определился.

Цитата:
помнится писал я конвертер на jscript (utf-8 в koir-8), так код занял не один десяток строк

Он у вас сохранился? Интресно было бы взглянуть.
Автор: igor_andreev
Дата сообщения: 18.06.2011 00:22

Цитата:
Он у вас сохранился? Интресно было бы взглянуть.

http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=680#16


Автор: fire4x
Дата сообщения: 18.06.2011 19:30
igor_andreev

Цитата:

Код:
If WScript.Arguments.Count = 2 Then
Set InputStream = CreateObject("ADODB.Stream")
InputStream.Type = 2
InputStream.CharSet = "utf-8"
InputStream.Open
InputStream.LoadFromFile(WScript.Arguments.Item(0))
InputFileContents = InputStream.Readtext
InputStream.Close
Set InputStream = Nothing
Set OutputStream = CreateObject("ADODB.Stream")
OutputStream.CharSet = "windows-1251"
OutputStream.Mode = 3
OutputStream.Open
OutputStream.WriteText InputFileContents
OutputStream.SaveToFile(WScript.Arguments.Item(1))
OutputStream.Close
Set OutputStream = Nothing
Else
Wscript.Echo "Usage: utf8towin.vbs source-file destination-file"
End If

Wscript.Quit



Добавлено:
Весь список кодировок, поддерживаемых ОС и которые, соответственно можно использовать в качестве InputStream.CharSet и OutputStream.CharSet, есть в реестре HKEY_CLASSES_ROOT\MIME\Database\Charset, можно извратиться и сделать универсальный перекодировщик.
Автор: ComradG
Дата сообщения: 19.06.2011 19:53
fire4x

Цитата:
vbs не знаком вообще, поэтому объясните по-проще.
как объяснить проще то, что требует хотя бы базовых знаний, что такое потоки? InputStream - входящий поток данных, OutputStream - исходящий; CharSet - выбор кодировки и т.д.
теперь по поводу скрипта, который я некогда писал - если найду, то отправлю. прошу прощение за оффтоп.
Автор: gap5
Дата сообщения: 20.06.2011 14:55
Накидайте скрипт, кому не сложно, задача в следующем:

запуститься и сидеть резидентно,
каждые 15 минут проверять, есть ли в процессах *.scr (вроде все хранители экрана такое расширение имеют?), если его нет то запустить экзешник с параметрами, если есть, то ждать еще 15 минут и так покругу...


Кстати, правильно понимаю, что при этом "On error resume next", в случае любых ошибок юзер никакого интерактива не увидит?

Автор: gap5
Дата сообщения: 21.06.2011 17:05
Ну хотя бы сориентируйте по отслеживанию в процессах *.scr
Автор: GepardSD
Дата сообщения: 23.06.2011 00:42
Подскажите как в операционной системе Windows XP: 1) автоматически создать папки с порядковым номером от 1 до 999 и 2) поместить в каждую папку пустой файл index.php. С первой задачей я вроде бы справился:
==================
Option Explicit
Dim FSO, i
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 999
FSO.CreateFolder i
Next
Set FSO = Nothing
WScript.Quit
==================
а создать файл в каждой папке не знаю как. Поделитесь.
Автор: 0fantom
Дата сообщения: 23.06.2011 11:46
Подскажите, как на сервере (win2003) определить имя клиента запустившего сеанс RDP? (с какого компа зашли в терминал) Заранее спасибо.
Автор: quakerock
Дата сообщения: 23.06.2011 12:36

Цитата:
Подскажите как в операционной системе Windows XP: 1) автоматически создать папки с порядковым номером от 1 до 999 и 2) поместить в каждую папку пустой файл index.php. С первой задачей я вроде бы справился:
==================
Option Explicit
Dim FSO, i
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 999
FSO.CreateFolder i
Next
Set FSO = Nothing
WScript.Quit
==================
а создать файл в каждой папке не знаю как. Поделитесь.


Вот такой вариант

Код: Option Explicit
Dim FSO, i, f, fc, f1
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 9
FSO.CreateFolder i
Next
Set FSO = Nothing

Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("D:\")
Set fc = f.SubFolders
For Each f1 in fc
f1.CreateTextFile("Привет.php")
Next
WScript.Quit
Автор: efrik
Дата сообщения: 23.06.2011 14:07


Цитата:
Подскажите, как на сервере (win2003) определить имя клиента запустившего сеанс RDP? (с какого компа зашли в терминал) Заранее спасибо.



Код: set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "Вы зашли с " & WshShell.ExpandEnvironmentStrings("%ClientName%")
Автор: Evgeny972
Дата сообщения: 23.06.2011 15:38
GepardSD

Цитата:
Option Explicit
Dim FSO, i
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 999
FSO.CreateFolder i
Next
Set FSO = Nothing
WScript.Quit
==================

FSO.CreateFolder i заменить на Set CurFolder = FSO.CreateFolder i
А дальше, по моему, ясно: ты имеешь объект Folder, можешь получить путь к нему, например:
CurFolderPath = CurFolder.Path
или создать файл CreateTextFile Method

Цитата:
object
Required. Always the name of a FileSystemObject or Folder object.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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