web-dev-qa-db-ja.com

Windows XPでNETコマンドによって作成されたパラレルポートにアクセスするにはどうすればよいですか?

USB Printing SupportDevice managerとして表示されるUSB-パラレルIEEE-1284ケーブルをLPTポートとして機能させようとしていますが、答えを試しました ここ 。このコマンドの使用:

Net Use LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES

コマンドは正常に実行されますが、ハードウェアデバイスにLPT1が表示されず、書き込むアドレスを取得できません。 RXTXlibを使用してシリアルポートとパラレルポートを一覧表示するJavaアプリケーションを作成したため、作成したポートが終了することはわかっています。出力は次のとおりです。

enter image description here

私のPCにはLPTポートがないため、NETコマンドを使用してすべてのLPTポートを追加しました。しかし、アドレスを取得するための場所はどこにも見当たりません。RXTXlibでは、ポートアドレスAFAIKを取得できません。ポートにアクセスする方法はありますか?

編集:

わかりました。少し明確にするために、USB-パラレルIEEE-1284を使用しています。これをWindows XPマシンに接続すると、USB Printing Supportデバイスとして表示されます。プリンタで動作するように設計されているため、LPTポートとしては表示されません。

ジェネリック/テキストドライバを使用してプリンタを作成し、USBケーブルのポートであるためUSB001ポートに接続しました。次に、プリンターを共有し、LPTコマンドを使用してNETポートを作成します。ここで、たとえば InpOut32.dll を使用して、他のネイティブLPTポートで行うのと同じように、そのLPTポートにデータを書き込みたいと思います。

その方法でポートにアクセスできない場合、ポートにアクセスして生データを読み書きするにはどうすればよいですか?ドキュメントを印刷するのではなく、パラレルポートの場合と同じように、ドキュメントに生データを書き込んだり読み取ったりします。

5
Andres

OK。そのため、パラレルデバイス/プリンタを「USB-to-ParallelIEEE-1284」ケーブルを介してコンピュータのUSBポートに接続しました。今、あなたはそれに直接通信する必要があります。スキャナーのドライバーのように、_USB001_などの最新のポートと通信するようにソフトウェアを直接変更することはできないことを理解しています。また、古いLPTxポート用の通常のプロトコルで通信する必要のあるソフトウェア(つまり、LPT1などの代わりに0x378)

それはあなたに1つのオプションを残します、そしてそれは「エミュレーション」です。これは、「USB-to-ParallelIEEE-1284」ケーブルに付属のドライバで行う必要があります。このドライバーは、LPTxポートを作成し、ポート通信などをキャプチャする必要があります。ただし、これらのアダプターのほとんど(すべてではないにしても)には、USBプリンターをエミュレートするドライバーが付属しています。ほとんどの場合、これが最も簡単です(古いDOSプログラムの場合でも、これはNETコマンドで解決できます)が、実際のポート通信に関しては役に立ちません。

したがって、LPTx(およびそのポート)をエミュレートし、コンピューター上の(任意の)USBドライバーと双方向通信できるプログラムを見つける必要があります。まだ見つかりません。

私が見つけた唯一の有用なものはこれでした SBからパラレルへのコンバーター 。これは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アダプターも必要です。その 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.
_

また、そのReduced speed due to emulation (expect 10..100 times slower)をマイナスとしてリストします。ただし、Base address same as built-in (378h, 278h)との通信は可能です。必要に応じて、独自のアダプターを作成できます。回路図はすべてサイトにあります。 ここ ビルド方法の完全な手順(ビデオを含む)を見つけることができます。または、入手方法の詳細について彼にメールすることもできます。

USB2LPT-adapterUSB2LPT-adapterConverter From USB To Parallel

1
Rik

私はあなたがこれについてすべて間違っているかもしれないと思います。 「NetUse」を使用するのではなく、アダプタのソフトウェアドライバを使用して、仮想プリンタポ​​ートをUSBポートに関連付ける必要があります。 Rikは、これがどのように機能するかのスクリーンショットを投稿しました。アダプタのソフトウェアで許可されている場合にのみ、その物理ポートが存在するかのように書き込むことができます。

表示したNetUse LPT1コマンドは、自分のコンピューターまたは別のコンピューターのプリンターに接続し、そのプリンターをローカル(LPT1)プリンターとして設定する場合に使用します。これは、デバイス名LPT1に出力し、それをリダイレクトすることに基づいています。これは、ソフトウェアでは実行されないと言っています(ハードウェアポートが必要です)。

これがStartechのドライバーで、これらのケーブルのいくつかを作っていますが、それがあなたのために働くかどうかはわかりません。それは他のいくつかのモデル(私が所有しているモデルを含む)で動作します: http://sgcdn.startech.com/005329/media/sets/ASIX_MosChip-MCS7715_Drivers/ASIX_MCS7715.Zip

それまでの間、そのNetUseコマンドを削除してください。現時点では実際には役に立ちません。ローカルプリンターでまったく機能させることができる場合でも、LPT1デバイスに書き込む必要があります(ハードウェアの場所に書き込む必要があります。存在する場合のみです)。 )

1
Debra

.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-Microsoft

0
Christian

(私はあなたのケースに合わなかった私の以前の答えを書き直しました。)

ケーブルはWindowsによって認識されているようですが、ドライバーが直接書き込みに使用できるようにするには、さらに広範なエミュレーションを実行する必要があります。

これにより、独自のデバイス(この場合は汎用プリンター)を発明する必要があります。このプリンタは、反対側に接続されているデバイスが応答方法を知らないケーブルを介して制御コードを送信するため、使用できない可能性があります。この場合、プリンタケーブルはデバイスを接続するための最良の手段ではない可能性があります。

私が見つけることができる最高のものは、記事 sbprint.sysのハンドルを取得する にあります。ここでは、プリントドライバーをバイパスしてデータをプリンターに直接書き込むためのCプログラムが開発されました。この単純なプログラムをテンプレートとして使用して、データをケーブルに書き込むための独自のプログラムを開発することができます。

プログラムが機能するには、ケーブルにアクセス可能なインターフェイスGUIDがあると仮定して、ケーブルのWindowsでインターフェイスのGUIDを見つける必要があります。regeditまたはを使用してレジストリを検索する必要があります。より高速 RegScanner

0
harrymc