Как получить доступ к параллельным портам, созданным командой NET в Windows XP?
Я пытаюсь получить кабель USB-Parallel IEEE-1284, который показан как USB Printing Support
в Device manager
работать в качестве порта LPT и попробовал ответ здесь. Используя эту команду:
NET USE LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES
Команда выполнена успешно, но я не вижу LPT1 в Аппаратных устройствах, чтобы получить адрес для записи в него. Я знаю, что порт, который я создаю, выходит, потому что я создал приложение Java, в котором перечислены последовательные и параллельные порты, используя библиотеку RXTX, вот вывод:
Я добавил все эти порты LPT с NET
команда, потому что мой компьютер не имеет. Но я нигде не вижу их, чтобы получить адрес, а библиотека RXTX не позволяет мне получить адрес порта AFAIK. Есть идеи, как получить доступ к портам?
РЕДАКТИРОВАТЬ:
Хорошо, чтобы прояснить ситуацию немного, у меня есть IEEE-1284 USB-Parallel, когда вы подключаете его к компьютеру с Windows XP, он отображается как USB Printing Support
устройство, поэтому он не отображается как порт LPT, потому что он предназначен для работы с принтерами.
Я создал принтер с драйвером Generic / Text и подключил его к USB001
порт, потому что это порт USB-кабеля. Затем я делю принтер и создаю LPT
использование порта NET
команда. Теперь я хочу записать данные в этот LPT-порт, как я бы сделал с любым другим собственным LPT-портом, используя, например, InpOut32.dll.
Если невозможно получить доступ к порту таким образом, как я могу получить доступ к порту для записи / чтения необработанных данных на нем? Не для печати документа, а для записи / чтения необработанных данных в него, как это было бы с любым параллельным портом.
4 ответа
Хорошо. Таким образом, вы подключили параллельное устройство / принтер через USB-порт IEEE-1284, подключенный к USB-порту вашего компьютера. Теперь вам нужно напрямую общаться с ним. Я понимаю, что вы не можете изменить программное обеспечение напрямую для связи с современными портами, такими как USB001
и т.д., как драйверы сканеров. И программное обеспечение, которое у вас есть, должно взаимодействовать по обычному протоколу для старых портов LPTx (т. Е. 0x378 вместо LPT1 и т. Д.)
Это оставляет вас с одним вариантом, и это "эмуляция". Это должно быть сделано драйвером, поставляемым с кабелем USB-to-Parallel IEEE-1284. Этот драйвер должен создавать порт LPTx и захватывать порт связи и т. Д. Но большинство (если не все) этих адаптеров поставляются с драйверами, которые имитируют USB-принтер. В большинстве случаев это проще всего (и даже в случае старых DOS-программ это можно решить с помощью NET
команда), но когда дело доходит до реального порта-связи, это бесполезно.
Поэтому вам нужно найти программу, которая может эмулировать LPTx (и его порты) и двунаправленно связываться с (любым) USB-драйвером на вашем компьютере. Я не нашел ни одного (пока).
Единственной полезной вещью, которую я нашел, был этот конвертер с USB на параллель. Этот эмулирует LPTx и порты и напрямую связывается с адаптером. Я не проверял это сам, но информационная страница выглядит многообещающе. Из справочного файла:
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.
Он помечает свой собственный драйвер как "Нестабильный драйвер", но вы получите представление о том, что вы ищете. Для этого также нужен специальный USB2LPT-адаптер. Со страницы часто задаваемых вопросов:
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.
Он также перечисляет как минус для себя его Reduced speed due to emulation (expect 10..100 times slower)
, Но это позволит общаться с Base address same as built-in (378h, 278h)
, Если вам нравится, вы можете сделать свой собственный адаптер. Схемы все на сайте. Здесь вы можете найти полные инструкции (включая видео) о том, как его создать. Или же вы можете написать ему подробности о том, как его получить.
Я думаю, что вы можете пойти об этом все неправильно. Не следует использовать "NET USE", а использовать программный драйвер адаптера, чтобы связать порт виртуального принтера с портом USB. Рик опубликовал скриншот того, как это работает. Только если программное обеспечение адаптера позволяет это сделать, вы сможете писать так, как если бы этот физический порт существовал.
Команда NET USE LPT1, которую вы показали, предназначена для подключения к принтеру на вашем собственном или на другом компьютере и установки этого принтера в качестве локального (LPT1) принтера. Он основан на печати с именем устройства LPT1 и последующем перенаправлении того, что, как вы сказали, ваше программное обеспечение не будет выполнять (требуется аппаратный порт).
Вот драйвер от Startech, который делает некоторые из этих кабелей, но я не знаю, будет ли он работать для вас; он работает с некоторыми другими моделями (включая те, которые мне принадлежали): http://sgcdn.startech.com/005329/media/sets/ASIX_MosChip-MCS7715_Drivers/ASIX_MCS7715.zip
А пока избавьтесь от этой команды NET USE; это действительно не помогает вам прямо сейчас, и если бы вы могли заставить его работать вообще с локальным принтером, все равно потребовалось бы, чтобы вы выполняли запись на устройство LPT1 (а не в то место, где оно было бы, если бы оно существовало).)
Вам понадобятся.NET-Framework и PowerShell, но с помощью этого скрипта вы можете получить доступ к списку любых параллельных портов, установленных в вашей системе.(+ Дополнительная информация)
$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
}
Источник: Технет-Microsoft
(Я переписал свой предыдущий ответ, который не подходил для вашего случая.)
Windows, по-видимому, распознает кабель, но драйвер должен был сделать более обширную эмуляцию, чтобы он был непосредственно доступен для записи.
Это заставляет вас изобретать свое собственное устройство, в данном случае универсальный принтер. Вполне возможно, что этот принтер непригоден для использования, потому что он передает контрольные коды по кабелю, на который какое-либо устройство, подключенное с другой стороны, не знает, как реагировать. В этом случае кабель принтера может быть не лучшим средством подключения устройств.
Лучшее, что я могу найти, - в статье " Получение дескриптора usbprint.sys", где была разработана программа на C для прямой записи данных на принтер в обход драйвера принтера. Вы можете использовать эту простую программу в качестве шаблона для разработки собственной программы записи данных на кабель.
Чтобы программа работала, необходимо найти GUID интерфейса в Windows кабеля, предполагая, что кабель имеет доступный GUID интерфейса. Вам нужно будет искать в реестре, используя regedit или более быстрый RegScanner.