Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.

php?f=4&t=13&p=13&hili...

Autoit en Español (www.Autoit.es)
Descarga programas libres y Open-Source. Añade tu programa a la librería de Scripts en Autoit.es Obviar

Búsqueda avanzada Índice general ‹ Autoit en Español ‹ esScripts - Programas - Abre tus creaciones maravillosas Cambiar tamaño de la fuente Imprimir vista FAQ Registrarse Identificarse

Ejemplo de control de la cola de Impresión por programa WXP
Publicar una respuesta

7 mensajes • Página 1 de 1

Ejemplo de control de la cola de Impresión por programa WXP
por BasicOs » 24 Nov 2006, 02:44 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

1 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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 En Español http://www.autoit.es. Crea Programas únicos con AutoIt. ¡Saltate la barrera de lo imposible en programación!!

BasicOs Site Admin Mensajes: 1587 Registrado: 21 Nov 2006, 19:24 Ubicación: El Internet - (Canarias, España) Sitio web Arriba

Re: Ejemplo de control de la cola de Impresión por programa WXP
por Dick_ » 29 Sep 2010, 03:13 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. Dick_ Mensajes: 4 Registrado: 29 Sep 2010, 03:06
2 de 22 12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

Arriba

Re: Ejemplo de control de la cola de Impresión por programa WXP
por BasicOs » 29 Sep 2010, 10:56 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_
3 de 22 12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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"

4 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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

5 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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 = "."

6 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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")

7 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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"

8 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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")

9 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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")

10 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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

11 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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

12 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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

13 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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:" _

14 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

& "{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

15 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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 "

16 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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.php?showtopic=33035& st=0&p=278538&hl=$objPrintJob&fromsearch=1&#entry278538 Salu22:) EDIT: Otros ejemplos de como serían unas funciones de uso de impresoras Creditos a Danny35d :

17 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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)

18 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

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

En Español http://www.autoit.es. Crea Programas únicos con AutoIt. ¡Saltate la barrera de lo imposible en programación!!

19 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

BasicOs Site Admin Mensajes: 1587 Registrado: 21 Nov 2006, 19:24 Ubicación: El Internet - (Canarias, España) Sitio web Arriba

Re: Ejemplo de control de la cola de Impresión por programa WXP
por Dick_ » 01 Oct 2010, 03:39 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. Dick_ Mensajes: 4 Registrado: 29 Sep 2010, 03:06 Arriba

Re: Ejemplo de control de la cola de Impresión por programa WXP
por BasicOs » 01 Oct 2010, 13:02 No hay de que, espero ver ese fantástico programa que parece una joya!! Salu22) En Español http://www.autoit.es. Crea Programas únicos con AutoIt. ¡Saltate la barrera de lo imposible en programación!!

BasicOs Site Admin Mensajes: 1587

20 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

Registrado: 21 Nov 2006, 19:24 Ubicación: El Internet - (Canarias, España) Sitio web Arriba

Re: Ejemplo de control de la cola de Impresión por programa
por jamaro » 20 Sep 2011, 08:46 ¿Y ya podemos ver algo de código para poder controlar las páginas que se han imprimido? 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: 195 Registrado: 03 Nov 2010, 23:04 Arriba

Re: Ejemplo de control de la cola de Impresión por programa
por jamaro » 20 Sep 2011, 13:22 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 jamaro Hacker del Foro Mensajes: 195 Registrado: 03 Nov 2010, 23:04 Arriba Mostrar mensajes previos: Publicar una respuesta 7 mensajes • Página 1 de 1 Ordenar por

21 de 22

12/02/2012 12:00 a.m.

Ejemplo de control de la cola de Impresión por programa WXP • esScripts... http://www.emesn.com/autoitforum/viewtopic.php?f=4&t=13&p=13&hili...

Volver a esScripts - Programas - Abre tus creaciones maravillosas Saltar a:

¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados Índice general El Equipo • Borrar todas las cookies del Sitio • Todos los horarios son UTC + 1 hora [ DST ]

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group Traducción al español por Huan Manwë

22 de 22

12/02/2012 12:00 a.m.