Как получить доступ к параллельным портам, созданным командой NET в Windows XP?

3934
Andres

Я пытаюсь получить IEEE-1284 кабель USB-к-Parallel, который показал, как USB Printing Supportв Device managerк работе в качестве LPT порта и попытался ответить здесь . Используя эту команду:

NET USE LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES 

Команда выполнена успешно, но я не вижу LPT1 в Аппаратных устройствах, чтобы получить адрес для записи в него. Я знаю, что порт, который я создаю, выходит, потому что я создал приложение Java, которое перечисляет последовательный и параллельный порты с использованием библиотеки RXTX, вот вывод:

enter image description here

Я добавил все эти LPT-порты NETкомандой, потому что на моем компьютере их нет. Но я нигде не вижу их, чтобы получить адрес, а библиотека RXTX не позволяет мне получить адрес порта AFAIK. Есть идеи, как получить доступ к портам?

РЕДАКТИРОВАТЬ:

Хорошо, чтобы прояснить ситуацию немного, у меня есть IEEE-1284 USB-Parallel, когда вы подключаете его к компьютеру с Windows XP, он USB Printing Supportотображается как устройство, поэтому он не отображается как порт LPT, потому что он предназначен для работа с принтерами.

Я создал принтер с драйвером Generic / Text и подключил его к USB001порту, потому что это порт USB-кабеля. Затем я делю принтер и создаю LPTпорт с помощью NETкоманды. Теперь я хочу записать данные в этот LPT-порт, как я бы сделал с любым другим собственным LPT-портом, используя, например, InpOut32.dll .

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

