Duda en visual FoxPro
<span style="border-collapse: collapse; color: #4a4a4a; font-family: Arial; line-height: 17px;">Tengo un detalle, como puedo saber cuando una impresora de red esta prendida o apagada???? Me pasaron el dato de un codigo el cual utiliza Win32_PrintJob para manipular varias propiedades de la impresora, e revisado el codigo muchas veces pero no puedo hacerlo funcionar, hay otras como Win32_PrinterDriver q si funcionan (muestra datos de tipo de papel, calidad de impresion, oientacion, etc), no se a que se deba, si sea por el windows que utilizo o por la version de FoxPro, manejo la version 8.
LOCAL lcNameSpace
LOCAL loLocalizador, loServicio, loColaImpresion, loTrabajo
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.
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
*
WAIT WINDOW "entra"
? LoTrabajo. JobId
? LoTrabajo. Name
? LoTrabajo. Document
? LoTrabajo. DataType
? LoTrabajo. DriverName
? LoTrabajo. Description
? LoTrabajo. ElapsedTime
? LoTrabajo. HostPrintQueue
? LoTrabajo. JobStatus
? LoTrabajo. Notify
? LoTrabajo. Owner
? LoTrabajo. PagesPrinted
? LoTrabajo. Parameters
? LoTrabajo. Size
? LoTrabajo. StartTime
? LoTrabajo. UntilTime
? LoTrabajo. Status
? LoTrabajo. StatusMask
? LoTrabajo. TimeSubmitted
? LoTrabajo. TotalPages
*
Endfor
Me comentaban también que puedo utilizar el printstatus(), pero necesito deshabilitar la consola de la cola de impresión, ¿en qué me afecta si hago esto? ¿Qué pasa si no tengo activada la cola de impresión y se mandan documentos al mismo tiempo de varias maquinas? No e intentado probar esta forma porque creo que no es funcional.
¿Conoces algún otro método para manipular la impresora?
¿Qué me recomiendas hacer?
Gracias, espero una respuesta satisfactoria a mis dudas
Atentamente.
Juan Carlos
Ing. Computacion - Area de sistemas </span>
LOCAL lcNameSpace
LOCAL loLocalizador, loServicio, loColaImpresion, loTrabajo
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.
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
*
WAIT WINDOW "entra"
? LoTrabajo. JobId
? LoTrabajo. Name
? LoTrabajo. Document
? LoTrabajo. DataType
? LoTrabajo. DriverName
? LoTrabajo. Description
? LoTrabajo. ElapsedTime
? LoTrabajo. HostPrintQueue
? LoTrabajo. JobStatus
? LoTrabajo. Notify
? LoTrabajo. Owner
? LoTrabajo. PagesPrinted
? LoTrabajo. Parameters
? LoTrabajo. Size
? LoTrabajo. StartTime
? LoTrabajo. UntilTime
? LoTrabajo. Status
? LoTrabajo. StatusMask
? LoTrabajo. TimeSubmitted
? LoTrabajo. TotalPages
*
Endfor
Me comentaban también que puedo utilizar el printstatus(), pero necesito deshabilitar la consola de la cola de impresión, ¿en qué me afecta si hago esto? ¿Qué pasa si no tengo activada la cola de impresión y se mandan documentos al mismo tiempo de varias maquinas? No e intentado probar esta forma porque creo que no es funcional.
¿Conoces algún otro método para manipular la impresora?
¿Qué me recomiendas hacer?
Gracias, espero una respuesta satisfactoria a mis dudas
Atentamente.
Juan Carlos
Ing. Computacion - Area de sistemas </span>
1 respuesta
Respuesta de Cesar Enrique Yamunaque Baca
1