Требуется получить полный путь документа, посланного на печать, а так же этот документ в .emf формате. Печать может идти на любой принтер. Т.е. создание нового виртуального принтера не подходит. Я понимаю что надо написать драйвер фильтр, который будет встраиваться перед драйверами всех принтеров. Так же ковырял AddMonitor, но использование легального монитора нежелательно, хотя реализация с помощью этой функции не помешает для саморазвития. Так же думаю решить задачу через перехват, например, AddJob... Какой метод более предпочтительный? Буду благодарен за любую информацию.
Потробней про что? Про сервис или про перехват печати? Если про перехват, то ищи в MSDN функции: OpenPrinter ClosePrinter FindFirstPrinterChangeNotification FindNextPrinterChangeNotification FindClosePrinterChangeNotification EnumJobs Кроме этого еще почитай про структуру JOB_INFO_2. А дальше включай голову. Вот когда сам хоть что-то наваяешь и что-нибудь не будет получаться, тогда, конечно, если смогу помогу разобраться в чем ошибка. А сырцы просить - это легче всего. Извини, если обидел.
Эт не то Получать информацию об изменении очереди печати и информации о заданиях с помощью этих функций я умею, только из структуры можно получить не то что мне нужно, можно получить имя файла да и количество страниц документа и т.д. А мне требуется получить полный путь до документа (c:\folder\my.doc), а не имя как в структуре (my.doc). Т.е. копию этого документа в этом же формате (т.е. без полного пути не обойтись). И копию в .emf формате. Путь до документа можно получить, если только ковыряться в памяти процесса, создавшего задание печати. А путь до emf откуда можно выдернуть?
Ты имеешь ввиду ту ситуацию когда файл не сохранен еще? Если да, то надо получить копию в формате .emf
renieaa Код (Text): А мне требуется получить полный путь до документа (c:\folder\my.doc), а не имя как в структуре (my.doc). Допустим. Но это вариант подходит для перехвата файлов, расположенных на носителе. А какой путь к фалу у тебя будет при печати из браузера или из файла chm справки или при печати данных таблицы базы данных из памяти? По полученному пути ты потом сам файл не отыщешь и не откроешь для чтения.
Опустим это , надо получить путь при печати из ворда, экселя. Ну а про то что говоришь, надо получить emf файл, отосланный принтеру.