5
Разве вы не можете сделать что-то вроде `public static final String PARALLEL_PORT =" LPT1 ";`, как показано в примере кода [Parallel Communications] (http://rxtx.qbang.org/wiki/index.php/Parallel_Communications)? martineau 11 лет назад 0
Исторически адрес аппаратного порта LPT1 был 0x3BC (см. [Интерфейсы] (https://en.wikipedia.org/wiki/Parallel_port#Interfaces)). martineau 11 лет назад 0
Нет, я должен использовать его в другой программе, и мне нужен адрес порта. Да, но адрес не одинаков для каждого порта, не так ли? Andres 11 лет назад 0
LPT2 и 3 имеют разные фиксированные адреса (0x378 и 0x278 соответственно). Эти [три адреса] (https://en.wikipedia.org/wiki/Parallel_port#IBM_PC_Implementation) одинаковы для всех систем, совместимых с IBM PC. martineau 11 лет назад 0
Это не похоже на работу с параллельными портами, созданными с помощью этого метода Andres 11 лет назад 0
Если вы ищете адрес порта, например 0x378, я не верю, что «net use lpt?» Устройство не имеет ни одного, ни того, что оно указано где-либо в диспетчере устройств. harrymc 11 лет назад 0
Так какой адрес вы ищете, кроме его имени "LPT1"? harrymc 11 лет назад 0
Мне нужен способ доступа к портам, я имею в виду, как я могу их использовать? Я не могу написать программу и попросить его получить доступ к LPT2, мне нужен адрес. Andres 11 лет назад 0
Может быть, мы все упускаем суть здесь (или, по крайней мере, я). Есть ли у вас «кабель IEEE-1284 для параллельного подключения к USB», как в вашем вопросе, или «кабель IEEE-1284 для параллельного подключения к USB», как в одном из ваших комментариев? Возможно, вы сможете уточнить в своем вопросе, какой именно принтер и подключение к вашему компьютеру у вас есть, и какое программное обеспечение (DOS или Windows) пытается получить доступ к принтеру (и, возможно, зачем ему нужен номер порта). Rik 11 лет назад 0
Смотрите мой отредактированный вопрос, надежда теперь яснее. Andres 11 лет назад 0

4 ответа на вопрос

1
Rik

Ok. So you connected a parallel device/printer via a "USB-to-Parallel IEEE-1284"-cable to the USB-port of your computer. Now you need to directly communicate to it. I understand you can't change the software directly to communicate with modern ports like USB001 etc. like the drivers of scanners do. And the software you have needs to communicate by normal protocol for old-LPTx ports (i.e. 0x378 instead of LPT1 etc.)

That leaves you with one option and that is "emulation". This should be done by the driver which came with the "USB-to-Parallel IEEE-1284"-cable. This driver should make a LPTx port and capture port-communication etc. But most (if not all) of these adapters come with drivers who emulate an USB-printer. In most cases this is the easiest (and even in case of old DOS-programs this can be solved with a NET command) but when it comes to real port-communication it is useless.

So you need to find a program that can emulate a LPTx (and its ports) and bidirectionally communicate with (any) USB-driver on your computer. I have not found one (yet).

The only thing useful i found was this Converter From USB To Parallel. This one emulates the LPTx and ports and communicates directly with the adapter. I have not tested this myself but the info-page looks promising. From the help-file:

The USB2LPT device and its driver enables redirecting of port access by random application software to a USB-attached parallel port, i.e. emulating a parallel port via USB. This unique solution works on all USB supporting Windows operating systems.

It does label its own driver as "Driver unstable" but you'll get the idea for what you're looking for. It also needs a special USB2LPT-adapter though. From its faq-page:

Q3. Can I use the USB2LPT.SYS driver with a regular (cheap) USB to parallel printer adapter? A. Of course not! It's never possible due to design limitations of such adapters. See below. 

It also lists as a minus for itself its Reduced speed due to emulation (expect 10..100 times slower). But it will allow communication with Base address same as built-in (378h, 278h). If you like you can make your own adapter. The schematics are all on the site. Here you can find complete instructions (including videos) on how to build one. Or else you can mail him for details on how to get one.

USB2LPT-adapter USB2LPT-adapter Converter From USB To Parallel

Да, я читал об этом несколько недель назад, но мне нужно купить их кабель, и я сначала пытаюсь заставить его работать. Спасибо! Andres 11 лет назад 0
Я думал, что, возможно, вы были в состоянии создать свой собственный :) (инструкции включены). Но ты прав. Это программное обеспечение не будет работать без этого адаптера. Чистое программное решение было бы лучше, но его трудно найти. На [здесь] (http://electronics.stackexchange.com/questions/24831/simulation-of-parallel-port-but-without-a-parallel-port) было предложено изменить исходный код для взаимодействия с любым оборудование / адаптер, но я не нашел никого, кто сделал это. Rik 11 лет назад 0
Возможно [эта статья] (http://ledthings.com/HowTo/HowToUSB.html) представляет интерес. Он показывает только запись в адаптер usb-lpt, но должен работать с обычными. Это довольно «сделай сам», но это показывает, что написать (то есть немного переключить) (не говоря уже о прочтении) непростую задачу - это адаптер usb-lpt, предназначенный для обычных принтеров (а не других коммуникационных устройств). Rik 11 лет назад 0
И наконец [примечание об адаптерах параллельного порта USB] (http://www.epanorama.net/circuits/parallel_output.html#usbnotes). Rik 11 лет назад 0
1
Debra

I think that you may be going about this all wrong. You should not be using "NET USE" but rather using the adapter's software driver to associate a virtual printer port with the USB port. Rik has posted a screenshot of how this works. Only if the adapter's software allows it, should you then be able to write as if that physical port existed.

The NET USE LPT1 command that you showed is for when you connect to a printer on your own or another computer, and set that printer as your local (LPT1) printer. It is based on printing to the device name LPT1 and then redirecting that, which you have said your software won't do (requiring a hardware port).

Here is a driver from Startech, that makes some of these cables, but I don't know if it will work for you; it does work with some other models (including ones that I've owned): http://sgcdn.startech.com/005329/media/sets/ASIX_MosChip-MCS7715_Drivers/ASIX_MCS7715.zip

In the meanwhile, get rid of that NET USE command; it's really not helping you right now, and if you could get it to work at all with the local printer, would still require you to be writing to the LPT1 device (not to the hardware location where it would be, if only it existed.)

Я удалил драйвер, который устанавливал Windows XP для кабеля, и установил этот, но он не работал. Нет, я даже не могу заставить Windows установить драйвер для кабеля. Andres 11 лет назад 0
0
Christian Woerz

You will need the .NET-Framework and PowerShell, but with this script, you can get access to a list of any Parallel-Ports installed on your system.(+Additional informations)

$strComputer = "." $colItems = get-wmiobject -class "Win32_ParallelPort" -namespace "root\CIMV2" ` -computername $strComputer foreach ($objItem in $colItems) { write-host "Availability: " $objItem.Availability write-host "Capabilities: " $objItem.Capabilities write-host "Capability Descriptions: " $objItem.CapabilityDescriptions write-host "Caption: " $objItem.Caption write-host "Configuration Manager Error Code: " $objItem.ConfigManagerErrorCode write-host "Configuration Manager User Configuration: " $objItem.ConfigManagerUserConfig write-host "Creation Class Name: " $objItem.CreationClassName write-host "Description: " $objItem.Description write-host "Device ID: " $objItem.DeviceID write-host "DMA Support: " $objItem.DMASupport write-host "Error Cleared: " $objItem.ErrorCleared write-host "Error Description: " $objItem.ErrorDescription write-host "Installation Date: " $objItem.InstallDate write-host "Last Error Code: " $objItem.LastErrorCode write-host "Maximum Number Controlled: " $objItem.MaxNumberControlled write-host "Name: " $objItem.Name write-host "Operating System Auto-Discovered: " $objItem.OSAutoDiscovered write-host "PNP DeviceID: " $objItem.PNPDeviceID write-host "Powe rManagement Capabilities: " $objItem.PowerManagementCapabilities write-host "Power Management Supported: " $objItem.PowerManagementSupported write-host "ProtocolS upported: " $objItem.ProtocolSupported write-host "Status: " $objItem.Status write-host "Status Information: " $objItem.StatusInfo write-host "System Creation Class Name: " $objItem.SystemCreationClassName write-host "System Name: " $objItem.SystemName write-host "Time Of Last Reset: " $objItem.TimeOfLastReset write-host } 

Source:Technet-Microsoft

Я основал его для поиска в Интернете, но я не знаю, как выполнять скрипты Power-Shell, а Power-Shell кажется платным программным обеспечением. Andres 11 лет назад 0
@Andres Это бесплатная программа. Но ваша версия Windows должна быть действительной. Так что нет трещины или что-то. Потому что во время установки он проверит, есть ли оригинальная windows xp-версия. [Скачать] (http://www.microsoft.com/de-ch/download/details.aspx?id=9591) Christian Woerz 11 лет назад 0
Я протестировал скрипт, и он не работает на PowerShell v2.0 Andres 11 лет назад 0
Хорошо, это работает, но это не дает мне параллельные порты, созданные с помощью NET Andres 11 лет назад 0
Параллельный порт не создается командой NET USE. Команда только сообщает системе, что любые выходные данные, предназначенные для LPT1, должны вместо этого отправляться на принтер по адресу \\ computername \ printername. Debra 11 лет назад 0
0
harrymc

(Я переписал свой предыдущий ответ, который не подходил для вашего случая.)

Windows, по-видимому, распознает кабель, но драйвер должен был сделать более обширную эмуляцию, чтобы он был непосредственно доступен для записи.

Это заставляет вас изобретать свое собственное устройство, в данном случае универсальный принтер. Вполне возможно, что этот принтер непригоден для использования, потому что он передает контрольные коды по кабелю, на который какое-либо устройство, подключенное на другой стороне, не знает, как реагировать. В этом случае кабель принтера может быть не лучшим средством подключения устройств.

Лучшее, что я могу найти, - в статье « Получение дескриптора usbprint.sys», где была разработана программа на C для прямой записи данных на принтер в обход драйвера принтера. Вы можете использовать эту простую программу в качестве шаблона для разработки собственной программы записи данных на кабель.

Чтобы программа работала, необходимо найти GUID интерфейса в Windows кабеля, предполагая, что кабель имеет доступный GUID интерфейса. Вам нужно будет искать в реестре, используя regedit или более быстрый RegScanner .

Да, таким образом я создаю LPT1 и создаю принтер, который печатает на порту LPT1, но как я могу назначить этот порт кабелю USB-to-Parallel IEEE-1284? В противном случае принтер печатает на виртуальный порт LPT1. Andres 11 лет назад 0
Вы говорите выше, что команда NET USE LPT1: успешно подключила LPT1 к кабелю. Если это не так, есть ли в диалоговом окне «Добавить принтер» доступный порт с именем USB001 или аналогичный. harrymc 11 лет назад 0
Да, я создал принтер, который подключен к USB001, который является моим кабелем, но я не могу получить доступ к порту LPT. Смотрите мой отредактированный вопрос, пожалуйста. Andres 11 лет назад 0
Вам не нужен LPT, поэтому лучше удалите его. Вам нужен локальный принтер, созданный с драйвером реального физического принтера и использующий USB-порт кабеля. Отключите все ненужные USB-устройства при создании принтера. Номер порта, вероятно, будет USB001, который, я надеюсь, вы увидите в списке портов, который является портом виртуального принтера по умолчанию в Windows для USB-принтеров. USB002 появляется, только если USB001 уже используется. harrymc 11 лет назад 0
В дополнение к вышеперечисленному: какой марки у вас кабель USB-Parallel и вы получили диск с драйверами при его покупке? harrymc 11 лет назад 0
Смотрите мой отредактированный вопрос. Мне не нужно печатать документ, мне нужно использовать этот USB-to-Parallel для записи / чтения необработанных данных на нем. Кабель Z-TEK (http://www.z-tek.com.cn/) очень китайский, и я не получил ни одного компакт-диска с драйверами. Andres 11 лет назад 0
Я все еще думаю, что вам не хватает водителя. Мне не удается попасть на z-tek.com.cn, но я надеюсь, что вы искали там драйвер. Единственный, который я нашел [здесь] (http://www.driverssoftwareupdates.com/z/z_tek_usb_to_serial_rs232.html) и будет работать только на 32-битной XP. В VirusTotal он выглядит чистым, но примите меры предосторожности, включая точку восстановления системы. harrymc 11 лет назад 0
Я установил его, это программа обновления драйверов, ничего более и новые драйверы не найдены. Кабель распознается как USB Printing Support, поэтому я не думаю, что проблема в драйвере. Andres 11 лет назад 0
Я переписал свой ответ, но не могу гарантировать, что изложенный подход будет работать. Возможно, вам лучше приобрести другой вид соединительного кабеля. harrymc 11 лет назад 0

Похожие вопросы