Ejemplo de control de la cola de Impresión por programa WXP

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Ejemplo de control de la cola de Impresión por programa WXP

Mensaje por BasicOs »

Cada vez que mandamos algo a imprimir sale botón de aceptar con el trabajo de la cola de impresión, puede modificarse para hacer un LOG de las impresoras
;Author Basicos http://www.autoit.es 24/09/06
$strcomputer = "."

$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!" & "\\" & $strcomputer & "\root\cimv2")
$colPrintJobs = $objWMIService.ExecNotificationQuery("Select * From __InstanceCreationEvent " _
& "Within 1 Where TargetInstance ISA 'Win32_PrintJob'")

$OEvent=ObjEvent("AutoIt.Error","nothing"); = OnError Resume Next

While 1
Printing()
sleep(100)
WEnd

Func Printing()
If IsObj($objWMIService) then
$objPrintJob = $colPrintJobs.NextEvent
$objPrint = $objPrintJob.TargetInstance.TotalPages
msgbox(0,"totalpages",$objPrint)
If $objPrint > 1 Then
$objPrintJob.TargetInstance.Pause
$msg = MsgBox (17, "Print Notification",$objPrintJob.TargetInstance.Document, 10)
If $msg = 1 Then $objPrintJob.TargetInstance.Resume
If $msg = 2 Then $objPrintJob.TargetInstance.Cancel
EndIf
Else
MsgBox(0, "Error", "Unable to connect to PrintJob Creation Event")
Exit
EndIf
EndFunc
Dick_
Mensajes: 4
Registrado: 29 Sep 2010, 03:06

Re: Ejemplo de control de la cola de Impresión por programa WXP

Mensaje por Dick_ »

Hola BasicOs, si bien este post es viejo, respondo aqui porque mi consulta tiene que ver con este codigo, te comento, yo estoy tratando de hacer un programita que intercepte las impresiones que se envian desde una red (ciber) y que pida confirmacion en el servidor para imprimir. Parto del ejemplo que pusiste aqui pero no me funciona el cancel sabes porque puede ser? ya que el resume y el pause andan ok. y si tenes un link para sacar mas info sobre el tema te lo agradeceria.
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Ejemplo de control de la cola de Impresión por programa WXP

Mensaje por BasicOs »

Hola!
Mirando un poco a ver que había encontré una selección de las cosas que se puedan hacer con las impresoras. Realmente es la incorporación de un objeto Wmi al código Autoit, con lo que podemos usarlo facilmente.
Siguiendo el ejemplo que viste arriba, solo hay que reemplazar un código por otro de esa manera. Si te falla de alguna manera, debes comprobar los objetos Wmi directamente (puede ser a través del código de abajo, o de un testeador de wmi que puedes buscar en softonic o google, ahora no te puedo recomendar uno, pero si lo encuentras y lo comunicas puede ayudarnos).
Está en Inglés pero lo que importa realmente el código es parecido en este caso:

Limpiando la cola de impresión. Borra todos los trabajos de la impresora llamada HP QuietJet

Código: Seleccionar todo

 En WsScript
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer Where Name = 'HP QuietJet'")
For Each objPrinter in colInstalledPrinters
    objPrinter.CancelAllJobs()
Next

-->>Lo mismo en Autoit:
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:\" & $strComputer & " ootcimv2")
$colInstalledPrinters = $objWMIService.ExecQuery ("Select * from Win32_Printer Where Name = 'HP LaserJet 3200 Series PCL'")
For $objPrinter in $colInstalledPrinters
    $objPrinter.CancelAllJobs()
Next
Delete All Large Print Jobs (Borrar todos los trabajos de impresora grandes) Deletes all print jobs larger than 1 megabyte. (Borra todos los trabajos de impresora mayores de 1 mega)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintJobs = objWMIService.ExecQuery _
("Select * from Win32_PrintJob Where Size > 1000000")

For Each objPrintJob in colPrintJobs
objPrintJob.Delete_
Next

Delete All Printers on a Print Server (Borrar todas las impresoras de un servidor de impresión) Deletes all the printers from a print server.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next

Deletes all HP QuietJet printers installed on a computer.


Delete Specific Printers
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where DriverName = 'HP QuietJet'")

For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next

