AjithJoseph Ответов: 2

Как получить количество печатных страниц


Привет,

Я создаю приложение c# для windows для нашей классной лаборатории, для мониторинга заданий печати. Я новичок в этой области. Мне нужно отслеживать количество страниц, напечатанных на принтере. (в системе есть несколько принтеров, включая pdf-принтер.) Поэтому моя цель-получить количество успешно напечатанных страниц (количество копий * количество страниц) с конкретного принтера.
Есть ли какой-либо код/справочный документ, доступный для этой цели? Пожалуйста, помогите мне.

Заранее спасибо

2 Ответов

Рейтинг:
6

Richard MacCutchan

Видеть http://msdn.microsoft.com/en-us/library/system.printing.printqueue.aspx[^]. Есть также много функций, доступных в Win32, но вам нужно будет использовать P/Invoke для доступа к ним. этот технический документ[^] может помочь вам.


Little@Knight

Есть ли какой-нибудь способ получить количество копий перед печатью?

Richard MacCutchan

Без понятия, вам нужно будет перейти по ссылкам выше, чтобы узнать это.

Рейтинг:
18

AjithJoseph

Я решил эту проблему с помощью WMI. пример функции находится здесь:

public  void PausePrintJob()
        {
            string searchQuery = "SELECT * FROM Win32_PrintJob";
            ManagementObjectSearcher searchPrintJobs = new ManagementObjectSearcher(searchQuery);
            ManagementObjectCollection prntJobCollection = searchPrintJobs.Get();
            foreach (ManagementObject prntJob in prntJobCollection)
            { 
                string Document = prntJob.Properties["Document"].Value.ToString();
                
                string JobId = prntJob.Properties["JobId"].Value.ToString();
                string name = prntJob.Properties["Name"].Value.ToString();
                string PagePrinted = prntJob.Properties["PagesPrinted"].Value.ToString();
                string Status = prntJob.Properties["Status"].Value.ToString();
                string Totalpages = prntJob.Properties["TotalPages"].Value.ToString();
 
                string[] row = new string[] {Document,JobId,name,PagePrinted,Status,Totalpages};
                bool present = false;
                int i=0;
                foreach (DataGridViewRow item in dataGridView1.Rows)
                {
                    if (Convert.ToString(item.Cells["JobId"].Value) == JobId)
                    {
                        present = true;
                        break;
                    }
                    ++i;
                }
                if (present)
                {
                    dataGridView1.Rows.RemoveAt(i);
 
                }
                dataGridView1.Rows.Add(row);
 
            }
           
        }