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

» Программирование "удобняшек" на VBScript (Часть 2)

Автор: idiMAN
Дата сообщения: 24.07.2014 14:28
slime555

Организуй рекурсию по типу

Код:
Set oDomain = GetObject("LDAP://DC=fakedomain,DC=local")
For Each item in oDomain
ListUsers(item.adspath)
Next

Function ListUsers(oObj)
On Error Resume Next
Set thing = GetObject(oObj)
For Each child In thing
If child.class = "user" Then
тут твои сравнения и отправка почты
End If
If child.class = "organizationalUnit" or child.class = "container" or _
child.class = "builtinDomain" Then ListUsers(child.adspath)
Next
End Function
Автор: inile
Дата сообщения: 30.07.2014 15:12
zidiMAN, спасибо большое. В моем случае достаточно было запускать WScript.exe, с vbs как параметр.
Автор: 1Ulyana1
Дата сообщения: 01.08.2014 09:33
Добрый день. Не поможете написать скрипт вывода изображения (любого формата) по правой стороне экрана.

Запускается скрипт, отображается изображение, через 5 сек завершается. Возможно ли так выполнить при помощи vbs скрипта. Изображение находится рядом со криптом при запуске.
Автор: unreal666
Дата сообщения: 01.08.2014 09:44
1Ulyana1
а свой нерабочий скрипт выложить, чтобы посмотреть чего да как?
Автор: 1Ulyana1
Дата сообщения: 01.08.2014 09:50
[more] Простите. я не умею(( есть только на autoit найденные примеры.

И вот что еще в сети удалось найти:


Код:
' Открывает на 10 секунд изображение под курсором (jpeg;jpg;gif;bmp)
' можно открывать несколько по очереди
' параметры %P%N

'==================== Изменяемые пути ===================================
FuncPlus = "%COMMANDER_PATH%\Scripts\Include\FunctionsPlus.vbs"
'========================================================================
If WScript.Arguments.Count = 0 Then
MsgBox "Не хватает параметров! Должен прописан Один параметр %P%N",_
vbOKOnly & vbInformation, "Кратковременый просмотр изображений"
WScript.Quit
End If

FuncPlus = CreateObject("WScript.Shell").ExpandEnvironmentStrings(FuncPlus)
strPictFile = WScript.Arguments(0)
Set FSO = CreateObject("Scripting.FileSystemObject")
strArgExt = LCase(FSO.GetExtensionName(strPictFile))
If InStr(";jpeg;jpg;gif;bmp;png;", ";" & strArgExt & ";") = 0 Then WsEnd
If Not FSO.FileExists(strPictFile) Then WsEnd
Execute FSO.OpenTextFile(FuncPlus).ReadAll

Set objShell = CreateObject("Shell.Application")
strArgParent = FSO.GetParentFolderName(strPictFile)
strArgFileName = FSO.GetFileName(strPictFile)
Set objFolder = objShell.NameSpace(strArgParent)
Set objItem = objFolder.ParseName(strArgFileName)
strDimensions = objFolder.GetDetailsOf(objItem, 31) ' размер изображения

If InStr(strDimensions, " x ") > 0 Then
strSize = Replace(strDimensions, " x ", ", ") : strSize = Mid(strSize,2,Len(strSize)-2)
ii = InStr(strSize, ",") : w = Left(strSize, ii - 1) + 20 : h = Mid(strSize, ii + 1) + 20
strSize = w & ", " & h
End If

Text = "<HTML>" & vbNewLine &_
"<HTA:Application" & vbNewLine &_
"Caption=" & Chr(34) & "no" & Chr(34) & vbNewLine &_
"Borderstyle="&Chr(34)&"complex"&Chr(34) & vbNewLine &_
"Scroll=" & Chr(34) & "no" & Chr(34) & ">" & vbNewLine &_
"<SCRIPT Language=" & Chr(34) & "VBScript" & Chr(34) & ">" & vbNewLine &_
"Sub Window_OnLoad" & vbNewLine &_
"Window.resizeTo " & strSize & vbNewLine &_
"idTimer = window.setTimeout(" & Chr(34) & "CloseShop" & Chr(34) &_
", " & CStr(10 * 1000) & ", " & Chr(34) & "VBScript" & Chr(34) & ")" & vbNewLine &_
"End Sub" & vbNewLine &_
"Sub CloseShop" & vbNewLine &_
"window.clearTimeout(idTimer)" & vbNewLine &_
"self.close()" & vbNewLine &_
"End Sub" & vbNewLine &_
"</SCRIPT>" & vbNewLine &_
"<BODY background=" & Chr(34) & strPictFile & Chr(34) & ">" & vbNewLine &_
"</BODY>" & vbNewLine &_
"</HTML>"
strHTAname = FFNoExistCount(FSO.GetSpecialFolder(2) & "\Temp0.hta")
FSO.CreateTextFile strHTAname, True
FSO.GetFile(strHTAname).OpenAsTextStream(2, 0).Write Text

CreateObject("WScript.Shell").Run "mshta.exe " & Chr(34) & strHTAname & Chr(34), 0, True
FSO.DeleteFile strHTAname

Set objFolder = Nothing : Set objItem = Nothing : Set objShell = Nothing : WsEnd
Sub WsEnd : Set FSO = Nothing : WScript.Quit : End Sub
Автор: Laserje18
Дата сообщения: 03.08.2014 01:22
Всем привет!
Подскажите, как реализовать "умную" приостановку исполнения скрипта, зависящую от размера файла filename.
Дело в том, что если дать мало времени на копирование файла filename и продолжить скрипт дальше, то копирование прерывается.

Код: zipname="c:\test.zip"
filename="c:\test.txt"
CreateObject("Scripting.FileSystemObject")_
.CreateTextFile(zipname, True)_
.Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
CreateObject("Shell.Application")_
.NameSpace(zipname).CopyHere filename,&H4&
WScript.Sleep 500
Автор: Tilks
Дата сообщения: 03.08.2014 10:30
Laserje18

Код: zipname="c:\test.zip"
filename="c:\test.txt"
CreateObject("Scripting.FileSystemObject")_
.CreateTextFile(zipname, True)_
.Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)
Set objShell = CreateObject("Shell.Application")
objShell.NameSpace(zipname).CopyHere filename,&H4&

Do Until objShell.NameSpace(zipname).Items.Count = 1
WScript.Sleep 500
Loop
Автор: Laserje18
Дата сообщения: 03.08.2014 11:59
Tilks
Спасибо! Идеально работает.
Автор: msmih
Дата сообщения: 20.08.2014 06:17
del. вопрос снят
Автор: ppoiuytre
Дата сообщения: 22.08.2014 13:53
Всем привет!
Есть вопрос по приему параметров *.vbs"ом из виндовс сервиса.
Например есть скрипт, который реализует некий функционал, (запуск скрипта автоматизирован). Так вот, появилась необходимость динамически параметры, с которыми запускается скрипт, менять.
(параметры вида {12345AB} 1 {67890DC} 2)
// может возможно выполнять GET запрос, но как это реализуется?
если можно с примером.

Всем добра!
Автор: unreal666
Дата сообщения: 22.08.2014 14:04
ppoiuytre
что-то нифига не понятно. Кто должен менять эти параметры и где? И причем тут get-запросы?
Автор: Tilks
Дата сообщения: 22.08.2014 14:43
ppoiuytre
http://forum.ru-board.com/topic.cgi?forum=33&topic=1601#2
Автор: ppoiuytre
Дата сообщения: 22.08.2014 15:07
[more] to unreal666
Пробую объяснить)
Значит есть ПО в котором реализован UI, где можно добавить скрипт и руками(это важно) прописать параметры выполнения скрипта.

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

