#print #hook #c #printing #cpp
Подскажите, пожалуйста, как получить содержимое документа, отправленного на печать? Сам отлов происходит с помощью FindFirstPrinterChangeNotification и GetPrinterJobs. Получилось доже достать файлы .spl. Можно ли их конвертировать, или перехватить еще момент копирования файлов в спулер с помощью хуков, или инжектироваться в приложения? Пробовал все варианты, даже библиотеку madchook.dll. Посоветуйте, пожалуйста, буду рад любой помощи.
Ответы
Ответ 1
В общем случае .spl файл представляет из себя EMF-файл, то есть содержит последовательность аппаратно-независимых функций GDI. Вот здесь есть информация о структуре этих файлов и есть ссылки на библиотеки для работы с ними. Я использовал только первую (на VB.Net) - она в большинстве случаев работает нормально. На C там тоже что-то есть, но эти проекты я не смотрел. В любом случае, если по этой ссылке вы не найдете подходящую библиотеку, вам надо искать что-то для чтения EMF-файлов. Дополнительно обратите внимание вот на что: .spl-файл не всегда содержит EMF. В некоторых случаях там могут быть сырые данные, в формате принтера, на который выводится документ (RAW). Например, это может быть в такой ситуации: вы печатаете документ с Windows-машины на принтер, подключенный к машине с Linux, то есть в роли принтсервера выступает Linux-машина. В этом случае спулер вашей Windows-машины не может послать на принтсервер EMF, потому что это специфичный для Windows формат и Linux о нем ничего не знает. Поэтому спулер с помощью драйвера принтера сразу перегоняет документ в RAW и сохраняет в очереди печати уже RAW. начиная с Windows Vista в Windows появился новый способ печати документов с помощью XPS print API. Насчет этого способа я точно не знаю, но скорее всего, когда печать будет выполняться этим способом .spl-файл будет содержать xps. Имейте это в виду.
Комментариев нет:
Отправить комментарий