Install Multiple Printers for One Print Device


Installs two logical network printers (with different printer priorities) for the same physical print device.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_

objPrinter.DriverName = "HP LaserJet 4000 Series PS"
objPrinter.PortName = "IP_169.254.110.160"
objPrinter.DeviceID = "PublicPrinter"
objPrinter.Location = "USA/Redmond/Building 37/Room 114"
objPrinter.Network = True
objPrinter.Shared = True
objPrinter.ShareName = "PublicPrinter"
objPrinter.Put_

objPrinter.DriverName = "HP LaserJet 4000 Series PS"
objPrinter.PortName = "IP_169.254.110.160"
objPrinter.DeviceID = "PrivatePrinter"
objPrinter.Location = "USA/Redmond/Building 37/Room 114"
objPrinter.Priority = 2
objPrinter.Network = True
objPrinter.Shared = True
objPrinter.Hidden = True
objPrinter.ShareName = "PrivatePrinter"
objPrinter.Put_

Install a Printer


Installs a logical network printer on a print server.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_

objPrinter.DriverName = "HP LaserJet 4000 Series PS"
objPrinter.PortName = "IP_169.254.110.160"
objPrinter.DeviceID = "ScriptedPrinter"
objPrinter.Location = "USA/Redmond/Building 37/Room 114"
objPrinter.Network = True
objPrinter.Shared = True
objPrinter.ShareName = "ScriptedPrinter"
objPrinter.Put_

List All Published Printers


Returns a list of all the printers published in Active Directory.
Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = "Select printerName, serverName from " _
& " 'LDAP://DC=fabrikam,DC=com' where objectClass='printQueue'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
Wscript.Echo "Printer Name: " & objRecordSet.Fields("printerName").Value
Wscript.Echo "Server Name: " & objRecordSet.Fields("serverName").Value
objRecordSet.MoveNext
Loop

List Printer Capabilities


Lists properties and capabilities for all the printers installed on a computer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_PrinterConfiguration")

For Each objPrinter in colInstalledPrinters
Wscript.Echo "Name: " & objPrinter.Name
Wscript.Echo "Collate: " & objPrinter.Collate
Wscript.Echo "Copies: " & objPrinter.Copies
Wscript.Echo "Driver Version: " & objPrinter.DriverVersion
Wscript.Echo "Duplex: " & objPrinter.Duplex
Wscript.Echo "Horizontal Resolution: " & _
objPrinter.HorizontalResolution
If objPrinter.Orientation = 1 Then
strOrientation = "Portrait"
Else
strOrientation = "Landscape"
End If
Wscript.Echo "Orientation : " & strOrientation
Wscript.Echo "Paper Length: " & objPrinter.PaperLength / 254
Wscript.Echo "Paper Width: " & objPrinter.PaperWidth / 254
Wscript.Echo "Print Quality: " & objPrinter.PrintQuality
Wscript.Echo "Scale: " & objPrinter.Scale
Wscript.Echo "Specification Version: " & _
objPrinter.SpecificationVersion
If objPrinter.TTOption = 1 Then
strTTOption = "Print TrueType fonts as graphics."
Elseif objPrinter.TTOption = 2 Then
strTTOption = "Download TrueType fonts as soft fonts."
Else
strTTOption = "Substitute device fonts for TrueType fonts."
End If
Wscript.Echo "True Type Option: " & strTTOption
Wscript.Echo "Vertical Resolution: " & objPrinter.VerticalResolution
Next

List Print Queue Statistics


Returns total number of jobs, total number of pages, and largest job for all print queues on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintJobs = objWMIService.ExecQuery _
("Select * from Win32_PrintJob")

For Each objPrintJob in colPrintJobs
intTotalJobs = intTotalJobs + 1
intTotalPages = intTotalPages + objPrintJob.TotalPages
If objPrintJob.TotalPages > intMaxPrintJob Then
intMaxPrintJob = objPrintJob.TotalPages
End If
Next

Wscript.Echo "Total print jobs in queue: " & intTotalJobs
Wscript.Echo "Total pages in queue: " & intTotalPages
Wscript.Echo "Largest print job in queue: " & intMaxPrintJob

Uses cooked performance counters to retrieve data such as total number of jobs printed and total number of printing errors for each print queue on a computer.


