Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2009, 17:44   #1
Iskatel
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию Как перехватить документ, посланный на печать?

День добрый! Как перехватить документ, посланный на печать? То есть моя прога должна висеть в памяти и ждать. Когда кто-нибудь отправит на печать документ, она его перехватит, обработает, и снова пошлёт на печать.
Как я себе это представляю, когда документ посылают на печать, посылается какое-то сообщение вроде wm_ПослалиДокументНаПечать, потом документ копируется куда-то, его оттуда уже берёт драйвер и печатает. Вопрос в том, действительно ли это так, если да, то какого типа надо ставить хук, какие сообщения ловить, и где найти отправленый на печать файл.
Iskatel вне форума Ответить с цитированием
Старый 18.01.2009, 16:42   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

функция FindFirstPrinterChangeNotification
rpy3uH вне форума Ответить с цитированием
Старый 18.01.2009, 22:20   #3
Iskatel
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию

Это не то! Эта функция лишь сообщает о изменении очереди печати. Но как получить путь к файлу, посланному на печать или его копию? Как не дать этому файлу встать на печать? Ибо мне надо напечатать УЖЕ ИЗМЕНЕННЫЙ файл, оригинальный напечататься не должен!
Iskatel вне форума Ответить с цитированием
Старый 19.01.2009, 18:42   #4
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Пиши драйвер-фильтр для ЛПТ порта. Если нужен перехват только фалов от определенной проги, то можно просто перехватить АПИ.
Д'якон вне форума Ответить с цитированием
Старый 19.01.2009, 18:47   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Iskatel Посмотреть сообщение
Это не то! Эта функция лишь сообщает о изменении очереди печати. Но как получить путь к файлу, посланному на печать или его копию? Как не дать этому файлу встать на печать? Ибо мне надо напечатать УЖЕ ИЗМЕНЕННЫЙ файл, оригинальный напечататься не должен!
функции
EnumJobs, SetJob, AddJob, GetJob и так далее

отловили изменение и подредактирование соответствующее задание для печати

Последний раз редактировалось rpy3uH; 19.01.2009 в 18:50.
rpy3uH вне форума Ответить с цитированием
Старый 20.01.2009, 13:18   #6
Iskatel
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию

с помощью EnumJobs можно получить лишь имя файла, но не путь к нему!
Iskatel вне форума Ответить с цитированием
Старый 20.01.2009, 13:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Была такая же проблема выкрутился на 80%
1. Читай что Грузин написал
2. Поскольку печать на принтер у меня была всегда только из открытого Word то при получении в очереди печати нового документа, нахожу прогу которая сейчас активна, потом нахожу какие файлы у нее сейчас открыты (кодом Александра Багеля)

В принципе полные пути получал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2009, 14:31   #8
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если надо перехватывать только от одной проги, то можно сделать как сказал Д'ьякон перехватывать функции. Перехватить можно функцию AddJob и во время добавления подменить данные.
rpy3uH вне форума Ответить с цитированием
Старый 25.01.2009, 20:55   #9
Iskatel
 
Регистрация: 17.01.2009
Сообщений: 6
По умолчанию

Я сделал перехват через отлов создания файла спулером. Теперь другая проблема- как отменить задание в очереди печати? Есть ли функция вроде DeleteJob? И если не сложно, пример работы с такой функцией.
Iskatel вне форума Ответить с цитированием
Старый 25.01.2009, 21:33   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

функция SetJob последний параметр JOB_CONTROL_CANCEL
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить нажатие клавиш в Windows? JoanM Win Api 15 31.05.2013 14:42
Как перехватить нажатие клавиши Windows? UnD)eaD)Snake Win Api 3 16.03.2009 18:21
Как перехватить обращения к принтеру? Classic Win Api 2 16.08.2007 11:07
Как перехватить программно смену пользователя ale_krolik Win Api 1 15.12.2006 20:15
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12