Я работаю над скриптом, чтобы помочь пользователям делать скриншоты в цикле и сохранять их в текстовом документе.Убить Word.Basic процесс приложения без убийства Основной процесс Word.Application
Мой код работает, но проблема, с которой я сталкиваюсь, заключается в том, что для каждого снимка экрана я создаю процесс WINWORD.EXE
, и процесс не убивается, поэтому, если я запускаю свой сценарий несколько раз или занимаю много скриншотов в в одиночном режиме, я получаю огромное количество процессов, которые мне придется вручную убить.
Это мой сценарий:
Option Explicit
Dim strPath : strPath = WScript.ScriptFullName
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile : Set objFile = objFSO.GetFile(strPath)
Dim strMainPath : strMainPath = objFSO.GetParentFolderName(objFile)
' Cleaning
Set objFile = Nothing
Set objFSO = Nothing
Dim objWord : Set objWord = CreateObject("Word.Application")
objWord.Visible = False
objWord.Documents.Open strMainPath & "\template\template.doc"
Const wdStory = 6
Const wdMove = 0
Dim objSelection : Set objSelection = objWord.Selection
objSelection.EndKey wdStory, wdMove
Dim execFlag : execFlag = True
Do While execFlag = True
Dim strPrint : strPrint = InputBox("Enter screenshot name","Screenshot Name", "")
With objSelection
.Font.Name = "Arial"
.Font.Size = "10"
.TypeText strPrint
End With
objSelection.TypeParagraph()
WScript.Sleep 5000
'Taking Screenshot using word object
With CreateObject("Word.Basic") 'This is the point where I create the processes that I'm unable to kill
.SendKeys "{prtsc}"
End With
' Paste in the screen shot
objWord.Selection.Paste
Dim intAnswer : intAnswer = MsgBox("Continue?", vbYesNo, "Printscreen")
If intAnswer = vbNo Then execFlag = False
objSelection.EndKey wdStory, wdMove
objSelection.TypeParagraph()
Loop
Dim strFileName : strFileName = ""
Do
strFileName = InputBox("Provide the file name","File Name", "")
Loop While strFileName = ""
objWord.ActiveDocument.SaveAs strMainPath & "\" & strFileName & ".doc"
objWord.ActiveDocument.Close
objword.Quit
Set objword = Nothing
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Documents.Open strMainPath & "\" & strFileName & ".doc"
Set objWord = Nothing
Эти процессы я имею в виду. Я не могу просто убить все процессы, потому что один из них на самом деле ссылается на мой шаблон, который является документом Word, где я храню свои скриншоты. Любые советы о том, как решить эту проблему?
Где вы принимаете ваш снимок экрана создают лишние процессы. Каждый раз, когда вы запускаете цикл, вы создаете новый процесс. В верхней части кода введите 'Dim objBasic: Set objBasic = CreateObject (" Word.Basic ")', затем замените блок 'With' на' objBasic.SendKeys "{prtsc}" '. Сразу же после окончания цикла введите 'Set objBasic = Nothing'. Это должно предотвратить появление нескольких процессов. – Lou
@ Lou Большое спасибо. Это решило мою проблему. Если вы хотите опубликовать его в качестве ответа, я приму его –