USB Printing Support
でDevice manager
として表示されるUSB-パラレルIEEE-1284ケーブルをLPTポートとして機能させようとしていますが、答えを試しました ここ 。このコマンドの使用:
Net Use LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES
コマンドは正常に実行されますが、ハードウェアデバイスにLPT1が表示されず、書き込むアドレスを取得できません。 RXTXlibを使用してシリアルポートとパラレルポートを一覧表示するJavaアプリケーションを作成したため、作成したポートが終了することはわかっています。出力は次のとおりです。
私のPCにはLPTポートがないため、NET
コマンドを使用してすべてのLPTポートを追加しました。しかし、アドレスを取得するための場所はどこにも見当たりません。RXTXlibでは、ポートアドレスAFAIKを取得できません。ポートにアクセスする方法はありますか?
編集:
わかりました。少し明確にするために、USB-パラレルIEEE-1284を使用しています。これをWindows XPマシンに接続すると、USB Printing Support
デバイスとして表示されます。プリンタで動作するように設計されているため、LPTポートとしては表示されません。
ジェネリック/テキストドライバを使用してプリンタを作成し、USBケーブルのポートであるためUSB001
ポートに接続しました。次に、プリンターを共有し、LPT
コマンドを使用してNET
ポートを作成します。ここで、たとえば InpOut32.dll を使用して、他のネイティブLPTポートで行うのと同じように、そのLPTポートにデータを書き込みたいと思います。
その方法でポートにアクセスできない場合、ポートにアクセスして生データを読み書きするにはどうすればよいですか?ドキュメントを印刷するのではなく、パラレルポートの場合と同じように、ドキュメントに生データを書き込んだり読み取ったりします。
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)
との通信は可能です。必要に応じて、独自のアダプターを作成できます。回路図はすべてサイトにあります。 ここ ビルド方法の完全な手順(ビデオを含む)を見つけることができます。または、入手方法の詳細について彼にメールすることもできます。
私はあなたがこれについてすべて間違っているかもしれないと思います。 「NetUse」を使用するのではなく、アダプタのソフトウェアドライバを使用して、仮想プリンタポートをUSBポートに関連付ける必要があります。 Rikは、これがどのように機能するかのスクリーンショットを投稿しました。アダプタのソフトウェアで許可されている場合にのみ、その物理ポートが存在するかのように書き込むことができます。
表示したNetUse LPT1コマンドは、自分のコンピューターまたは別のコンピューターのプリンターに接続し、そのプリンターをローカル(LPT1)プリンターとして設定する場合に使用します。これは、デバイス名LPT1に出力し、それをリダイレクトすることに基づいています。これは、ソフトウェアでは実行されないと言っています(ハードウェアポートが必要です)。
これがStartechのドライバーで、これらのケーブルのいくつかを作っていますが、それがあなたのために働くかどうかはわかりません。それは他のいくつかのモデル(私が所有しているモデルを含む)で動作します: http://sgcdn.startech.com/005329/media/sets/ASIX_MosChip-MCS7715_Drivers/ASIX_MCS7715.Zip
それまでの間、そのNetUseコマンドを削除してください。現時点では実際には役に立ちません。ローカルプリンターでまったく機能させることができる場合でも、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
}
(私はあなたのケースに合わなかった私の以前の答えを書き直しました。)
ケーブルはWindowsによって認識されているようですが、ドライバーが直接書き込みに使用できるようにするには、さらに広範なエミュレーションを実行する必要があります。
これにより、独自のデバイス(この場合は汎用プリンター)を発明する必要があります。このプリンタは、反対側に接続されているデバイスが応答方法を知らないケーブルを介して制御コードを送信するため、使用できない可能性があります。この場合、プリンタケーブルはデバイスを接続するための最良の手段ではない可能性があります。
私が見つけることができる最高のものは、記事 sbprint.sysのハンドルを取得する にあります。ここでは、プリントドライバーをバイパスしてデータをプリンターに直接書き込むためのCプログラムが開発されました。この単純なプログラムをテンプレートとして使用して、データをケーブルに書き込むための独自のプログラムを開発することができます。
プログラムが機能するには、ケーブルにアクセス可能なインターフェイスGUIDがあると仮定して、ケーブルのWindowsでインターフェイスのGUIDを見つける必要があります。regeditまたはを使用してレジストリを検索する必要があります。より高速 RegScanner 。