Тема: Zinc FAQ
Показать сообщение отдельно
Старый 27.11.2007, 23:32
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 3  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Использование функций VBS и WSH
Для использования многих системных функций, не имеющих реализации в цинке или реализованных с какими-то косяками,
можно задействовать встроенный mdm-класс mdm.System.VBScript (как вариант mdm.System.JScript).
В документации сказано, что метод mdm.System.VBScript.execute() ничего не возвращает. Однако это не так.
Внимание - каждую строку тела формируемого скрипта не забываем заканчивать
символом переноса строки.

Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'MyFunc=\"Возвращаемое значение\"\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "", "", "", "", "");
mdm.Dialogs.prompt(Return);
Формально нужно указывать ВСЕ пять аргументов, пусть они и не требуются. Возвращаемое значение может быть либо строкой, либо числом, (объект, массив не возвращается).
Польза в том, что можно использовать vb-скрипты с обратной связью, получая от них данные. Например, задействовать встроенные в vbs функции обработки строк при помощи регулярных выражений, шелльные команды, системные и сетевые функции и т.п. Возможностей тут немало, стоит посмотреть документацию по VBS и WHS.
Скачать доки по скриптам
http://download.microsoft.com/downlo...scrdoc56en.exe

Пример 1

Получить имя компа, юзера, домена. Эти сведения будут отражать имя пользователя ЗАПУСТИВШЕГО ПРОГРАММУ. Т.е.
при использовании команды "запуск от имени...", например, будут возвращены имя и домен пользователя,
от чьего имени был произведен запуск. В скриптах используются COM-объекты, такие как Shell, WScript, FileSystemObject и т.д.

Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Set WshNetwork = CreateObject(\"WScript.Network\")\r';
vbCode += 'MyFunc = WshNetwork.ComputerName & vbNewLine & WshNetwork.UserName & vbNewLine & WshNetwork.UserDomain\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "", "", "", "", "");
mdm.Dialogs.prompt(Return);
Пример 2
Замена символов в строке. (см. мануал по vb-функции Replace)

Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'MyFunc = Replace(a, b, c)\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "XXpXXPXXp", "p", "_", "", "");
mdm.Dialogs.prompt(Return);
Пример 3

Импорт текста из документа Word. В примере файл "Test line.doc" содержит несколько строк текста.

Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Set objDoc = GetObject(a)\r';
vbCode += 'objDoc.Select\r';
vbCode += 'MyFunc = objDoc.Application.Selection\r';
vbCode += 'objDoc.Application.Quit\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "C:\\Test line.doc", "", "", "", "");
mdm.Dialogs.prompt(Return);
Аналогично, используя свойства и методы объекта Excel.Sheet, можно импортировать данные из документов Excel.

Пример 4

Регулярные выражения. В примере в передаваемой строке ищется адрес e-mail и производится его разбор.

Код:
var vbCode = 'Function MyFunc(a,b,c,d,e)\r';
vbCode += 'Dim oRe, oMatch, oMatches\r';
vbCode += 'Set oRe = New RegExp\r';
vbCode += 'oRe.Pattern = \"(\\w+)@(\\w+)\\.(\\w+)\"\r';
vbCode += 'Set oMatches = oRe.Execute(a)\r';
vbCode += 'Set oMatch = oMatches(0)\r';
vbCode += 'retStr = \"Email address is: \" & oMatch\r';
vbCode += 'retStr = retStr & vbNewline\r';
vbCode += 'retStr = retStr & \"Email alias is: \" & oMatch.SubMatches(0)\r';
vbCode += 'retStr = retStr & vbNewline\r';
vbCode += 'retStr = retStr & \"Organization is: \" & oMatch. SubMatches(1)\r';
vbCode += 'retStr = retStr & vbNewline\r';
vbCode += 'retStr = retStr & \"Domain is: \" & oMatch. SubMatches(2)\r';
vbCode += 'MyFunc = retStr\r';
vbCode += 'End Function\r';
var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "Please send mail to dragon@xyzzy.com. Thanks!", "", "", "", "");
mdm.Dialogs.prompt(Return);
Пример 5

Построчное чтение текстового файла. Аргументы вызова - полное имя файла и номер строки, которую нужно прочитать.

Код:
var vbCode = 'Function GetLineTextFile(a,b,c,d,e)\r';
vbCode += 'Const ForReading = 1, ForWriting = 2\r';
vbCode += 'Dim fso, MyFile, res\r';
vbCode += 'Set fso = CreateObject(\"Scripting.FileSystemObject\")\r';
vbCode += 'Set MyFile = fso.OpenTextFile(a, ForReading)\r';
vbCode += 'For i=1 To b\r';
vbCode += 'res = MyFile.ReadLine\r';
vbCode += 'On Error Resume Next\r';
vbCode += 'If res = GetLineTextFile Then\r';
vbCode += 'res = "End line number " & CStr(i-1) & ": " & GetLineTextFile\r';
vbCode += 'GetLineTextFile = res\r';
vbCode += 'Exit Function\r';
vbCode += 'End If\r';
vbCode += 'GetLineTextFile = res\r';
vbCode += 'Next\r';
vbCode += 'MyFile.Close\r';
vbCode += 'End Function\r';
res = mdm.System.VBScript.execute(vbCode, "GetLineTextFile", "c:\\testfile.txt", 1009);
mdm.Dialogs.prompt(res);
Файл, из которого производится чтение, может быть .txt, ini, cfg, .xml и т.д. И бинарный тоже, но с понятными оговорками.
В случае, если передан номер строки, больший их общего количества в файле, возвращается номер последней строки и она сама.


Последний раз редактировалось alexcon314; 28.11.2007 в 22:10.