И снова перехват печати

Тема в разделе "WASM.WIN32", создана пользователем renieaa, 22 фев 2009.

  1. renieaa

    renieaa New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2009
    Сообщения:
    7
    Требуется получить полный путь документа, посланного на печать, а так же этот документ в .emf формате.
    Печать может идти на любой принтер. Т.е. создание нового виртуального принтера не подходит.
    Я понимаю что надо написать драйвер фильтр, который будет встраиваться перед драйверами всех принтеров.
    Так же ковырял AddMonitor, но использование легального монитора нежелательно, хотя реализация с помощью этой функции не помешает для саморазвития;).
    Так же думаю решить задачу через перехват, например, AddJob...

    Какой метод более предпочтительный?
    Буду благодарен за любую информацию.
     
  2. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    запросто перехватываются задания печати с помощью сервиса. пиши сервис.
     
  3. renieaa

    renieaa New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2009
    Сообщения:
    7
    Очень информативный ответ :)
    Можно поподробнее
     
  4. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    Потробней про что? Про сервис или про перехват печати?

    Если про перехват, то ищи в MSDN функции:
    OpenPrinter
    ClosePrinter
    FindFirstPrinterChangeNotification
    FindNextPrinterChangeNotification
    FindClosePrinterChangeNotification
    EnumJobs
    Кроме этого еще почитай про структуру JOB_INFO_2.

    А дальше включай голову. Вот когда сам хоть что-то наваяешь и что-нибудь не будет получаться, тогда, конечно, если смогу помогу разобраться в чем ошибка. А сырцы просить - это легче всего. Извини, если обидел.
     
  5. renieaa

    renieaa New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2009
    Сообщения:
    7
    Эт не то:)
    Получать информацию об изменении очереди печати и информации о заданиях с помощью этих функций я умею,
    только из структуры можно получить не то что мне нужно, можно получить имя файла да и количество страниц документа и т.д.
    А мне требуется получить полный путь до документа (c:\folder\my.doc), а не имя как в структуре (my.doc).
    Т.е. копию этого документа в этом же формате (т.е. без полного пути не обойтись).
    И копию в .emf формате.
    Путь до документа можно получить, если только ковыряться в памяти процесса, создавшего задание печати.
    А путь до emf откуда можно выдернуть?
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    мм, а если файл называется "Документ1"?
     
  7. renieaa

    renieaa New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2009
    Сообщения:
    7
    Ты имеешь ввиду ту ситуацию когда файл не сохранен еще?
    Если да, то надо получить копию в формате .emf
     
  8. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    renieaa

    Код (Text):
    1. А мне требуется получить полный путь до документа (c:\folder\my.doc), а не имя как в структуре (my.doc).
    Допустим. Но это вариант подходит для перехвата файлов, расположенных на носителе. А какой путь к фалу у тебя будет при печати из браузера или из файла chm справки или при печати данных таблицы базы данных из памяти? По полученному пути ты потом сам файл не отыщешь и не откроешь для чтения.
     
  9. renieaa

    renieaa New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2009
    Сообщения:
    7
    Опустим это :) , надо получить путь при печати из ворда, экселя.
    Ну а про то что говоришь, надо получить emf файл, отосланный принтеру.