List Print Queue Statistics
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintQueues = objWMIService.ExecQuery _
("Select * from Win32_PerfFormattedData_Spooler_PrintQueue Where " & _
"Name <> '_Total'")

For Each objPrintQueue in colPrintQueues
Wscript.Echo "Name: " & objPrintQueue.Name
Wscript.Echo "Jobs: " & objPrintQueue.Jobs
Wscript.Echo "Current jobs spooling: " & objPrintQueue.JobsSpooling
Wscript.Echo "Maximum jobs spooling: " & objPrintQueue.MaxJobsSpooling
Wscript.Echo "Total jobs printed: " & objPrintQueue.TotalJobsPrinted
Wscript.Echo "Job errors: " & objPrintQueue.JobErrors
Wscript.Echo "Not ready errors: " & objPrintQueue.NotReadyErrors
Wscript.Echo "Out of paper errors: " & objPrintQueue.OutOfPaperErrors
Next

Monitor Printer Status


Checks the status for each printer on a computer, and issues an alert if any of these printers have stopped.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where PrinterStatus = '1' " _
& "or PrinterStatus = '2'")

If colInstalledPrinters.Count = 0 Then
Wscript.Echo "All printers are functioning correctly."
Else
For Each objPrinter in colInstalledPrinters
Wscript.Echo "Printer " & objprinter.Name & " is not responding."
Next
End If

Monitor Printer Status


Displays current status for all printers on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
Wscript.Echo "Name: " & objPrinter.Name
Wscript.Echo "Location: " & objPrinter.Location
Select Case objPrinter.PrinterStatus
Case 1
strPrinterStatus = "Other"
Case 2
strPrinterStatus = "Unknown"
Case 3
strPrinterStatus = "Idle"
Case 4
strPrinterStatus = "Printing"
Case 5
strPrinterStatus = "Warmup"
End Select
Wscript.Echo "Printer Status: " & strPrinterStatus
Wscript.Echo "Server Name: " & objPrinter.ServerName
Wscript.Echo "Share Name: " & objPrinter.ShareName
Wscript.Echo
Next

Modify Printer Availability


Configures a printer so that documents can only be printed between 8:00 AM and 6:00 PM.
dtmStartTime= "********080000.000000+000"
dtmEndTime= "********180000.000000+000"

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrinters = objWMIService.ExecQuery _
("Select * From Win32_Printer Where DeviceID = 'ArtDepartmentPrinter' ")

For Each objPrinter in colPrinters
objPrinter.StartTime = dtmStartTime
objPrinter.UntilTime = dtmEndTime
objPrinter.Put_
Next

Modify Print Job Priority


Uses ADSI to change the priority of current print jobs based on the size of those print jobs.
Set objPrinter = GetObject _
("WinNT://atl-dc-02/ArtDepartmentPrinter, printqueue")

For Each objPrintJob in objPrinter.PrintJobs
If objPrintJob.Size > 400000 Then
objPrintJob.Put "Priority" , 2
objPrintJob.SetInfo
Else
objPrintJob.Put "Priority" , 3
objPrintJob.SetInfo
End If
Next

Modify Print Job Start Time


Uses ADSI to change the start time for all print jobs larger than 400K to 2:00 AM.
Set objPrinter = GetObject("WinNT://atl-dc-02/ArtDepartmentPrinter,printqueue")

For Each objPrintQueue in objPrinter.PrintJobs
If objPrintQueue.Size > 400000 Then
objPrintQueue.Put "StartTime" , TimeValue("2:00:00 AM")
objPrintQueue.SetInfo
End If
Next

Monitor Print Job Status


Returns the job ID, user name, and total pages for each print job on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintJobs = objWMIService.ExecQuery _
("Select * from Win32_PrintJob")

Wscript.Echo "Print Queue, Job ID, Owner, Total Pages"

For Each objPrintJob in colPrintJobs
strPrinter = Split(objPrintJob.Name,",",-1,1)
Wscript.Echo strPrinter(0) & ", " & _
objPrintJob.JobID & ", " & objPrintJob.Owner & ", " _
& objPrintJob.TotalPages
Next

Modify Printer Locations


