Little@Knight Ответов: 0

Всем привет, у меня проблема с получением количества копий для печати.


Я пытался получить количество копий, которые будут напечатаны перед печатью, используя приведенный ниже исходный код
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

0 Ответов