Задать вопрос

Как на VBScript убить процесс?

Система WinXP.
раз в 5 минут WinSCP синхронизирует файлы и запускает этот скрипт.
Скрипт заходит в папку, и по очереди отправляет все файлы на печать (в моём случае все они pdf).
Покопипастив я сотворил вот такой скрипт

On Error Resume Next
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")

gWatchFolder = "c:\test\"
Set lFolder = gFSO.GetFolder(gWatchFolder)
Set lFiles = lFolder.Files
For Each lFile In lFiles
	PrintFile(gWatchFolder & lFile.Name)
	Next

Sub PrintFile(pFileName)
	WScript.Sleep(5)
	s = """C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"" /h /p """ & pFileName & """"
	Call gShell.Run(s,0,true)
	KillArcobat
	gFSO.DeleteFile(pFileName)
End sub

Sub Killacrobat
	WScript.Sleep(5)
	kill="""c:\windows\system32\taskkill.exe /im acrord32*"""
	Call gShell.Run(kill,0,true)
	end sub
WScript.Quit


Однако получается, что скрипт доходит до Call gShell.Run(s,0,true), адобридер запускается первый файл на печать уходит и всё, дальше ничего не происходит, пока руками окошко ридера не закроешь.

Может кто подсказать как эту проблему разрешить?
  • Вопрос задан
  • 2818 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@serh1o
Третий параметр в gShell.Run(s,0,true) означает, что сценарий будет ожидать завершения работы запущенного приложения, и только потом перейдет к выполнению следующей строчки кода, (false – будет продолжатся выполнение сценария независимо от того, завершилась работа запущенного приложения или нет).
В случае с Adobe reader при запуске печати из командной строки все окна закрываются, кроме одного, последнего, это фича ридера:
Print a PDF file silently:
AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ]

The last command will open a new Adobe Reader window, print the PDF file and then terminate its window unless that window happens to be the only Adobe Reader window left: at least one Adobe Reader window will be left open.
Ответ написан
Комментировать
@SvoiLudi
'pinter_PDF.vbs
'Автоматическая печать PDF-файлов, появляющихся в определенной папке
'Установите программу SumatraPDF www.softportal.com/software-7568-sumatra-pdf.html
'Глобальные переменные
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")
'Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
gWatchFolder = "E:\"
'Основной цикл
While true
Set lFolder = gFSO.GetFolder(gWatchFolder)
Set lFiles = lFolder.Files
WScript.Sleep(10000)
For Each lFile In lFiles
' msgbox(gWatchFolder)
'msgbox(lFile.Name)
PrintFile(gWatchFolder & lFile.Name)
Next

WEnd

'Функция печати конкретного pdf-файла
Sub PrintFile(pFileName)
'Ждем некоторе время (пока файл до конца запишется)
WScript.Sleep(10)
'msgbox(pFileName)
'Укажите путь к программе SumatraPDF
s = """C:\Program Files\SumatraPDF\SumatraPDF.exe"" -exit-on-print -print-to-default """ & pFileName & """"
'msgbox (s)
Call gShell.Run(s,0,true)
'msgbox(pFileName)
WScript.Sleep(10)
gFSO.DeleteFile(pFileName)
If gFSO.FileExists(pFileName) Then
'Мало ли чего может случиться, лучше пусть у Иван Иваныча перестанет печатать, чем один файл много раз уйдет на принтер
msgbox("Не удалось удалить файл " & pFileName & "! Позвоните компьютерщику")
WScript.Quit
'Else
'Пока не реализовано
'ToLog("Файл " & lFileName & " удален.")
End If
End sub

'Доделывал чужое под себя +7 902 44 00 00 6 Компьютерщик www.2133790.Ru
'брал исходник здесь https://habrahabr.ru/post/112404/ и спасибо автору за ответы на мои вопросы
'отсюда autoit-script.ru/index.php?topic=21264.0
'и отсюда www.cyberforum.ru/vbscript-wsh/thread1445205.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы