##### http://www.lawebdelprogramador.com ##### ##### RESPUESTA A LA PREGUNTA 51723 - VISUAL FOXPRO ##### LOCAL lcNameSpace LOCAL loLocalizador, loServicio, loColaImpresion, loTrabajo, loAccionTrabajo * STORE.NULL. TO loLocalizador && Objeto WbemScripting.SWbemLocator para realizar realizar la conexión. STORE .NULL. TO loServicio && Objeto para aplicar el servicio en base a la conexión. STORE .NULL. TO loColaImpresion && Objeto con los datos en la cola de impresión. STORE .NULL. TO loTrabajo && Objeto temporal para realizar el FOR EACH. STORE "\root\CIMV2" TO lcNameSpace && Explorar clases del Namespace. * * CREACIÓN DEL OBJETO. * loLocalizador = CREATEOBJECT( "WbemScripting.SWbemLocator" ) * * PROCESO PARA REALIZAR LA CONEXIÓN AL PC. * * Estos son los parámetros necesarios para la conexión. * * lcPC * lcNameSpace * lcUsusario * lcPassword * *!* loServicio = loLocalizador.ConnectServer( lcPC, lcNameSpace , lcUsusario, lcPassword ) * * PARA REALIZAR UNA CONEXIÓN LOCAL, ES DECIR A NUESTRO PC, SERÍA SUFICIENTE CON: * loServicio = loLocalizador.ConnectServer( ".", lcNameSpace, "", "" ) * * Una vez conseguida la conexión al PC (Local o Remoto) * * Debemos de tener en consideración las siguientes asignaciones [1] y [2]: * * [1] ImpersonationLevel * Valor numérico que define el nivel de impersonation del objeto COM. * Con esto se determina si los procesos de WMI pueden detectar o usar * las credenciales de seguridad al realizar las llamadas a otros procesos. * loServicio.Security_.impersonationlevel = 3 * * [2] Tareas administrativas. * Con esto podemos realizar las tareas administrativas en el Servicio del Spooler. * loServicio.Security_.Privileges.AddAsString( "SeLoadDriverPrivilege" ) * * El proceso que realizamos a continuación, nos permitirá enumerar. * Para obtener en el retorno, los casos de una clase dada, * en nuestro caso, lo realizamos sobre la clase en cuestión "Win32_PrintJob" * * Resumiendo: Nos retorna una colección en base a la clase dada. * * A partir de este objeto, podemos realizar el FOR EACH, para listar * los trabajos existentes en la cola de impresión (spooler) * loColaImpresion = loServicio.InstancesOf( "Win32_PrintJob" ) * *------------------------- * Estos datos pueden ser llevados, fácilmente a un CURSOR VFP. * Y ser visualizados en un GRID. * Podemos ver la estructura de la clase "Win32_PrintJob", en el anexo. *------------------------- * FOR EACH loTrabajo IN loColaImpresion * CLEAR _screen.FontName= "Courier New" ?"ID: "+TRANSFORM(loTrabajo.JobId) ?"Nombre: "+loTrabajo.Name ?"Documento: "+loTrabajo.Document ?"Tipo: "+loTrabajo.DataType ?"Driver: "+loTrabajo.DriverName ?"Descripcion:"+loTrabajo.Description ?"Host: "+TRANSFORM(loTrabajo.HostPrintQueue) ?"Estado: "+loTrabajo.JobStatus ?"Noticia: "+loTrabajo.Notify ?"Ower: "+loTrabajo.Owner ?"Impresas: "+TRANSFORM(loTrabajo.PagesPrinted) ?"Tamaño: "+TRANSFORM(loTrabajo.Size) ?"Inicio: "+loTrabajo.StartTime ?"Until: "+loTrabajo.UntilTime ?"Estado: "+loTrabajo.Status ?"Mask: "+TRANSFORM(loTrabajo.StatusMask) lcFecha=(TRANSFORM(INT(VAL(loTrabajo.TimeSubmitted)))) lcFecha=SUBSTR(lcFecha,1,4)+"-"+SUBSTR(lcFecha,5,2)+"-"+SUBSTR(lcFecha,7,2)+"T"+SUBSTR(lcFecha,9,2)+":"+SUBSTR(lcFecha,11,2)+":"+SUBSTR(lcFecha,13) lcFecha=CTOT(lcFecha) ?lcFecha ?loTrabajo.TotalPages loAccionTrabajo = loServicio.Get( "Win32_PrintJob.Name='" + ALLTRIM(loTrabajo.Name) + "'" ) loAccionTrabajo.Delete_( ) *loAccionTrabajo.Pause( ) *loAccionTrabajo.Resume( ) * ENDFOR *!* Win32_PrintJob (MOF - Managed Object Format) *!* class Win32_PrintJob : CIM_Job *!* { *!* string Caption; *!* string DataType; *!* string Description; *!* string Document; *!* string DriverName; *!* datetime ElapsedTime; *!* string HostPrintQueue; *!* datetime InstallDate; *!* uint32 JobId; *!* string JobStatus; *!* string Name; *!* string Notify; *!* string Owner; *!* uint32 PagesPrinted; *!* string Parameters; *!* string PrintProcessor; *!* uint32 Priority; *!* uint32 Size; *!* datetime StartTime; *!* string Status; *!* uint32 StatusMask; *!* datetime TimeSubmitted; *!* uint32 TotalPages; *!* datetime UntilTime; *!* }; *!* *!* Win32_PrintJob (propiedades) *!* Caption: string *!* DataType: string *!* Description: string *!* Document: string *!* DriverName: string *!* ElapsedTime: datetime *!* HostPrintQueue: string *!* InstallDate: datetime *!* JobId: uint32 (valor numérico) *!* JobStatus: string *!* Name: string *!* Notify: string *!* Owner: string *!* PagesPrinted: uint32 (valor numérico) *!* Parameters: string *!* PrintProcessor: string *!* Priority: uint32 (valor numérico) *!* Size: uint32 (valor numérico) *!* StarTime: datetime *!* Status: string *!* Valores posibles: *!* "OK" *!* "Error" *!* "Degraded" *!* "Unknown" *!* "Pred Fail" *!* "Starting" *!* "Stopping" *!* "Service" *!* "Stressed" *!* "NonRecover" *!* "No Contact" *!* "Lost Comn" *!* StatusMask: uint32 (valor numérico) *!* Valores posibles: *!* 1 = Paused *!* 2 = Error *!* 4 = Deleting *!* 8 = Spooling *!* 16 = Printing *!* 32 = Offline *!* 64 = Paperout *!* 128 = Printed *!* 256 = Deleted *!* 512 = Blocked DevQ *!* 1024 = User Intervention Req *!* 2048 = Restart *!* TimeSubmitted: datetime *!* TotalPages: uint32 (valor numérico) *!* UntilTime: datetime ##### JOSE GUILLERMO ORTIZ HERNANDEZ - jgoh_ingeniero@hotmail.com #####