![]() |
|
||||||||||
|
|||||
|
listener
|
Недавно обнаружил полезную фишку в методе
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 функции обработки строк при помощи регулярных выражений, шелльные команды, системные и сетевые функции и т.п. Скачать доки по скриптам http://download.microsoft.com/downlo...scrdoc56en.exe Пример 1 Получить имя компа, юзера, домена 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); Замена символов в строке. (см. мануал по 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); Импорт текста из документа 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); Пример 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); Построчное чтение текстового файла. Аргументы вызова - полное имя файла и номер строки, которую нужно прочитать. 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); В случае, если передан номер строки, больший их общего количества в файле, возвращается номер последней строки и она сама. Последний раз редактировалось alexcon314; 13.09.2007 в 03:13. |
|
|||||
|
listener
|
Прошу прощения за UP. Предыдущий пост заставил меня задуматься, а нельзя ли сделать что-нибудь наподобие динамической библиотеки различных функци vbs? В связи с этим следующий пример.
var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; vbCode += 'Set objCom = GetObject(a)\r'; vbCode += 'MyFunc = objCom.mkdir(b)\r'; vbCode += 'End Function\r'; var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "script:http://mdm-zinc.narod.ru/Com/fcom.wsc", "C:\\NewFolder", "", ""); mdm.Dialogs.prompt(Return); <?xml version="1.0"?>
<component>
<?component error="true" debug="true"?>
<registration
description="fcom"
progid="fcom.WSC"
version="1.00"
classid="{fd17cd28-824d-4ddb-9980-5825cae259be}"
>
</registration>
<public>
<method name="mkdir">
<PARAMETER name="path"/>
</method>
</public>
<script language="VBScript">
<![CDATA[
function mkdir(path)
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateFolder(path)
mkdir = f.path
end function
]]>
</script>
</component>
Т.е. происходит что-то наподобие вызова библиотечной функции. Еще один занятный пример var vbCode = 'Function MyFunc(a,b,c,d,e)\r'; vbCode += 'Set objCom = GetObject(a)\r'; vbCode += 'MyFunc = objCom.typechar(b,CDbl(c),d)\r'; vbCode += 'End Function\r'; var Return = mdm.System.VBScript.execute(vbCode, "MyFunc", "script:http://mdm-zinc.narod.ru/Com/fcom.wsc", "Hello!~It's me.", "0,3", "winword"); mdm.Dialogs.prompt(Return); Последний раз редактировалось alexcon314; 13.09.2007 в 23:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|