Uses ADSI to configure the location attribute for all the printers in a specified OU.
Set objOU = GetObject("LDAP://OU = Finance, DC = fabrikam, DC = com")
objOU.Filter = Array("printqueue")

For Each objPrintQueue In objOU
objPrintQueue.Put "Location" , "USA/Redmond/Finance Building"
objPrintQueue.SetInfo
Next

Modify Printer Priority


Sets the priority for a printer to 2.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrinters = objWMIService.ExecQuery _
("Select * From Win32_Printer where DeviceID = 'ArtDepartmentPrinter' ")

For Each objPrinter in colPrinters
objPrinter.Priority = 2
objPrinter.Put_
Next

Monitor Print Queue Times


Identifies any print jobs that have been in the print queue for more than 15 minutes.
Const USE_LOCAL_TIME = True

Set DateTime = CreateObject("WbemScripting.SWbemDateTime")

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_PrintJob")

Wscript.Echo "Print Queue, Job ID, TimeSubmitted, Total Pages"

For Each objPrinter in colInstalledPrinters
DateTime.Value = objPrinter.TimeSubmitted
dtmActualTime = DateTime.GetVarDate(USE_LOCAL_TIME)
TimeinQueue = DateDiff("n", actualTime, Now)
If TimeinQueue > 15 Then
strPrinterName = Split(objPrinter.Name,",",-1,1)
Wscript.Echo strPrinterName(0) & ", " _
& objPrinter.JobID & ", " & dtmActualTime & ", " & _
objPrinter.TotalPages
End If
Next

Monitor Print Queues


Uses cooked performance counters to return the number of jobs currently in each print queue on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintQueues = objWMIService.ExecQuery _
("Select * from Win32_PerfFormattedData_Spooler_PrintQueue " & _
"Where Name <> '_Total'")

For Each objPrintQueue in colPrintQueues
Wscript.Echo "Name: " & objPrintQueue.Name
Wscript.Echo "Current jobs: " & objPrintQueue.Jobs
Next

Monitor Printers with a Temporary Event Subscription


Uses a temporary event consumer to issues alerts any time a printer changes status.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrinters = objWMIService. _
ExecNotificationQuery("Select * from __instancemodificationevent " _
& "within 30 where TargetInstance isa 'Win32_Printer'")
i = 0

Do While i = 0
Set objPrinter = colPrinters.NextEvent
If objPrinter.TargetInstance.PrinterStatus <> _
objPrinter.PreviousInstance.PrinterStatus Then
Select Case objPrinter.TargetInstance.PrinterStatus
Case 1 strCurrentState = "Other"
Case 2 strCurrentState = "Unknown"
Case 3 strCurrentState = "Idle"
Case 4 strCurrentState = "Printing"
Case 5 strCurrentState = "Warming Up"
End Select
Select Case objPrinter.PreviousInstance.PrinterStatus
Case 1 strPreviousState = "Other"
Case 2 strPreviousState = "Unknown"
Case 3 strPreviousState = "Idle"
Case 4 strPreviousState = "Printing"
Case 5 strPreviousState = "Warming Up"
End Select
Wscript.Echo objPrinter.TargetInstance.Name _
& " is " & strCurrentState _
& ". The printer previously was " & strPreviousState & "."
End If
Loop

Monitor Spooler Print Queue Performance


Uses cooked performance counters to return information about print jobs spooled on a print server.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_Spooler_PrintQueue").objectSet
objRefresher.Refresh

For i = 1 to 5
For Each objItem in colItems
Wscript.Echo "Add Network Printer Calls: " & _
objItem.AddNetworkPrinterCalls
Wscript.Echo "Bytes Printed Per Second: " & objItem.BytesPrintedPersec
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "Enumerate Network Printer Calls: " & _
objItem.EnumerateNetworkPrinterCalls
Wscript.Echo "Job Errors: " & objItem.JobErrors
Wscript.Echo "Jobs: " & objItem.Jobs
Wscript.Echo "Jobs Spooling: " & objItem.JobsSpooling
Wscript.Echo "Maximum Jobs Spooling: " & objItem.MaxJobsSpooling
Wscript.Echo "Maximum References: " & objItem.MaxReferences
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "Not-Ready Errors: " & objItem.NotReadyErrors
Wscript.Echo "Out-of-Paper Errors: " & objItem.OutofPaperErrors
Wscript.Echo "References: " & objItem.References
Wscript.Echo "Total Jobs Printed: " & objItem.TotalJobsPrinted
Wscript.Echo "Total Pages Printed: " & objItem.TotalPagesPrinted
Wscript.Sleep 2000
objRefresher.Refresh
Next
Next

Monitor the Print Service


Returns the status of the Spooler service (running, stopped, paused, etc.).
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colRunningServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where Name = 'Spooler'")

For Each objService in colRunningServices
Wscript.Echo objService.DisplayName & " -- " & objService.State
Next

Notify Users When a Print Queue is Purged


Uses Msg.exe to send a network alert to any users who had documents in a print queue about to be purged. After sending the alerts, the script purges the print queue.
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Set objDictionary = CreateObject("Scripting.Dictionary")

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrintJobs = objWMIService.ExecQuery _
("Select * from Win32_PrintJob")

For Each objPrintJob in colInstalledPrintJobs
strPrinterName = Split(objPrintJob.Name,",",-1,1)
If objDictionary.Exists(objPrintJob.Notify) Then
Else
objDictionary.Add objPrintJob.Notify, strPrinterName(0)
End If
Next

arrKeys = objDictionary.Keys
arrItems = objDictionary.Items

For i = 0 to objDictionary.Count - 1
Message = "The documents you were printing on printer "
Message = Message & arrItems(i)
Message = Message & " had to be deleted from the print queue. "
Message = Message & "You will need to reprint these documents."
CommandString = "%comspec% /c msg " & arrKeys(i) & " " & Chr(34) _
& Message & Chr(34)
WshShell.Run CommandString, 0, True
Next

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
objPrinter.CancelAllJobs()
Next

Pause All Print Jobs


Pauses all the print jobs on a print server.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintJobs = objWMIService.ExecQuery _
("Select * from Win32_PrintJob")

For Each objPrintJob in colPrintJobs
objPrintJob.Pause
Next

Pause a Printer


Pauses a printer named ArtDepartmentPrinter.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Name = 'ArtDepartmentPrinter'")

For Each objPrinter in colInstalledPrinters
ObjPrinter.Pause()
Next

Pause All Printers with Empty Print Queues


Pauses any printers that have no pending print jobs.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
Set colPrintJobs = objWMIService.ExecQuery _
("Select * from Win32_PerfFormattedData_Spooler_PrintQueue " _
& "Where Name = '" & objPrinter.Name & "'")
For Each objPrintQueue in colPrintJobs
If objPrintQueue.Jobs = 0 and objPrintQueue.Name <> "_Total" Then
objPrinter.Pause()
End If
Next
Next

Purge a Print Queue


Deletes all the print jobs for a printer named HP QuietJet.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Name = 'HP QuietJet'")

For Each objPrinter in colInstalledPrinters
objPrinter.CancelAllJobs()
Next

Resume All Print Jobs


Resumes all the print jobs on a computer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colPrintJobs = objWMIService.ExecQuery _
("Select * from Win32_PrintJob")

For Each objPrintJob in colPrintJobs
objPrintJob.Resume
Next

Resume All Paused Printers


Resumes all the paused printers on a print server.
Const PRINTER_IS_PAUSED = 8

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer where ExtendedPrinterStatus = 8")

For Each objPrinter in colInstalledPrinters
ObjPrinter.Resume()
Next

Resume a Paused Printer


Resumes a paused printer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Name = 'ArtDepartmentPrinter'")

For Each objPrinter in colInstalledPrinters
ObjPrinter.Resume()
Next

Rename a Printer Published in Active Directory


Uses the MoveHere method to rename a published printer in an OU.
Set objOU = GetObject("LDAP://ou=HR,dc=NA,dc=fabrikam,dc=com")

objOU.MoveHere _
"LDAP://cn=Printer1,ou=HR,dc=NA,dc=fabrikam,dc=com", "cn=HRPrn1"

Search Active Directory for Specific Printers


Searches Active Directory for all printers with a priority of 2.
Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")

objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = "Select printerName, serverName from " _
& "'LDAP://DC=fabrikam,DC=com' where objectClass='printQueue' and " _
& " Priority = 2 "
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
Wscript.Echo "Printer Name: " & objRecordSet.Fields("printerName").Value
Wscript.Echo "Server Name: " & objRecordSet.Fields("serverName").Value
objRecordSet.MoveNext
Loop

Transfer Print Jobs to a Different Print Queue


Changes the TCP/IP printer port for a logical printer, which has the net effect of transferring existing print jobs to the new printer port, and thus to a different printer.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set objPrinter = objWMIService.Get _
("Win32_Printer.DeviceID='ArtDepartmentPrinter'")

objPrinter.PortName = "IP_192.168.1.10"
objPrinter.Put_

Update Printer Locations


Uses ADSI to update the location attribute for all printers in a specified OU.
Set objOU = GetObject("LDAP://OU=Finance, DC=fabrikam, DC=com")
objOU.Filter = Array("printqueue")

For Each objPrintQueue In objOU
strNewLocation = "Redmond/" & objPrintQueue.Location
objPrintQueue.Put "Location" , strNewLocation
objPrintQueue.SetInfo
Next
Enlace original: http://mirror1.activexperts.com/activmo ... #DALPJ.htm

Este es otro enlace de Wmi para enviar Sms con la herramienta de este fabricante:
http://es.activexperts.com/xmstoolkit/
En este tópico comentan, que quizás debes recuperar el nombre del impresora con una función y luego usarlo, porque el nombre puede que esté mal???http://www.autoitscript.com/forum/index ... ntry278538
Salu22:)
EDIT: Otros ejemplos de como serían unas funciones de uso de impresoras Creditos a Danny35d :

Código: Seleccionar todo

Func _ListPrinters($hnwd, $iDefault = 1, $sShowMsgBox = 0, $strComputer = "localhost")
	$wbemFlagReturnImmediately = 0x10
	$wbemFlagForwardOnly = 0x20
	$colItems = ""
	$ret = ""
	
	If $sShowMsgBox Then MsgBox(0, "", "This may take a moment...Please wait until the search for printer share is complete.", 2)
	If $iDefault Then GUICtrlSetData($Label1, '')
	$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
	If Not @error = 0 Then
		MsgBox(48, "ERROR", "No Printers Found. Possible issues: " & @CRLF _
				 & "" & @CRLF _
				 & "  1. The Windows Print Server name has been entered in incorrectly." & @CRLF _
				 & "  2. You are trying to access a Novell Server. This utility does not support Novell Print Servers." & @CRLF _
				 & "  3. There are no printers shared on the Windows Print Server you selected.")
		Return('')
	EndIf
	$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL", _
        $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
		
	_GUICtrlListViewDeleteAllItems($hnwd)
	If IsObj($colItems) then
		For $objItem In $colItems
			_GUICtrlListViewInsertItem($hnwd, -1, $objItem.Caption)
			If StringLower($strComputer) <> 'localhost' Then $ret &= '|' & $objItem.Caption
			If $iDefault And $objItem.Default == -1 Then GUICtrlSetData($Label1, StringLeft($objItem.Caption, 30))
		Next
		If $ret <> '' Then IniWrite($IniFile, $strComputer, 'PrinterList', StringTrimLeft($ret, 1))
	Else
		Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Printer" )
	Endif
EndFunc

