1 (изменено: Xenon, 2012-06-11 23:13:12)

Тема: VBScript:Выборка строки из текста или как распарсить переменную?

Здравствуйте. Помощь нужна с ниже приведенным скриптом. Скрипт вынимает параметры запуска процесса через WMIC и создает ярлык для запущенного процесса на рабочем столе. Не знаю как вытащить отдельно аргументы запуска из переменной взятой из WMIC.


Dim sIc
Dim sIp
Dim sMessaga
Dim MyProc
'Цикл проверки доступности процесса и изъятия командной строки
Do
Set Processes = GetObject("winmgmts://localhost")
Set MyProcEnum = Processes.ExecQuery("select * from Win32_Process where Name = 'hon.exe'")
MyProc = False
For Each Item In myProcEnum
If Item.Name = "hon.exe" Then
MyProc = True
sIc = Item.CommandLine
sIp = Item.ExecutablePath
End If
Next
'Сообщение об отсутствии процесса
If Not myProc Then
sMessaga = MsgBox ("Игра не запущена!" & vbcrlf & "Запустите игру и нажмите ОК", 49, "Ошибка")
If sMessaga = vbCancel then
Wscript.quit
End If
End If
WScript.Sleep 10000
Loop Until MyProc = True
'Создание ярлыка на десктопе
set WshShell = WScript.CreateObject("WScript.Shell" )
strDesktop = WshShell.SpecialFolders("Desktop" )
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Heroes of Newert-прямой-.lnk" )
Msgbox sIp
oShellLink.TargetPath = sIp
oShellLink.WindowStyle = 1
oShellLink.IconLocation = sIp
oShellLink.Arguments = sIc
oShellLink.Description = "FaJIc()n"
oShellLink.WorkingDirectory = sIp
oShellLink.Save
msgbox "Ярлык создан" & vbcrlf & "Для запуска игры без гарены, запустите ярлык с рабочего стола с пометкой -прямой-", 64, "Информация"

2 (изменено: Xenon, 2012-06-12 00:09:38)

Re: VBScript:Выборка строки из текста или как распарсить переменную?

Нашел такой вариант решения проблемы.

strX = "C:\Games\HoN_GGC\Apps\HoNCIS\hon.exe -keyxxxxxxxxxxxxxxxx -masterserver masterserver.cis.s2games.com -webserver cis.heroesofnewerth.com -region RU"
intPoz1 = InStr(1, strX, "-key", vbTextCompare)
msgbox initPoz1
intPoz2 = InStr(intPoz1+1, strX, "RU", vbTextCompare)
msgbox initPoz2
strY = Mid(strX, intPoz1, intPoz2 - intPoz1 - 1)
msgbox strY

Хотелось бы конечно посмотреть как будет выглядеть через объект RegExp.

3

Re: VBScript:Выборка строки из текста или как распарсить переменную?

Как-то так:

Option Explicit

Dim objFSO
Dim objWshShell

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx

Dim strArguments

If MsgBox("Создать на Рабочем столе модифицированный ярлык для запуска игры «Heroes of Newerth» без «Garena»?" & vbCrLf & vbCrLf & _
    "Для создания модифицированного ярлыка нажмите «OK» и затем запустите игру «Heroes of Newerth»", _
    vbOKCancel + vbQuestion, "Создание модифицированного ярлыка") = vbOK Then
    
    Set objFSO             = WScript.CreateObject("Scripting.FileSystemObject")
    Set objWshShell        = WScript.CreateObject("WScript.Shell")
    
    Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
    Set objSWbemServicesEx = objSWbemLocator.ConnectServer(".", "root\cimv2")
    Set collSWbemObjectSet = objSWbemServicesEx.ExecNotificationQuery( _
        "SELECT * FROM __InstanceCreationEvent WITHIN 1 " & _
        "WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'hon.exe'" _
        )
    
    Set objSWbemObjectEx = collSWbemObjectSet.NextEvent.TargetInstance
    
    With WScript.CreateObject("VBScript.RegExp")
        .Pattern = "^(\s*""?" & Replace(Replace(objSWbemObjectEx.ExecutablePath, "\", "\\"), ".", "\.") & """?\s*)(.*)$"
        strArguments = .Replace(objSWbemObjectEx.CommandLine, "$2")
    End With
    
    With objWshShell
        With .CreateShortcut(.SpecialFolders("Desktop") & "\Heroes of Newerth Modified.lnk")
            .TargetPath       = """" & objSWbemObjectEx.ExecutablePath & """"
            .WindowStyle      = 1
            .IconLocation     = objSWbemObjectEx.ExecutablePath & ",0"
            .Arguments        = strArguments
            .Description      = "Heroes of Newerth Modified"
            .WorkingDirectory = objFSO.GetParentFolderName(objSWbemObjectEx.ExecutablePath)
            
            .Save
        End With
    End With
    
    Set objSWbemObjectEx   = Nothing
    Set collSWbemObjectSet = Nothing
    Set objSWbemServicesEx = Nothing
    Set objSWbemLocator    = Nothing
    
    Set objWshShell        = Nothing
    Set objFSO             = Nothing
    
    MsgBox "Для запуска игры без «Garena», запустите ярлык [Heroes of Newerth Modified] с Рабочего стола", vbOKOnly + vbInformation, "Ярлык создан"
End If

WScript.Quit 0