| 
| 
 | Вопрос # 2 314/ вопрос открыт / | 
 |  День добрый! Как перехватить документ, посланный на печать? То есть моя прога должна висеть в памяти и ждать. Когда кто-нибудь отправит на печать документ, она его перехватит, обработает, и снова пошлёт на печать.Как я себе это представляю, когда документ посылают на печать, посылается какое-то сообщение вроде wm_ПослалиДокументНаПечать, потом документ копируется куда-то, его оттуда уже берёт драйвер и печатает. Вопрос в том, действительно ли это так, если да, то какого типа надо ставить хук, какие сообщения ловить, и где найти отправленый на печать файл.
 
|  |   Вопрос задал: Iskatel (статус: Посетитель)Вопрос отправлен: 17 января 2009, 17:58
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 20 января 2009, 13:31; участников в обсуждении: 3. 
|   | DNK (статус: Студент), 18 января 2009, 12:38 [#1]:В Windows существует служба "Диспетчер очереди печати". Чтобы управлять ею почитайте следующие статьи из группы "Принтеры и Печать" ( http://www.delphiworld.narod.ru/_os_.html ): * Как определить количество заданий на печать
 * Как получить информацию о заданиях на принтере
 * Как прочитать очередь печати
 * Прерывание работы принтера
 "Digital Networked Knight" |  
|   | Iskatel (статус: Посетитель), 18 января 2009, 23:00 [#2]:прочитал. Там нет ответов на главные вопросы: Как получить путь к файлу, который отправлен на печать? EnumJob позволяет получить лишь имя файла, но не путь к нему.
 Как не дать распечатать этот файл? Мне надо распечатать ИЗМЕНЕННЫЙ ФАЙЛ, оригинальный файл печатать не надо!
 |  
|   | DNK (статус: Студент), 18 января 2009, 23:39 [#3]:Имено поэтому я и не вписал этот пост в ответы. Даю вам, так сказать, направление. "Digital Networked Knight" |  
|   | Вадим К (статус: Академик), 19 января 2009, 00:03 [#4]: Цитата: Как получить путь к файлу, который отправлен на печать А в общем случае никак. Не думали о том, что можно например напечатать документ, который не был сохранён. И как изволите получить имя файла?
 В целом процесс печати происходит где то так. Ворд/Эксель или любая другая программа, которой надо распечатать что то, вначале "печатает" на виртуальных листах. А потом всё это отправляется диспетчеру печати. Диспетчер печати ничего не знает о именах файлов и даже представления не имеет, как печатать документы. Он умеет выводить на печать только специально подготовленные задания.
 А то, что Вы можете узнать имя файла, без пути - так это чистой воды везение. Просто многие программы не утруждают себя, да и пользователю проще, и устанавливают имя задания равным имени файла. Если делать печать самостоятельно, то можно установить там всё что заблагорассудиться (ну не абсолютно всё, но например "тихо, идет печать" можно
  ). По этому у Вас есть такая возможность - надо написать свой драйвер принтера. К сожалению модифицировать документ можно будет только в пределах страниц. То есть, наложить "водяной знак" или вывести колонтитул - пожалуйста, но не править текст (но  в некоторых случаях всё таки это возможно).
 Можно просто написать перехват функций для работы с принтером, но кто гарантирует, что очередная поделка от какого то самоучки не пойдёт в обход?
 
 И что бы окончательно развеять Ваши сомнения, что не драйвер принтера печатает документы, которые "копируются куда то", приведу простой пример. Можно в uses добавить модуль printers. Станет доступным глобальный объект Printer. У него есть канва, на которой можно рисовать, как на обычной форме/Image. Вот только надо давать команды BeginDoc и EndDoc (вроде не ошибся в написании) для начала и конца страницы.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Iskatel (статус: Посетитель), 20 января 2009, 13:26 [#5]:Как я понимаю, файл, передаваемый спулеру, имеет формат EMF. Где создается этот файл? И самое главное, как там хранится документ? Как набор картинок? Для каждой страницы- своя картинка? |  
|   | Вадим К (статус: Академик), 20 января 2009, 13:31 [#6]:а кто сказал, что это будет EMF. Я об этом не говорил. Вообще то это проблема винды, и Вас она волновать не должна. Где создаётся? может в памяти... опять это волновать не должно.
 Открываейте MSDN и читайте. может и проясниться. Но мне кажеться, что вы у вас не тот ход мыслей, не в ту сторону.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |