Прежде всего, я работаю с Windows XP, Excel 2003, VS 2010, .NET 4.0 и собираю информацию о каждом отпечатке с помощью библиотеки PrintQueueWatch .Net. Что я видел до сих пор, так это то, что когда я печатаю активный лист Excel с несколькими копиями, событие jobdeleted запускает более одного. Я ожидал, что, поскольку я печатаю один документ, один идентификатор задания будет создан для всего сеанса, но удаленное задание запускается для каждой отдельной копии. Итак, если я распечатываю одну страницу с 3 копиями, я получаю как минимум 3 идентификатора задания. Настоящая проблема сейчас. Когда я печатаю одну страницу с 3, например, копиями после первой копии, другие 2 копии дважды удаляются, поэтому я получаю ровно 3 уникальных PrintJob.jobID, но 5 раз (18, 19, 19, 20, 20). Мой вопрос в том, почему удаленное задание запускается более одного раза в сеансе печати и особенно почему в каждой копии.

0
vicangel 19 Апр 2018 в 16:39

1 ответ

Лучший ответ

Приложения Microsoft Office на самом деле делают кое-что за кулисами, заменяя стандартные библиотеки принтеров при работе с копиями. Это позволяет им, например, предлагать параметры сортировки страниц и копирования, которые сам драйвер принтера не предлагает.

Они делают это (во многих случаях) путем создания отдельного задания на печать для каждой копии, а затем они обрабатываются обычным образом со своим собственным идентификатором задания на печать, используя структура JOB_INFO_3.

Когда задание удалено, но все еще есть связанные задания, которые еще не были удалены, оно вызывает событие, но фактически не удаляет. Только когда вся цепочка будет удалена, фактическая функция удаления завершится.

К сожалению, я никогда не кодировал обработку JOB_INFO_3, но если вы захотите, то код находится на GitHub.

1
Merrion 16 Май 2018 в 14:28