Захватываю данные из документов, которые отправляются на принтер
Я использую класс "Win32_PrintJob
". Мне нужно только получить количество копий каждого документа, отправленного на печать, для этого я использую свойство 'PagesPrinted
', но при попытке получить количество копий возвращает значение "0
". Глядя на документацию, можно найти следующее объяснение: «Это значение может быть 0 (zero)
, если задание на печать не содержит информации о разделении страниц». Мой вопрос: что это за разделение страниц? Как получить точное количество копий?
Официальная документация: Ссылка
Мой код в VBScript:
strComputer="."
strPrintQuery="Select * from __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_PrintJob'"
Set PRINTSink=WScript.CreateObject("WBemScripting.SWbemSink","PRINTNEW_")
Set objWMI = GetObject("WinMgmts:{impersonationLevel=impersonate, (security)}!\\" & strComputer & "\")
objWMI.ExecNotificationQueryAsync PRINTSink,strPrintQuery
strPrintQuery2="Select * from __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_PrintJob'"
Set PRINTSink2=WScript.CreateObject("WBemScripting.SWbemSink","PRINTDEL_")
Set objWMI2 = GetObject("WinMgmts:{impersonationLevel=impersonate, (security)}!\\" & strComputer & "\")
objWMI2.ExecNotificationQueryAsync PRINTSink2,strPrintQuery2
strPrintQuery3="Select * from __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_PrintJob'"
Set PRINTSink3=WScript.CreateObject("WBemScripting.SWbemSink","PRINTMOD_")
Set objWMI3 = GetObject("WinMgmts:{impersonationLevel=impersonate, (security)}!\\" & strComputer & "\")
objWMI3.ExecNotificationQueryAsync PRINTSink3,strPrintQuery3
strServiceQuery="Select * from __InstanceModificationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Service'"
Set SERVICESink=WScript.CreateObject("WBemScripting.SWbemSink","SERVICEMOD_")
Set objWMI4 = GetObject("WinMgmts:{impersonationLevel=impersonate, (security)}!\\" & strComputer & "\")
objWMI4.ExecNotificationQueryAsync SERVICESink,strServiceQuery
While (True)
WScript.Sleep (500)
Wend
Sub PRINTNEW_OnObjectReady(objEvent,objContext)
WriteFile NOW & "f1 xxx " & objEvent.TargetInstance.PagesPrinted & " xxx " & objEvent.TargetInstance.DriverName & " xxx " & objEvent.TargetInstance.Owner & " xxx " & objEvent.TargetInstance.Name & " xxx " & objEvent.TargetInstance.Document
End Sub
Sub WriteFile(strText)
Dim objFSO, objFolder, objShell, objTextFile, objFile
Dim strDirectory, strFile
strDirectory = "C:
strFile = "\log.txt"
' Create the File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Check that the strDirectory folder exists
If objFSO.FolderExists(strDirectory) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFolder = objFSO.CreateFolder(strDirectory)
'WScript.Echo "Just created " & strDirectory
End If
If objFSO.FileExists(strDirectory & strFile) Then
Set objFolder = objFSO.GetFolder(strDirectory)
Else
Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
'Wscript.Echo "Just created " & strDirectory & strFile
End If
set objFile = nothing
on error resume next
set objFolder = nothing
' OpenTextFile Method needs a Const value
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8
Set objTextFile = objFSO.OpenTextFile _
(strDirectory & strFile, ForAppending, True)
' Writes strText every time you run this VBScript
objTextFile.WriteLine(strText)
objTextFile.Close
End Sub