· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ZEN —› Печать в DOS-mode на USB-принтере

Посл.отвђт Сообщенiе


Дата: Июл 23, 2003 18:13:43

Не сталкивался-ли кто-нибудь с такой проблемой:
Необходимо вывести результаты работы DOS-приложения на принтер, подключенный к USB. В DOSовские времена USB-то не было, программа пытается выпихнуть свой вывод на LPT.
Можно, конечно, перенаправить вывод в файл, а потом распечатать средствами Винды, но это как-то неэлегантно, да и для операторов, работающих с этой прогой, лишняя головная боль.


Дата: Июл 23, 2003 21:18:00

можно печатать на сетевой usb принтер


Дата: Июл 24, 2003 04:33:22

Andy_the_Old
Можно ... перенаправить вывод в файл, а потом распечатать средствами Винды, но это как-то неэлегантно, да и для операторов ... лишняя головная боль
Из dos'овской программы запускать невидимую windows'ную программу, которая распечатает приготовленный файл.


Дата: Июл 24, 2003 10:59:32

Может написать BAT файл?

program >result.prn
copy /b result.prn prn

или что-то похожее.


Дата: Июл 24, 2003 11:43:02

misyachniy
Как result.prn попадет с PRN в USB?
Если и попадет, то dos-программа должна уметь делать bin-файл, который поймет принтер.


Дата: Июл 24, 2003 12:34:06

Автор пишет "Можно, конечно, перенаправить вывод в файл"
То есть на диске будет создан двоичный образ для печати.
Программе не обязательно знать, где находится принтер.
На LPT, com, USB или совсем на другом компьютере.
Я так печатал на сетевой принтер.
Устройство PRN ото принтер по умолчанию.
И обращение к нему берет на себя Операционная система.
Cо стороны периложения все просто.
CreateFile("PRN")
WriteFile
CloseFile


Дата: Июл 24, 2003 12:49:53

misyachniy
Устройство PRN ото принтер по умолчанию.
Вы заблуждаетесь. Сетевой принтер не обязательно может быть завязан на LPTx.
У меня, например, по умолчанию печатается на сетевой принтер "\\user01\lazer" и есть сетевой принтер "\\prog1\epson", который ассоциирован с LPT1.
Я выполню команду:
copy /b c:\autoecec.bat prn
и печать пошла на \\prog1\epson.

Автор пишет "Можно, конечно, перенаправить вывод в файл"
Разве это подразумевает, что dos-программа может приготовить файл, который поймет принтер?
Не знаю как на принтере Andy_the_Old, а я сталкивался с такими, которые текстовые dos-файлы не переваривают (например, нет cyr-фонтов).


Дата: Июл 24, 2003 14:00:43

Ну а чего не правильно я сказал

"Я выполню команду:
copy /b c:\autoecec.bat prn
и печать пошла на \\prog1\epson."

на этой страничке:
http://www.vfrazee.com/ms-dos/6.22/help/mode%20(configure%20printer).h tm

сказано:
"For parallel-printer modes, you can use PRN and LPT1 interchangeably"
То есть PRN и LPT1 синонимы.

Если Andy_the_Old укажет как программа обращается к принтеру(через прерывание надеюсь) и есть ли возможность перенаправить вывод в файл.
То перейдем к более конструктивному диалогу.


Дата: Июл 24, 2003 16:55:08

Привет всем, заинтересовавшимся темой.
Спасибо за участие! Я, честно говоря, не думал, что кто-то
воспримет ее всерьез, мелкая она какая-то...но (для меня)-насущная. Давайте, я ее еще поменяю вводные.
Печатать надо не в DOS-mode, а в чистом DOSe. То-есть Винды нет и в помине. Но BIOS поддерживает USB. Исходника BIOSовского, правда, нет, но его можно где-нибудь найти, это не есть проблема. DOS-то USB не поддерживает точно.
Так вот я и думаю, не придется ли писать самопальный драйвер, который будет перехватывать поток, направляемый в LPT, и после обработки(перекодировки, например) отправлять его на USB. Тут, наверное, можно попользоваться прерываниями BIOS. Как задачка? Не очень тривиальная?


Дата: Июл 24, 2003 17:05:54

У меня есть только одна ссылка на доступ к USB из под DOS.
http://pascal.sources.ru/hardware/usb4pas.htm


Дата: Июл 24, 2003 17:49:28

За ссылочку спасибо! Я мельком на нее глянул...
Что-то в этом есть, но мне все-таки кажется, что придется работать на уровне дров. В конце-концов, не боги горшки обжигают. Может быть, кто-нибудь что-нибудь еще посоветует.


Дата: Июл 25, 2003 03:56:09

misyachniy
Ну а чего не правильно я сказал

misyachniy Июл 24, 2003 12:34:06 > Устройство PRN ото принтер по умолчанию
У меня по умолчанию \\user01\lazer.

Или мы по-разному интерпретируем этот термин.

Andy_the_Old
Почему Вы склоняетесь к дровам, dos'овскую программу можно изменять или нет?


Дата: Июл 25, 2003 09:17:30

Программа скомпилированная, исходника нет. Можно, конечно,
дизассемблировать, хоть это и муторно, но дело не в этом.
На этом же компе могут запускать и другие программы, и всем им нужна печать. Не переделывать же их все подряд!


Дата: Июл 25, 2003 10:41:18

"Устройство PRN это принтер по умолчанию" фраза может относится только к DOS.

По существу скажу следующее.
Нужно запустить программу на печать под NT или WinXp.
Если программа напрямую общается с LPT то она будет завершена с ошибкой.

Перехватить обращение к порту довольно сложная задача.

Но думаю программа использует стандартное прерывание INT 17h.

Более 10 лет назад я встречал программу на PASCAL с исходными текстами для перенаправления вывода в файл.

В сети она наверное где-то есть.

Так что можно модифицировать предложенный мной bat файл.

1) запуск перехватчика. Он становится резидентом
2) запуск рабочей программы
3) Запуск перехватчика. Он удаляет резидентную часть из памяти.
4) copy /b result.prn prn


Дата: Июл 25, 2003 10:42:40

"Устройство PRN это принтер по умолчанию" фраза может относится только к DOS.

По существу скажу следующее.
Нужно запустить программу на печать под NT или WinXp.
Если программа напрямую общается с LPT то она будет завершена с ошибкой.

Перехватить обращение к порту довольно сложная задача.

Но думаю программа использует стандартное прерывание INT 17h.

Более 10 лет назад я встречал программу на PASCAL с исходными текстами для перенаправления вывода в файл.

В сети она наверное где-то есть.

Так что можно модифицировать предложенный мной bat файл.

1) запуск перехватчика. Он становится резидентом
2) запуск рабочей программы
3) Запуск перехватчика. Он удаляет резидентную часть из памяти.
4) copy /b result.prn prn


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.039