Перехват очереди печати на C#
Мне нравится моя работа. Постоянно заказчики дают такие задачи, которые однотипными никак нельзя назвать. Вот, например, для одного проекта потребовалось создать программу, одной из функций которой – управление очередью печати принтера. Необходимо было написать такое приложение, которое могло бы перехватывать документы (файлы), отправленные на печать и останавливать их. Далее надо управлять цветовым профилем и снова отправлять распечатывать.
На самом деле задача решается до смешного просто. Подключаем System.Printing:
using System.Printing;Не забываем также добавить ссылку в проект! Далее кидаем на форму backgroundWorker1, запускаем его по нажатию кнопки:
backgroundWorker1.RunWorkerAsync();И прописываем обработчик для него:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { Boolean flag = true; LocalPrintServer server = new LocalPrintServer(); while (flag) { string[] dirs = Directory.GetFiles(@"C:\Windows\System32\spool\PRINTERS"); if (dirs.Length > 0) { foreach (PrintSystemJobInfo jobInfo in server.DefaultPrintQueue.GetPrintJobInfoCollection()) { jobInfo.Pause(); MessageBox.Show(jobInfo.Name); flag = false; } System.Threading.Thread.Sleep(500); } } }Здесь мы каждые полсекунды в фоновом режиме проверяем, есть ли что-то в папке «System32\spool\PRINTERS» и если там появились файлы, то немедленно пробегаем по заданиям очереди печати (по умолчанию мы предполагаем, что их изначально нет), ставим на паузу и выводим имя файла, который какая-то программа хотела распечатать:
Смотрим очередь печати – там наш документ:
Зная его имя, можно уже отменить печать, конвертировать его или сделать что-то еще. В следующей статье мы научимся работать с цветовым профилем.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.