Поймать задания печати окон в переполнении стека

Эта проблема

У меня есть компьютер с Windows XP, подключенный к принтеру. Этот компьютер запускает часть программного обеспечения, откуда я создаю и отправляю задания на печать на принтер. Недавно принтер умер, и я не могу получить новый. Программа настроена для печати на этот конкретный принтер, что сейчас является проблемой.

Вопрос

Есть ли способ поймать данные, отправленные в диспетчер очереди печати Windows? Из того, что я обнаружил, мне нужно разработать монитор печати (файл .dll, который будет прочитан spooler.exe, исправьте меня, если я ошибаюсь), однако это кажется слишком сложным для такого вопроса. Я искал API диспетчера очереди печати, но метод GetJob возвращает, насколько я вижу, только информацию о задании печати, а не фактические данные печати.

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

Спасибо.

0

Решение

Ваша проблема серьезнее, чем вы могли бы себе представить. Задача передачи данных буферного принтера на определенный принтер — это вызов процессора печати, который находится в цепочке принтеров, предшествующей монитору печати. Документация здесь: http://msdn.microsoft.com/en-us/library/windows/hardware/ff551771%28v=vs.85%29.aspx

Буферные данные могут быть в одном из нескольких различных форматов, и для некоторых из них может быть невозможно перенаправить на принтер другого типа. Вы не упомянули, с какими типами принтеров вы имеете дело.

Это довольно серьезная вещь: написание и отладка одного из этих детей требует значительных навыков низкого уровня и понимания технологии Windows.

Редактировать: есть большая вероятность, что данные представлены в формате расширенного метафайла, и вам нужно воспользоваться встроенными конвертерами, чтобы превратить их в команды для вашего нового принтера.

3

Другие решения

Других решений пока нет …