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

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

ru
Offline Offline

« : 28-01-2016 11:14 » 

Всем привет, задаю вопрос не из простых :

И так нужно написать полноценный эмулятор принтера , на подобии того что создает PdfCreator или прочие утилы. так далее в папке "принтера и устройства" появляется полноценный принтер, который в место вывода на физ устройство как-то обрабатывает полученный файл ...

Ни когда не связывался с устройствами и дивайсами в основном занимаюсь базами даных и DirectX и софтом под станки с ЧПУ...


Даже не знаю с чего начать рыть ...
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 28-01-2016 11:49 » 

С драйвера принтера...
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 29-01-2016 15:52 » 

в примерах DDK есть несколько примеров драйверов принтера. но я не думаю что это верный путь... где то выше надо порыть. может быть какой то минидрайвер, может быть postscript обработчик... может там вообще штатные средства есть! зачем же сразу драйвер писать то.
на вашем месте я бы сначала выяснил как оно вообще работает и из чего подсистема печати состоит. и какой путь проходят данные отправляемые на принтер и в каком формате и через какие пути)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 30-01-2016 16:21 » 

Юр, я ж не предлагаю писать драйвер "с нуля". Ага

А с "путями" как раз всё просто. Самый "простой": драйвер возвращает приложению свои настройки, с помощью которых и ф-ций Win API создаётся DC принтера, в который приложение всё и "отрисовывает". Сам процесс берётся в "скобки": в синтаксисе, например, в MFC (для простоты) это выглядит так рDC->StartDoc("текст для отображения в спуллере") ... рDC->EndDoc().
Между ними аналогично "скобки" для отдельных страниц pDC->StartPage()/pDC->EndPage().

Драйвер сам уже потом преобразовывает картинку из DC в нужную для него информацию и отправляет результат на устройство.

Более "сложный" - непосредственная отправка удобоваримых для принтера данных в порт (COM, LPT, USB). Так, например, работают HPGL плоттеры. Тогда драйвер, даже если он и существует обеспечивает только доставку данных в нужный порт. Примером такого драйвера может служить (мы говорим про винду) Generic / Text Only.
Но в этом случае за подготовку инфы отвечает вызывающее приложение, и гарантировать, что любая прога СМОЖЕТ её подготовить я не берусь.

Это же относится и к postscript.

В данном же случае, при начальном условии (орфография сохранена)

на подобии того что создает PdfCreator или прочие утилы. так далее в папке "принтера и устройства" появляется полноценный принтер, который ...

я думаю, что без драйвера не обойтись.

Собственно поэтому и перенёс тему сюда.

зы Оставляю за собой право ошибаться Ага
« Последнее редактирование: 30-01-2016 16:24 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Faster
Новенький

ru
Offline Offline

« Ответ #4 : 02-02-2016 11:49 » 

Джон, Ну это резонно ... и вызывает следующий вопрос с чего писать начать драйвер Улыбаюсь так и в бесконечный jzmp -1 можно ввалиться

Ochkarik, обычно кладут ссылку...


Ну собственно тему пока не закрываем, на другом форуме (да я всегда яйца по многим корзинам кладу) подсказали и ссылки дали , но там надо много читать и много думать , все еще осложняется моей ненавистью к MFC и аллергией  .NET ... так что осталось только пара исходников для студии , которую уже скачал в месте с последним MSDN и буду на выходных пытаться пальцами тыкать ... с учетом того что я Builder'ист это тоже затянется ...

Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 02-02-2016 13:00 » 

я честно говоря вот по принтерам вообще ни разу даже близко не имел дело)
поэтому делится ссылкой типа
https://www.google.ru/search?q=virtual+printer+windows+DDK&oq=virtual+printer+windows+DDK
не стал - вы ж наверняка уже все смотрели по ней?

Добавлено через 1 минуту и 53 секунды:
ну а на DDK чего там ссылаться - на сайте микрософта. или на любом другом. даже на нашем где то лежало помоему
« Последнее редактирование: 02-02-2016 13:02 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 03-02-2016 11:55 » 