Вопрос заключается в том, как изменить реализацию получения параметров, что бы скрипт обращался не к параметрам, указанным "возле сктрипта", а именно к переменной видимой из сервиса.(со строкой содержащей все теже параметры)

Сейчас реализовано так:

Dim arguments : arguments = CLng(WScript.Arguments.Count/5)
ReDim required( arguments )
for i = 0 to arguments
required(i) = CLng(WScript.Arguments.Item(i))


----------------
to Tilks - вопрос именно о вызове параметров из скрипта,
но не запускать на выполнение сторонней программой.
Скрипт и сервис должны работать независимо друг от друга.


Прошу прощения, если немного сумбурно и неточно описал условие задачи. [/more]
Автор: unreal666
Дата сообщения: 22.08.2014 17:09
ppoiuytre
все равно непонятно.
Лучше опиши цепочку вызов (вместе с параметрами) эти прог/скриптов как на текущий момент (и какой должен быть результат). И тоже самое, но как хочется.
Автор: ppoiuytre
Дата сообщения: 22.08.2014 17:35
[more] спасибо за интерес к моему вопросу, но боюсь я могу оперировать только общей терминологией.
еще раз постараюсь донести мысль:
[more] есть серверное ПО - будем называть его ПО
В ПО есть возможность, на каком то этапе добавить скрипт с параметрами.


