Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача данных принтеру  (Прочитано 5517 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexCasual
Помогающий

by
Offline Offline

« : 02-12-2011 13:44 » 

Вопрос такой - как приложение передаёт данные о печатаемом файле(непосредственно текст)?Немного подебажил блокнот,вроде как всё уходит через RPC-интерфейсы...Кто-нибудь работал в этом направлении?
Записан
zubr
Гость
« Ответ #1 : 02-12-2011 13:55 » 

Если вопрос о перехвате печати, то как минимум надо перехватывать GDI-функции: StartDoc, EndDoc, StartPage, EndPage, AbortDoc
Записан
AlexCasual
Помогающий

by
Offline Offline

« Ответ #2 : 02-12-2011 21:58 » 

zubr,да,но интересует каким образом можно добраться до непосредственно данных?
Записан
zubr
Гость
« Ответ #3 : 02-12-2011 22:20 » new

Если интересуют только текстовые данные, то достаточно кроме вышеуказанных функций, через которые получаешь контекст принтера, перехватывать GDI-функции вывода текста: DrawText, DrawTextEx, TextOut, TabbedTextOut и т. д. Причем надо перехватывать как Ansi так и Unicod-ный варианты функций. Также надо учитывать, что вместо символьного буфера, могут быть глифы, тогда их надо конвертировать в символы. Если надо все что идет на печать перехватывать, то придется перехватывать и все возможные GDI-функции рисования. Также надо учитывать трансформации контекста, то есть перехватывать и функции типа SetWordTransform. Еще помнится регионы приходилось учитывать (делал я несколько лет назад принт-сниффер).
Да, кстати, зачастую вывод текста идет не в последовательности текста, а в последовательности вывода на печать (особенно в броузерах такой эффект наблюдал), поэтому, чтобы получить корректный последовательный текст надо куски текста, полученные из буфера перехватываемых функций соотносить с координатами вывода.
В общем задача не совсем простая, но вполне решаемая.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines