如何在 Windows XP 中访问通过 NET 命令创建的并行端口?

如何在 Windows XP 中访问通过 NET 命令创建的并行端口?

我正在尝试使用 USB 转并行 IEEE-1284 电缆(显示为USB Printing Support用作Device managerLPT 端口),并尝试了以下答案这里. 使用此命令:

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)。如果您愿意,您可以制作自己的适配器。原理图都在网站上。这里您可以找到有关如何构建一个的完整说明(包括视频)。或者您可以给他发邮件以获取有关如何获取的详细信息。

USB2LPT 适配器 USB2LPT 适配器 USB 转并行

答案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 或更快的注册扫描器

相关内容