Перехват очереди печати на 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, печать, принтер




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 22. Структуры C#
Пинг удаленного компьютера C#
Урок 10. Перегрузка логического оператора C#