Сейчас:
В ПО добавлен скрипт + параметры (их чтение в скрипте реализовано как из командной строки )
Все работает.
но если нужно поменять параметры скрипта это нужно делать руками + на само принятие решения и изменение параметров уходит время.

Чего хочется:
автоматизировать изменение параметров передаваемых скрипту независимо от работы самого скрипта.
т.е:
1. Создать приложение, зарегистрировать его как службу в виндовс. Это приложение оценивало бы актуальность данных например раз в 30 сек. и при обращении к нему выдавало аналог строки передаваемых параметров(из изначального варианта)
2. Изменить присвоение параметров в скрипте(т.е. что бы параметры брались не как переданные, а возвращались после обращения к этой службе).

Т.е.
WScript.Arguments.Count
WScript.Arguments.Item
нужно заменить на что то что бы вернуло параметры из службы.

пы.сы реализация службы тут не затрагивается, интересно как модифицировать скрипт для обращения к конкретной службе за конкретными данными [/more] [/more]
Автор: unreal666
Дата сообщения: 22.08.2014 17:50
ppoiuytre
Эм.
Т.е. надо


Цитата:
какое-то ПО -> запускает скрипт без параметров -> скрипт запрашивает параметры у какой-то службы

?

только непонятно нафига служба нужна именно как постоянно запущенная служба, а не обычное ПО, если ее целью будет только отдавать какие-то данные по запросу из скрипта. Т.е. до запроса она нафиг не нужна будет.

Добавлено:
а вообще для подобного скорее всего надо юзать stdin/stdout.
Автор: ppoiuytre
Дата сообщения: 22.08.2014 18:02
unreal666

да, в цитате правильно написано)

служба нужна, ибо она проводить пересчет будет раз в 30 - 50 сек всегда когда работает сервер, на котором ее запустят.

а обращения из скрипта к этой службе могут быть 10ть раз в сек или раз в 2 мин, причем задержка ответа от службы критична (нет возможности реализовать функционал пересчета в самом скрипте)

поэтому выбор сделан в сторону такой конфигурации (при условии что ее удастся реализовать).

----
пока печатал, увидел про stdin/stdout, спасибо, посмотрю
Автор: msmih
Дата сообщения: 26.08.2014 18:45
как правильно определить начало строки?
нужно найти "начало строки & -"
vbCrLf - не всегда срабатывает
chr(13) - не всегда срабатывает

файл самый что ни на есть простой
Автор: AVanti473
Дата сообщения: 16.09.2014 13:21
Здравствуйте! Есть такой вот мудрёный юникодовский ключ реестра:


