Je demande à Win32_PrintJob classe WMI chaque fois qu'il y a un changement avec ManagementEventWatcher, j'ai obtenu des données à ce sujet, telles que: Document, HostPrintQueue, JobId, JobStatus, TotalPages, etc Mais TotalPages ne représente pas le nombre réel de page à imprimer, semble actuellement pour obtenir ces données encore le travail d'impression n'a pas fini de traiter et de décentrer un certain nombre de pages à imprimer dans ce moment mais le total réel est autre Comment obtenir le nombre réel d'un travail d'impression lorsque vous le finissez? Voici mon code:Nombre réel de TotalPages d'un PrintJob (Win32_PrintJob)
ManagementEventWatcher createPrintJobWatcher;
String strComputerName = ".";
// Create event query to be notified within 1 milli second of a change in a service
WqlEventQuery createPrintJobQuery = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 0.001 WHERE TargetInstance ISA \"Win32_PrintJob\"");
createPrintJobWatcher = new ManagementEventWatcher();
createPrintJobWatcher.Scope = new ManagementScope("\\\\" + strComputerName + "\\root\\CIMV2");
createPrintJobWatcher.Query = createPrintJobQuery;
// times out watcher.WaitForNextEvent in 1 seconds
createPrintJobWatcher.Options.Timeout = new TimeSpan(0, 0, 1);
//set the print event handler
createPrintJobWatcher.EventArrived += new EventArrivedEventHandler(createPrintJobListener);
createPrintJobWatcher.Start();
Console.WriteLine("Listening...");
Console.ReadLine();
méthode createPrintJobListener:
static void createPrintJobListener(object sender, EventArrivedEventArgs e)
{
SelectQuery query = new SelectQuery("Win32_PrintJob");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection printJobs = searcher.Get())
foreach (ManagementObject printJob in printJobs)
{
Console.WriteLine("c1:", printJob);
Console.WriteLine("ID: {0}", printJob.GetPropertyValue("JobId").ToString());
Console.WriteLine("name: {0}", printJob.GetPropertyValue("name").ToString());
Console.WriteLine("status: {0}", printJob.GetPropertyValue("status").ToString());
if (printJob.GetPropertyValue("JobStatus") != null)
{
Console.WriteLine("JobStatus: {0}", printJob.GetPropertyValue("JobStatus").ToString());
}
else
{
Console.WriteLine("JobStatus: NULLLLLL");
}
Console.WriteLine("PC: {0}", printJob.GetPropertyValue("HostPrintQueue").ToString());
Console.WriteLine("TOTOAL PAGES: {0}", printJob.GetPropertyValue("TotalPages").ToString());
}
}
merci pour votre réponse. J'ai déjà trouvé la solution pour cela, le problème était que je demandais le nombre total de pages d'impression au mauvais moment. Lorsque le statut du travail d'impression est "Impression", c'est le moment d'obtenir cette valeur, du moins c'est comme cela que cela a fonctionné pour moi. Maintenant, le problème est avec la valeur de dmCopies dans le paysage quand j'imprime un document Word, montre toujours 1. Par ailleurs, il ya un moyen d'obtenir le nombre total historique d'une imprimante avec C#? – karelp90
Windows ne conserve pas les informations de nombre de pages historiques. Les imprimantes haut de gamme le font si vous voulez jouer avec [SNMP] (https://tools.ietf.org/html/rfc3805). –