Что нового

Запуск VBS из AutoIt

merlin333

Новичок
Сообщения
6
Репутация
2
Приветствую всех!

Вроде бы тема обсосана:smile:
но... направте меня на ман какой нить чтоб разобраца:smile:

Заранее спасибо!

p.s. Есть VBS скрипт который на базе данных из AD формирует подпись в Outlook

Проблема в том что он запускается при каждом запуске
Если не настроен Outlook - он просит его настроить:smile:

Я сделал на AutoIt проверку - если учетка ненастроена (отсутствует файлик *.ost) то скрипт не должен запускаться:smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
ShellExecute()
 
Автор
M

merlin333

Новичок
Сообщения
6
Репутация
2
Код:
Switch @OSVersion
Case "Win_7"
	$search = FileFindFirstFile (@UserProfileDir & "\AppData\Local\Microsoft\Outlook\*.ost")
	If $search = -1 Then
		;MsgBox (16, "Ошибка", "На данном компьютере не настроен Outlook")
		ShellExecute ("Подпись в Outloock.vbs", "", "", "open")
	;Else
		;$file = FileFindNextFile ($search)
		;MsgBox (64, "Результат", $file)
	EndIf
EndSwitch


Not work!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
merlin333,
А так не работает?
Код:
;...
If FileExists(@UserProfileDir & '\AppData\Local\Microsoft\Outlook\*.ost') Then
	ShellExecute(@ScriptDir & '\Подпись в Outloock.vbs')
EndIf
;...
 

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
madmasles, FileExists помоему *.ost не поймет... ему нужен точный путь.
Вернее он все время будет возвращать -1

merlin333,
Возьмите целевой каталог, создайте там файл с расширением *.ost
да и посмотрите что у вас получается с ним и без него... и вообще получается ли
Код:
$search = FileFindFirstFile ("С:\TestDir\*.ost")
MsgBox (1, "", $search)

Убедитесь что @UserProfileDir & "\AppData\Local\Microsoft\Outlook\*.ost" возвращает вам то каталог который Вам нужен
 

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
madmasles,
:shok: как-то виноноват... :'( действительно работает
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,484
Запуск vbs кода непосредственно из скрипта:

Код:
$sProcess = "AutoIt3.exe"
$aRet = _ProcessExistsVbs($sProcess)

If IsArray($aRet) Then MsgBox(64, "Results", "Process <" & $aRet[1] & "> exists." & @LF & @LF & _
	"The returned PID is: " & $aRet[2] & @LF & @LF & _
	"Returned Executable Path is: " & @LF & $aRet[3] & @LF & @LF & _
	"Command Line of executed process is: " & @LF & $aRet[4])

;Функция возвращает массив содержащий имя процесса, его уникальный идентификатор (PID), путь запуска, и коммандную строку запуска.
;В случае если указанный процесс не существует, возвращается 0.
Func _ProcessExistsVbs($vProcess)
	Local $Code = ""
	$Code &= 'Function ProcessExists(ProcessName)' & @LF
	$Code &= '	Set Processes = GetObject("winmgmts://localhost")' & @LF
	$Code &= '	Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")' & @LF
	$Code &= '	For Each Proc In myProcEnum' & @LF
	$Code &= '		If StrComp(Proc.Name, ProcessName, 1) = 0 Or StrComp(Proc.ProcessID, ProcessName, 1) = 0 Then' & @LF
	$Code &= '			Dim RetArr' & @LF
	$Code &= '			RetArr = Array(4, Proc.Name, Proc.ProcessID, Proc.ExecutablePath, Proc.CommandLine)' & @LF
	$Code &= '			ProcessExists = RetArr' & @LF
	$Code &= '			Exit Function' & @LF
	$Code &= '		End If' & @LF
	$Code &= '	Next' & @LF
	$Code &= '	ProcessExists = 0' & @LF
	$Code &= 'End Function'

	Local $VbsObj = ObjCreate("ScriptControl")
	If @error Then Return SetError(1, 0, -1)

	$VbsObj.Language = "vbscript"
	$VbsObj.AddCode($Code)
	
	Local $aRet = $VbsObj.Run("ProcessExists", $vProcess)
	If $aRet = 0 Then Return SetError(1, 0, 0)
	
	Return $aRet
EndFunc
 
Верх