Func _AddPrinter($PRINTERSHARE, $Server)
	$Pos = _ChildWindowCenter('Add Network Printers', 305, 131)
	ProgressOn('Add Printer', 'Adding Printer', '', $Pos[0], $Pos[1])
	For $x = 1 To $PRINTERSHARE[0]
		$ret = '\\' & StringReplace($Server, '\', '') & '\' & _GUICtrlListViewGetItemText($ListView2, $PRINTERSHARE[$x])
		ProgressSet(Int(($x/$PRINTERSHARE[0]) * 100), $ret)
		RunWait("rundll32 printui.dll,PrintUIEntry /in /q /n" & $ret)
		_GUICtrlListViewSetItemSelState($ListView2, $PRINTERSHARE[$x], 0)
	Next
	Sleep(1500)
	_ListPrinters($ListView1)
	ProgressOff()
EndFunc

Func _RemovePrinter($PRINTERSHARE)
	$Pos = _ChildWindowCenter('Network Printer Utility', 305, 131)
	ProgressOn('Remove Printer', 'Removing Printer', '', $Pos[0], $Pos[1])
	For $x = 1 To $PRINTERSHARE[0]
		$ret = _GUICtrlListViewGetItemText($ListView1, $PRINTERSHARE[$x])
		ProgressSet(Int(($x/$PRINTERSHARE[0]) * 100), $ret)
		If StringLeft($ret, 2) == '\\' Then
			RunWait(@ComSpec & ' /c RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /dn /q /n "' & $ret & '"', '', @SW_HIDE) ; Remove Network Printer
		Else
			RunWait(@ComSpec & ' /c RUNDLL32 PRINTUI.DLL,PrintUIEntry /dl /c\\' & @ComputerName & ' /n "' & $ret & '"', '', @SW_HIDE) ; Remove Local Printer	
		EndIf
		_GUICtrlListViewSetItemSelState($ListView1, $PRINTERSHARE[$x], 0)
	Next
	Sleep(1500)
	_ListPrinters($ListView1, 1)
	ProgressOff()
EndFunc

Func _ChangePrinter($PRINTERSHARE)
	RunWait(@ComSpec & " /c RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & '"' & $PRINTERSHARE & '"', "", @SW_HIDE)
	GUICtrlSetData($Label1, StringLeft($PRINTERSHARE, 30))
EndFunc

Func _ChildWindowCenter($sParentTitle, $ChildWidth, $ChildHeight)
	Opt("WinTitleMatchMode", 4)
	$taskbar = WinGetPos("classname=Shell_TrayWnd")
	$MainGUIsize = WinGetPos($sParentTitle)
	$MainGUIsize[0] = ($MainGUIsize[2] - $ChildWidth) / 2 + $MainGUIsize[0]
	$MainGUIsize[1] = ($MainGUIsize[3] - $ChildHeight) /2 + $MainGUIsize[1]
	If $MainGUIsize[0] < 0 Then $MainGUIsize[0] = 0
	If $MainGUIsize[0] > (@DesktopWidth - $ChildWidth) Then $MainGUIsize[0] = @DesktopWidth - $ChildWidth
	If $MainGUIsize[1] < 0 Then $MainGUIsize[1] = 0
	If $MainGUIsize[1] > ($taskbar[1] - $ChildHeight) Then $MainGUIsize[1] = $taskbar[1] - $ChildHeight
	Opt("WinTitleMatchMode", 1)
	Return($MainGUIsize)
EndFunc
Dick_
Mensajes: 4
Registrado: 29 Sep 2010, 03:06

Re: Ejemplo de control de la cola de Impresión por programa WXP

Mensaje por Dick_ »

BasicOs realmente sos un kapo y lo mejor es que estas presto para ayudar y contestar a todas las preguntas que se te plantean.
te comento que el programa lo hice andar cambiando el cancel por delete_ anda de 10 ahora el desafio es trabajarlo un poco para lograr un control de impresion donde me avise desde que cliente se esta enviando la impresion, cuantas hojas son y de paso que grabe en un log para que el operador del ciber no nos mienta la cantidad de hojas que imprimio.

muchas gracias por la info.
saludos. :smt039
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Ejemplo de control de la cola de Impresión por programa WXP

Mensaje por BasicOs »

No hay de que, espero ver ese fantástico programa que parece una joya!!
Salu22)
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Ejemplo de control de la cola de Impresión por programa

Mensaje por jamaro »

¿Y ya podemos ver algo de código para poder controlar las páginas que se han imprimido? :smt001

He estado buscando información para controlar las páginas imprimidas (en impresora local) pero todavía no sé cómo.

Saludos

EDITO: Entre otras cosas he encontrado esto de ALLAPI, pero no sé si se puede utilizar en Autoi ni cómo.
jamaro
Hacker del Foro
Mensajes: 253
Registrado: 03 Nov 2010, 23:04

Re: Ejemplo de control de la cola de Impresión por programa

Mensaje por jamaro »

Después de releer este hilo y probar el código expuesto, creo que el camino a seguir en Autoit para registrar el número de copias impresas de una impresora local es utilizando: Win32_PrintJob

De todos modos soy todo oidos y ojos para ayudar a enfocar el código :smt024
Responder