Как имитировать параллельный (LPT) принтер с USB-принтером?
У меня есть устаревшее программное обеспечение, которое печатает только на принтерах, подключенных через порт LPT. Однако машина, которую мне нужно использовать, не имеет параллельного порта. Плюс мой принтер - это USB-устройство.
Как заставить мой компьютер думать, что мой USB-принтер подключен к порту lpt?
Далее это для офиса. У меня будут права администратора при реализации обходного решения, но я стараюсь найти решение, которое работает, когда "обычный" пользователь регистрируется после того, как все настроено.
8 ответов
Вы можете обмануть Windows, используя USB-принтер в качестве фиктивного "сетевого" принтера, подключенного к LPT1.
Поделитесь USB принтером
Используйте легко запоминающееся имя ресурса, например "Принтер".
Подключите общий принтер как LPT1
NET USE LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES
Использование адаптера USB-параллельный не имеет никакого смысла. Здесь мы говорим об использовании очень старого устаревшего программного обеспечения на оборудовании с подключением только через USB. В моем случае это принтер этикеток ZEBRA.
Решение в моем случае было.
- Установите USB-принтер с его драйверами (просто чтобы узнать, к какому USB-порту подключен)
- Измените порт драйвера на ФАЙЛ (и освободите порт USB)
- Установите драйвер Generic / Text Only и измените порт на тот же логический порт USB, который показан в пункте 1
- Совместно использовать принтер "Общий / только текст", чтобы его было легко увидеть в VBA.
- Установите адаптер Microsoft Loopback на фиксированный неиспользуемый IP-адрес (иначе ваш принтер не будет виден при отключении кабеля)
- Назначьте порт LPTx: как описано ранее в командной строке (это для каждого ПО, которому требуется старый LPT)
С помощью нескольких строк кода вы сможете отправлять коды ASCII на принтер, как это было в прошлом.
Теперь вы можете легко печатать в VBA (протестировано на 64-битной Windows 7 и принтере ZM400 Zebra)
Open "\\Kb\ZM400" For Output As #1 'Kb = computer Name; ZM400 = Shared printer name
For rows = 1 To 37 ' send the first 37 rows of ASCII codes from the worksheet "STRINGS"
Print #1, Worksheets("STRINGS").Cells(rows, 1).Value
Next
Close #1
Используйте DOS Print Program для манипулирования вашими доступными портами на нужные устройства. Вы можете скачать его по этой ссылке https://www.dropbox.com/s/gdx05sckmbqnast/dosprint.exe?dl=0(dos Print)
https://www.dropbox.com/s/alf6hdd5fctepmo/dosprintui.exe?dl=0(dos Print UI)
Сначала запустите dosprint и dosprintui как администратор, затем дважды щелкните значок на панели задач dosprintui, чтобы получить список доступных портов для сопоставления, затем дважды щелкните lpt1 или кнопку set и выберите нужный принтер для сопоставления с ним и нажмите Хорошо. BINGO теперь вы можете печатать на порт LPT1, и ваш USB-принтер распечатает это для вас.
Возможно, проверьте WinPrint:
Получает стандартный вывод на принтер, созданный приложением DOS, и перенаправляет его на принтер Windows по умолчанию. Преобразует кодовую страницу, удаляет пустые страницы, поддерживает символы BOX DRAWINGS. Работает на всех платформах Windows.
Программы DOS все еще используются в мире бизнеса. Советы о том, как заставить их работать должным образом на современной вычислительной платформе, широко распространены в Интернете. Вот что сработало для меня.
16-разрядная программа DOS, с которой нам нужно работать, находится на 32-разрядном сервере Windows 2003, который вскоре будет удален. До этого общий ресурс программы сопоставляется на двух 32-разрядных клиентских компьютерах из основного домена с помощью групповой политики. Ярлык для файла .cmd, который запускает программу, размещается вручную на клиентах, также в основном домене. Программа хорошо работает на Windows 8.1. Конечно, это немного компромисс, но машины будут обновлены до 64-битной Windows 8.1, когда программа DOS, которая запускается из вторичного домена, будет удалена.
Печать из программы представляет собой самую большую проблему. В этой программе используются два разных параллельных принтера, но программа печатает только на один порт, и нет никакой возможности изменить это поведение. Нужно распечатать чек на лазерный принтер? Он должен быть подключен к порту LPT1. Нужно распечатать дамп данных на матричный принтер? Он также должен быть подключен к порту LPT1. С этой программой ежедневно работают два человека, поэтому мы будем использовать их компьютеры, по одному для каждого принтера. Давайте установим первый принтер:
Если компьютер имеет физический (параллельный) порт DB-25, вы можете отключить его в BIOS. Windows 8.1 не будет поддерживать это, и нам это не нужно.
A Cables-to-Go модель 16899 Адаптер параллельного принтера USB-DB25 используется для подключения принтера к компьютеру. Адаптер устанавливается автоматически и не распознается как параллельное устройство или порт LPT.
Теперь откройте Устройства и принтеры. Нажмите Добавить принтер и выберите нужный принтер, которого нет в списке. В следующем диалоговом окне выберите "Добавить локальный принтер или сетевой принтер с ручными настройками" и в следующем диалоговом окне "Использовать существующий порт". Выберите виртуальный порт принтера для USB, USB001 или USB002, из списка, а не параметры порта LPT.
Первый принтер - это многорежимный матричный принтер Panasonic KX-P1191. Принтер не указан в диалоговом окне, запрашивающем драйвер, и обновление списка путем нажатия Центра обновления Windows не помогает. Проверка сайта поддержки Panasonic показывает, что принтер на данный момент полностью не поддерживается, но специалист службы технической поддержки Panasonic помог разобраться в том, что привело к драйверу Epson FX Series 1 (80), включенному в Windows 8.1. Работает отлично.
Теперь принтер установлен. Но он находится на порту USB001, и программа будет печатать только на порт LPT1. Решение относительно простое и может быть интегрировано прямо в пакетный файл, который используется для запуска программы. Давайте возьмем старую школу и подшучиваем над нашим принтером: мы поделимся им и напечатаем на LPT1 таким образом.
Щелкните правой кнопкой мыши принтер и выберите "Свойства". Предоставьте общий доступ к принтеру, не перечисляйте его в каталоге, просто создайте короткое имя общего ресурса, а затем убедитесь, что пользователь клиентского компьютера указан в группе или в области имени пользователя на вкладке "Безопасность".
Два человека, которые будут печатать на этих принтерах, создают мою зарплату, поэтому я дал им права администратора домена. Это могло быть ненужным. Оба являются пользователями в основном домене, но не во втором, и я не хотел тратить время на устранение неполадок с разрешениями.
Теперь измените пакетный файл и используйте хорошо документированную команду net use для реализации решения печати:
@echo off
::delete the printer
net use lpt1 /delete
::add the printer
net use lpt1 \\\COMPUTER\PRINTER /persistent:yes
::fire up the nasty ol' DOS program
<existing syntax used to start the program>
Где COMPUTER - это имя компьютера, а PRINTER - это общее имя принтера. Процедура одинаково хорошо работала на втором компьютере для принтера HP LaserJet 1100 с использованием драйвера "HP LaserJet 1100 (MS)", поставляемого с Windows 8.1.
-- ЗАМЕТКИ --
Системная ошибка 5:
Убедитесь, что пользователь указан на вкладке безопасности. "Все" могут быть удалены. Требуются ли для пользователя права администратора домена? Вероятно, нет, если все работает с одного домена.
Системная ошибка 66:
Проверьте свой синтаксис. Вы, вероятно, неправильно написали имя компьютера, принтера или, возможно, пропустили двоеточие? В соответствии с документацией Microsoft требуется только одна двоеточие. Будет ли добавление ненужного двоеточия в lpt1 [:] вызвать сбой?
Все о сетевом использовании: https://technet.microsoft.com/en-us/library/bb490717.aspx
На рынке существует множество "параллельных USB-адаптеров". Вы можете получить один онлайн приблизительно за 10 $, и это - вероятно, хорошее место, чтобы начаться.
Я был в том же положении с программным обеспечением, разработанным на заказ для Clipper. Посмотрел какое-то параллельное программное обеспечение для эмуляции, чтобы печатать на USB-принтере, который работал, но имел свои проблемы. Преодоление 64-битной Win10 без проблем было настоящим испытанием.
Я нашел Harbour HMG, который после изменения нескольких строк кода перекомпилировал приложение в 32-битную версию. Я также заставляю свои приложения записывать данные во временные файлы, которые я беру в Microsoft Access, чтобы выпустить несколько великолепных отформатированных отчетов. О, кстати. Теперь приложения работают в 64-битных окнах 10 с существенными улучшениями в памяти и скорости. Кроме того, я отправляю отчеты на линейные USB-принтеры или на струйные принтеры или что-то другое.
Вы не сказали, какое аппаратное обеспечение вы используете, но, предполагая, что это ПК Wintel, вы должны иметь возможность купить для него обычную карту параллельного порта практически даром. Кроме того, вы можете перенаправить его с помощью NET USE, как предлагает harrymc.