Всем привет, у меня проблема с получением количества копий для печати.
Я пытался получить количество копий, которые будут напечатаны перед печатью, используя приведенный ниже исходный код
class Program { static void Main(string[] args) { Printer p = new Printer(); p.StartWatching("HP LaserJet MFP M725 PCL 6"); c(); } public static void c() { int counter = 0; string line; // Read the file and display it line by line. System.IO.StreamReader file = new System.IO.StreamReader("C:\\Users\\a1410043\\Documents\\important.txt"); while ((line = file.ReadLine()) != null) { Console.WriteLine(line); counter++; } file.Close(); // Suspend the screen. Console.ReadLine(); } } class Printer { private PrinterMonitorComponent mPr; public static int a = 0; public void StartWatching(string PrinterDeviceName) { mPr = new PrinterMonitorComponent(); mPr.MonitorPrinterChangeEvent = false; a = totalPages(); mPr.JobAdded += Addedtest; // mPr.JobAdded += c; try { mPr.DeviceName = PrinterDeviceName; } catch (Exception e) { Console.WriteLine(e.Message + "\n==================" + e.StackTrace); } } private void c(object sender, PrintJobEventArgs args) { } public static int totalPages() { List<PrintSystemJobInfo> jobInfos = new List<PrintSystemJobInfo>(); LocalPrintServer server = new LocalPrintServer(); try { // return server.DefaultPrintQueue.GetPrintJobInfoCollection().ElementAt(server.DefaultPrintQueue.GetPrintJobInfoCollection().Count()).NumberOfPages; return (server.DefaultPrintQueue.GetPrintJobInfoCollection().ElementAt(server.DefaultPrintQueue.GetPrintJobInfoCollection().Count() - 1).NumberOfPages); } catch { return -1; } } public void Addedtest(object sender, PrintJobEventArgs e) { List<PrintSystemJobInfo> jobInfos = new List<PrintSystemJobInfo>(); LocalPrintServer server = new LocalPrintServer(); e.PrintJob.Commit(); Console.WriteLine("Total Pages: " + a * e.PrintJob.Copies); Console.WriteLine("No of Copies: " + e.PrintJob.Copies); Console.WriteLine("Printer Name: " + e.PrintJob.PrinterName); Console.WriteLine("User Name: " + e.PrintJob.UserName); Console.WriteLine("Document Name: " + e.PrintJob.Document); Console.WriteLine("Data submitted: " + e.PrintJob.Submitted + "\n"); //File.WriteAllText("C:\\Users\\a1410043\\Documents\\copyvalue.txt\\", e.PrintJob.Copies.ToString()); using (StreamWriter writer = new StreamWriter("C:\\Users\\a1410043\\Documents\\important.txt")) { writer.Write(a * e.PrintJob.Copies); } //// //// e.PrintJob.Update(); } }
Что я уже пробовал:
Я мог бы получить количество копий с помощью кода, но я не могу интегрировать его в службу windows, которая состоит из WMI event watcher для наблюдения за конкретным свойством класса управления "Win32_PrintJob". Проблема в том, что когда я звоню StartWatching, как
WqlEventQuery q;
ManagementScope scope = new ManagementScope("root\\CIMV2"); scope.Options.EnablePrivileges = true; try { q = new WqlEventQuery(); q.EventClassName = "__InstanceCreationEvent"; q.WithinInterval = new TimeSpan(1); q.Condition = @"TargetInstance ISA 'Win32_PrintJob'"; w = new ManagementEventWatcher(scope, q); w.EventArrived += new EventArrivedEventHandler(PausePrinterManagement); w.EventArrived += new PrintJob<eventhandler>(this.StartWatching); w.Start(); } catch (Exception e) { Console.WriteLine(e.Message); if (w != null) w.Stop(); }
Я не мог получить количество копий. Кто-нибудь может дать мне инструкции?
Заранее спасибо!
Little@Knight
Может ли кто-нибудь иметь представление об этом?
jayveebishie
почему бы не использовать систему?Рисование.Печатание.Объект printdocument