Faster, нууу какая может быть конкретная ссылка, при такой скудной общей инфе: "нужно"?

Поэтому ответ вполне адекватен:

в примерах DDK есть несколько примеров драйверов принтера

Какой DDK, для какой платформы? Вы сами не указали. А это уже конкретика. А так, дано направление, в котором следует "рыть".

Тут по сути не важно, драйвер ли это принтера или, скажем, сканера. Подойдёт практически любой драйвер устройства, чтобы он как таковой распознавался и отображался системой. Те Вам нужен интерфейс драйвера. А драйвер принтера, ИМХО, ближе подходит для этой задачи.

Поскольку дравер-писателем, если я правильно понял, Вы становиться не собираетесь, то лучше воспользоваться уже имеющимся (например из DDK), и разобраться с ним. Собственно, я бы так и поступил.

зы
все еще осложняется моей ненавистью к MFC и аллергией  .NET ...

Тут могу Вас успокоить. Ни с MFC, ни уж тем более с .NET при разработке драйверов, Вам "общаться" не придётся.
Хотя я уже давно не "в теме" (может уже чего-нить и понапридумали?), тут спецы могуть чего-нить посоветовать, но в классике этими компонентами даже близко возле драйверов не пахнет.


« Последнее редактирование: 03-02-2016 12:00 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
sss
Специалист

ru
Offline Offline

« Ответ #7 : 03-02-2016 19:22 » 

Кажется для драйвера принтера достаточно dll написать в UMDF.. Мельком видел где-то

Добавлено через 15 минут и 39 секунд:
Наврал. Часть работы можно спустить в юзер режим с помощью UMDF и написать его обработку в C# например... Есть подозрение что драйвер совсем не обязательно.. как-то же делает, например, Microsoft XPS Document Writer

Добавлено через 27 минут и 11 секунд:
Да.. Кажется всего лишь надо положить куда то сюда

"C:\Windows\System32\spool\drivers\x64\{000BE56E-2726-4539-872E-B784C8E3EDE1}\MXDWDRV.DLL"

правильную длл и зарегистрировать её правильно для перечислителя SWD\PRINTENUM и класса {1ed2bbf9-11f0-4084-b21f-ad83a8e6dcdc}
« Последнее редактирование: 03-02-2016 20:05 от sss » Записан

while (8==8)
zubr
Гость
« Ответ #8 : 04-02-2016 15:18 » 

Всем привет, задаю вопрос не из простых :

И так нужно написать полноценный эмулятор принтера , на подобии того что создает PdfCreator или прочие утилы. так далее в папке "принтера и устройства" появляется полноценный принтер, который в место вывода на физ устройство как-то обрабатывает полученный файл ...

Ни когда не связывался с устройствами и дивайсами в основном занимаюсь базами даных и DirectX и софтом под станки с ЧПУ...


Даже не знаю с чего начать рыть ...
А для какой цели это вообще надо?
Если для перехвата вывода на принтер, то для этой цели драйвер не обязателен.
З.Ы. Лет 5 назад делал принтсниффер для одной конторы.
Записан
resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 17-02-2016 19:42 » new

Драйверы принтера по большей части располагаются в юзермоде, что и видно в сэмплах от майкросов. И вообще это не очень похоже на драйвер. А скорее на всякие разные таблицы перекодировки из одного в другое. Насколько я понимаю, кода там фиг да маленько. Ну т.е. какой-то код там есть (возможно), но суть не в нём. Всё рулят таблицы и так называемые "Принт провайдеры", "Принт мониторы". Я так понимаю, это что типа типа служб (не в понимании винды, а логически), которые можно регать в системе и они получают управление в определённые моменты процесса печати. Когда будете гуглить (или МСДНить), то не удивляйтесь что в названиях функций фигурирует слово Providor, а не Provider. Не знаю почему так, но похоже на какой-то ляп.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines