elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Duda con "Win32_PrintJob"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con "Win32_PrintJob"  (Leído 7,094 veces)
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Duda con "Win32_PrintJob"
« en: 1 Febrero 2014, 16:37 pm »

Buenas,

He estado haciendo un tipo de monitoreo de impresoras, cuando el usuario imprime la cola de impresión me da las datos.

Pasa que cuando los pido, los datos de nombre, fecha y nombre del documento me dan lo que necesito, pero cuando trato de averiguar cuántas páginas tiene el documento el programa sólo me retorna 1 y en el caso de las páginas totales 0.

El programa lo estoy haciendo con Visual Studio 2010 y con C#.


Es importante aclarar que he probado con word y notepad, los cuáles se generan con más de 1 página.

Les agradecería si me pudieran ayudar con esto.


Código
  1.  
  2. System.Collections.ArrayList printJobCollection = new System.Collections.ArrayList();
  3.  
  4.        //Obtiene los trabajos que contiene en memoria.
  5.  
  6.        public System.Collections.ArrayList obtenerimpresiones(string PrinterName)
  7.        {
  8.  
  9.            string PrinterJobs = "SELECT * FROM Win32_PrintJob";
  10.            string hora;
  11.  
  12.            ManagementObjectSearcher FindPrintJobs = new ManagementObjectSearcher(PrinterJobs);
  13.            ManagementObjectCollection prntJobCollection = FindPrintJobs.Get();
  14.  
  15.            foreach (ManagementObject prntJob in prntJobCollection)
  16.            {
  17.  
  18.  
  19.                System.String jobName = prntJob.Properties["Name"].Value.ToString();
  20.                System.String pages = prntJob.Properties["PagesPrinted"].Value.ToString();
  21.                System.String print = prntJob.Properties["DriverName"].Value.ToString();
  22.                System.String totalpages = prntJob.Properties["TotalPages"].Value.ToString();
  23.  
  24.  
  25.  
  26.                hora = DateTime.Now.ToString();
  27.  
  28.  
  29.                char[] JobSplit = new char[1];
  30.  
  31.                JobSplit[0] = Convert.ToChar(",");
  32.  
  33.                string prnterName = jobName.Split(JobSplit)[0];
  34.  
  35.                string documentName = "Nombre del documento->" + prntJob.Properties["Document"].Value.ToString() + " Usuario->" + prntJob.Properties["owner"].Value.ToString() + " - Fecha->" + hora + " - Páginas del documento->" + pages + "- Impresora ->" + print + "Total páginas impresas->" + totalpages + "\n";
  36.  
  37.                if (String.Compare(prnterName, PrinterName, true) == 0)
  38.                {
  39.  
  40.                    printJobCollection.Add(documentName);
  41.  
  42.  
  43.                }
  44.  
  45.  
  46.            }
  47.  
  48.  
  49.            return printJobCollection;            
  50.  
  51.  
  52.  
  53.            }
  54.  
  55.  
  56.  
  57.  




En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #1 en: 3 Febrero 2014, 16:01 pm »

¿Nadie sabe?, he estado buscando y hay varias personas con el mismo problema que yo y que no han podido solventarlo, les agradecería que si saben algo me ayuden.


En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #2 en: 6 Febrero 2014, 15:34 pm »

Bueno trataré de plantearlo de otra manera,

Alguno sabe cómo contar o cómo obtener la cantidad de páginas que se han impreso en un documento, he tenido muchos dolores de cabeza por lo mismo y no he podido lograrlo.

Necesito saber si por ejemplo tengo un documento llamado "hola.txt" el usuario dijo que imprimió 5 hojas y lo despliegue.
En línea

Nunca me contestan -_-
Devdox

Desconectado Desconectado

Mensajes: 7



Ver Perfil WWW
Re: Duda con "Win32_PrintJob"
« Respuesta #3 en: 7 Febrero 2014, 19:12 pm »

No estoy muy seguro ya que nunca he probado eso que dices, pero mira a ver si te sirven estos enlaces:

http://stackoverflow.com/questions/12934063/counting-printed-pages-by-clients-with-c-sharp-and-wmi

http://www.codeproject.com/Articles/3313/Monitoring-a-Printer-Queue-from-VB-NET

Posiblemente tengas que adaptar el código un poco, pero es posible que te sirve (especialmente el segundo enlace)
En línea

Mi nuevo blog [en construcción]: http://misternauta.wordpress.com
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #4 en: 7 Febrero 2014, 19:25 pm »

Que buena info @Devdox, para que no se escape el dato importante ...esto lo dice todo:

Código
  1. Public Enum Job_Notify_Field_Indexes
  2.    '...
  3.    JOB_NOTIFY_FIELD_TOTAL_PAGES = &H14
  4.    JOB_NOTIFY_FIELD_PAGES_PRINTED = &H15
  5.    '...
  6. End Enum

Saludos
« Última modificación: 7 Febrero 2014, 19:29 pm por Eleкtro » En línea

Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #5 en: 7 Febrero 2014, 20:59 pm »

Voy a revisarlo, pero GRACIAS ME HAN SALVADO.
En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #6 en: 8 Febrero 2014, 21:21 pm »

Tengo este código con lo que he modificado.

Código
  1.  
  2.  Watcher = new ManagementEventWatcher();
  3.  
  4.  
  5.                    WqlEventQuery query = new WqlEventQuery("Select * From __InstanceOperationEvent Within 1 " +   "Where TargetInstance ISA 'Win32_PrintJob'");
  6.                    Watcher.Query = query;
  7.  
  8.                    dato = Convert.ToInt32(lblcola.Text); // Me indica si hay colas
  9.  
  10.                    if ( dato>= 1)
  11.                    {
  12.                    Watcher.EventArrived += new EventArrivedEventHandler(this.WmiEventHandler);
  13.                   Watcher.Start();
  14.                    //Watcher.Stop();
  15.  
  16.  
  17.  
  18.  
  19.                   lblNombreArchivo.Text = "";
  20.  
  21.                    }
  22.  
  23.  

Y tengo el método del evento

Código
  1.  
  2.  
  3. public void WmiEventHandler(object sender, EventArrivedEventArgs e)
  4.        {
  5.  
  6.           // int contar;
  7.  
  8.  
  9.            string prueba =
  10. ((ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value)["PagesPrinted"].ToString();
  11.  
  12.  
  13.            MessageBox.Show(prueba.ToString());
  14.  
  15.  
  16.  
  17.        }
  18.  
  19.  

Pero sólo me retorna el valor 1, y me salen varios dialogos, pero no la cantidad exacta de las hojas tampoco.


En línea

Nunca me contestan -_-
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #7 en: 8 Febrero 2014, 21:29 pm »

Creo que la query de WMI que estás usando no te puede facilitar el valor correcto para las páginas imprimidas, lee la respuesta de @Anonimista en esta duda ~> http://stackoverflow.com/questions/12934063/counting-printed-pages-by-clients-with-c-sharp-and-wmi intenta adaptarlo a tu code.

Saludos
En línea

Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #8 en: 8 Febrero 2014, 21:49 pm »

Código
  1.  
  2. WqlEventQuery query = new WqlEventQuery("Select * From __InstanceModificationEvent Within 1 Where TargetInstance Isa \"Win32_PrintJob\" And TargetInstance.PagesPrinted > PreviousInstance.PagesPrinted");
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  

La acabo de cambiar pero es peor , porque ahora no me retorna nada. Saludos.

Lo único que necesito es obtener el valor o la cantidad de páginas que se imprimieron, no necesito el nombre del documento,ni la hora, ni el nombre de la impresora, puesto que esos datos ya los saco fácilmente, lamentablemente con esto de las páginas se me ha complicado enormemente!.

« Última modificación: 8 Febrero 2014, 21:53 pm por Yaldabaot » En línea

Nunca me contestan -_-
Yaldabaot

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Duda con "Win32_PrintJob"
« Respuesta #9 en: 11 Febrero 2014, 18:35 pm »

No le llego :(, estoy con esta pero me sigue dando error las clases.

http://www.codeproject.com/Articles/3313/Monitoring-a-Printer-Queue-from-VB-NET

he encontrado gran cantidad de artículos, pero todos son lo mismo que este

http://archive.devnewz.com/devnewz-3-20030622MonitoringaprintqueuefromVisualBasicNet.html

No he encontrado manera de hacerlo.
« Última modificación: 11 Febrero 2014, 23:18 pm por Yaldabaot » En línea

Nunca me contestan -_-
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines