我正在尝试使用 USB 转并行 IEEE-1284 电缆(显示为USB Printing Support
用作Device manager
LPT 端口),并尝试了以下答案这里. 使用此命令:
NET USE LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES
命令执行成功,但我在硬件设备中看不到 LPT1,因此无法获取写入地址。我知道我创建的端口退出了,因为我使用 RXTX lib 制作了一个列出串行和并行端口的 Java 应用程序,输出如下:
我使用命令添加了所有 LPT 端口,NET
因为我的 PC 没有端口。但我没有看到它们在任何地方获取地址,而且据我所知,RXTX lib 不允许我获取端口地址。有什么关于如何访问端口的想法吗?
编辑:
好的,稍微澄清一下,我有一个 USB 转并行 IEEE-1284,当您将它连接到 Windows XP 机器时,它会显示为一个USB Printing Support
设备,所以它不会显示为 LPT 端口,因为它是设计用于打印机的。
我创建了一个带有通用/文本驱动程序的打印机,并将其连接到USB001
端口,因为它是 USB 电缆的端口。然后我共享打印机并LPT
使用NET
命令创建一个端口。现在我想将数据写入该 LPT 端口,就像我使用任何其他本机 LPT 端口一样输入输出32库。
如果无法通过这种方式访问端口,我该如何访问端口并向其写入/读取原始数据?不是打印文档,而是像使用任何并行端口一样向其写入/读取原始数据。
答案1
好的。您通过“USB 转并行 IEEE-1284”电缆将并行设备/打印机连接到计算机的 USB 端口。现在您需要直接与其通信。我明白您不能像USB001
扫描仪驱动程序那样直接更改软件以与现代端口通信。并且您拥有的软件需要通过旧 LPTx 端口的正常协议进行通信(即 0x378 而不是 LPT1 等)
这样您就只剩下一个选项,那就是“模拟”。这应该由“USB 转并行 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)
。如果您愿意,您可以制作自己的适配器。原理图都在网站上。这里您可以找到有关如何构建一个的完整说明(包括视频)。或者您可以给他发邮件以获取有关如何获取的详细信息。
答案2
我认为你可能完全搞错了。你不应该使用“NET USE”,而应该使用适配器的软件驱动程序来关联虚拟的打印机端口与 USB 端口。Rik 发布了一张屏幕截图,展示了其工作原理。只有当适配器的软件允许时,您才能够像存在该物理端口一样进行写入。
您展示的 NET USE LPT1 命令适用于您连接到自己或其他计算机上的打印机,并将该打印机设置为本地 (LPT1) 打印机的情况。它基于打印到设备名称 LPT1,然后重定向,您曾说过您的软件不会这样做(需要硬件端口)。
这是来自 Startech 的驱动程序,它制造了一些这样的电缆,但我不知道它是否适合您;它确实适用于一些其他型号(包括我拥有的型号): http://sgcdn.startech.com/005329/media/sets/ASIX_MosChip-MCS7715_Drivers/ASIX_MCS7715.zip
同时,摆脱该 NET USE 命令;它现在真的帮不了你,如果你能让它与本地打印机一起工作,仍然需要你写入 LPT1 设备(而不是写入硬件位置,如果它存在的话。)
答案3
您将需要 .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
}
来源:Technet-微软
答案4
(我已重写之前的答案,但它不适合您的情况。)
该电缆显然被 Windows 识别,但驱动程序应该进行更广泛的模拟,以便直接可供写入。
这迫使你发明自己的设备,在本例中是一台通用打印机。这台打印机完全有可能无法使用,因为它通过电缆发送控制代码,而另一端连接的任何设备都不知道如何响应。在这种情况下,打印机电缆可能不是连接设备的最佳方式。
我能找到的最好的文章是 获取 usbprint.sys 的句柄 其中开发了一个 C 程序,用于绕过打印驱动程序直接将数据写入打印机。您可以使用这个简单的程序作为模板来开发自己的程序,用于将数据写入电缆。
要使程序正常工作,必须在 Windows 中找到电缆接口的 GUID,假设电缆确实具有可访问的接口 GUID。您需要使用 regedit 或更快的注册扫描器。