Код: Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\Ey4w    h-
`{{]
"D1"=dword:00000001
"D2"="54332236444D2E3C"
"D3"="54332236444D2E3C"
"R1"="B4F7879D849025AE9598938583480773176E5F04090B531A0F6C"
"R2"="53375447354D5A4C4B383B4D244B2542452826442449453D5134"
Автор: Tilks
Дата сообщения: 16.09.2014 14:35
AVanti473
ChrW(), UnEscape()

Код: 'http://zone.ni.com/reference/en-XX/help/370858K-01/vbs/methods/vbs_method_unescape_globalobj/
'http://zone.ni.com/reference/en-XX/help/370858K-01/vbs/methods/vbs_method_chrw_globalobj/
Wscript.echo Chr(34) & "Слово в кавычках" & Chr(34)
Wscript.echo ChrW(257) & ChrW(258) & ChrW(259) & ChrW(260) & ChrW(261)
Wscript.echo (UnEscape("Spaces%2C%20umlauts%20like%20%E4%20and%20unicode%20characters%20like%20%u65E5"))
Автор: AVanti473
Дата сообщения: 16.09.2014 21:33
Tilks, я к сожалению далеко не знаток vbs, собственно поэтому и зашёл в эту ветку. А можете подробнее объяснить что к чему. Насколько я понял, в комментарии к скрипту, Вы дали две ссылки с двумя методами. Ниже, в скрипте, Вы применили эти методы "Unescape" и "ChrW". Первый метод декодирует юникод, второй получает символы, соответствующие коду символов юникода. Таким образом, что я получу в итоге, и как мне это поможет? Всё что я пока могу сообразить, это подставить в скрипт вместо (Слово в кавычках) символы юникода из названия ключа реестра, а echo выведет мне раскодированный вариант?
Автор: Tilks
Дата сообщения: 16.09.2014 22:50
AVanti473
вы просили, как экранировать юникод символы. мне и так пишет в реестр, правда не понятно это то же самое, что вам надо или нет, т.к. через форум все символы портится.

Код: Set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\CLSID\Ey4wh- `{{,\", ""
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Classes\CLSID\Ey4wh- `{{,", "test"
Автор: AVanti473
Дата сообщения: 17.09.2014 19:58
Tilks Благодарю за подсказку.
Автор: korosya
Дата сообщения: 18.09.2014 22:00
Как известно можно запустит VBScript/Jscript из батника через mshta. При этом всё записывается в одну строку. Например

Код: mshta.exe vbscript:close(CreateObject("WScript.Shell").Popup("MessageString",0,"Title",16))
Автор: inile
Дата сообщения: 30.09.2014 15:22
Есть скрипт, находит и подсвечивает все слова, содержащие искомые символы. Как сделать, чтоб цвет подсветки расчитывался только один раз при каждом запуске, а не для каждого совпадения.

Код: javascript:(function(){var count=0, text, dv;text=prompt("Search phrase:", "");if(text==null || text.length==0)return;dv=document.defaultView;function searchWithinNode(node, te, len){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.toUpperCase().indexOf(te);if(pos>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor='#'+Math.floor(Math.random()*16777215).toString(16);middlebit=node.splitText(pos);endbit=middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1&& node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], te, len);}}return skip;}window.status="Searching for '"+text+"'...";searchWithinNode(document.body, text.toUpperCase(), text.length);window.status="Found "+count+" occurrence"+(count==1?"":"s")+" of '"+text+"'.";})();
Автор: unreal666
Дата сообщения: 30.09.2014 17:50
inile
типа одним цветом подсветить, а не разными?
если да, то перенести расчет в начало ф-и, типа такого

Код: javascript:(function(){var count=0, color='#'+Math.floor(Math.random()*16777215).toString(16), text, dv;text=prompt("Search phrase:", "");if(text==null || text.length==0)return;dv=document.defaultView;function searchWithinNode(node, te, len){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.toUpperCase().indexOf(te);if(pos>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor=color;middlebit=node.splitText(pos);endbit=middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1&& node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE"){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], te, len);}}return skip;}window.status="Searching for '"+text+"'...";searchWithinNode(document.body, text.toUpperCase(), text.length);window.status="Found "+count+" occurrence"+(count==1?"":"s")+" of '"+text+"'.";})();
Автор: Parazitif
Дата сообщения: 11.10.2014 10:57
Всем привет!
Помогите, если не трудно, допилить скрипт, который добавляет OLE-свойство в файл, отображаемое во вкладке "Особые" свойств файла.
В общем и целом, нужно чтобы при выборе группы файлов с разными названиями, каждому добавлялось свойство типа:
Профиль XXXXXX
, где XXXXXX - это последние 6 цифр названия файла у каждого файла разное.

По идее, нужно допилить вот этот скрипт, который помогли сделать на этом форуме.
[more]
Код: 'VBS
' MSComDlg.CommonDialog component registration
' w7 32bit C:\Windows\System32\cmd.exe C:\Windows\System32\regsvr32.exe C:\Windows\System32\comdlg32.ocx
' w7 64bit C:\Windows\SysWOW64\cmd.exe C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\comdlg32.ocx
' [HKEY_CLASSES_ROOT\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905]
' @="gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
'
' run script in w7 64bit system
' w7 64bit C:\Windows\SysWOW64\wscript.exe c:\testscript.vbs
Set objFile = CreateObject("DSOFile.OleDocumentProperties")
Set OpenDialog = CreateObject("MSComDlg.CommonDialog") ' Microsoft Common Dialog Control
FileChangedCount = 0

With OpenDialog
.DialogTitle = "Откройте нужный Вам файл(ы)"
.InitDir = "C:\"
.Filter = "Модели Solidworks (*.sldlfp,*.sldasm)|*.sldlfp;*.sldasm" ' Расширения файлов
.FilterIndex = 1
.Flags = 2621952
.MaxFileSize =32000
.ShowOpen
Filename = .Filename
End With

If (Len(OpenDialog.FileName)= 0) Then
msgbox "Файлы не выбраны!"
End If

files = Split(OpenDialog.Filename, vbNullChar)
count_files = UBound(files)
If count_files = 0 Then
' only one file select
wscript.echo files(0)
objFile.Open(files(0))
AddCustomProperty
Else
for i=1 to count_files
' multiple file select
wscript.echo files(0) & "\" & files(i)
objFile.Open(files(0) & "\" & files(i))
AddCustomProperty
next
End If
Msgbox "Выполнено." &chr(13)& "Количество обработанных файлов: "& FileChangedCount

Sub AddCustomProperty
' remove if already exist
For Each objProperty in objFile.CustomProperties
if objProperty.Name = "Наименование" Then
objProperty.Remove
objFile.Save
end if
Next
' set new properties
objFile.CustomProperties.Add "Наименование", 4
objFile.Save
name = Split(objFile.Name, ".")
Set objProperty = objFile.CustomProperties.Item("Наименование")
objProperty.Value = "Уголок " & Chr(34) & "B@Sketch1@" & name(0) & ".SLDPRT" & Chr(34)
objFile.Save
objFile.close
FileChangedCount = FileChangedCount + 1
End Sub
Автор: Tilks
Дата сообщения: 11.10.2014 20:04
Parazitif
попробуй заменить некоторые строчки на такие

Код: Sub AddCustomProperty
' remove if already exist
For Each objProperty in objFile.CustomProperties
If objProperty.Name = "Профиль" Then
objProperty.Remove
objFile.Save
End If
Next
' set new properties
objFile.CustomProperties.Add "Профиль", 4
objFile.Save
Name = Split(objFile.Name, ".")
Name6last = Right(Name(0), 6) '6 символов с конца названия файла
Set objProperty = objFile.CustomProperties.Item("Профиль")
objProperty.Value = Name6last
objFile.Save
objFile.Close
FileChangedCount = FileChangedCount + 1
End Sub
Автор: Parazitif
Дата сообщения: 13.10.2014 18:15
Tilks

Всё сделал, всё проверил. Работает прям как надо!)
Дай бог вам здоровья за всю уже оказанную помощь!
Автор: bmix2014
Дата сообщения: 21.10.2014 09:54
Добрый день!

Подскажите, каким-нибудь способом можно перехватить диалог сохранения файла из IE, и сохранить самому в нужное место?
В скрипте создаю объект    Set objIE = CreateObject("InternetExplorer.Application") Делаю objIE.Navigate на нужный URL, в браузере поднимается диалоговое окно "сохранить как ", вот его можно как-то обработать, чтобы не зависеть от пользователя? XMLHTTP не предлагать =)

Страницы: 12345678910111213141516171819202122232425

Предыдущая тема: Помогите новичку в C++


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