Jak uzyskać dostęp do portów równoległych utworzonych przez polecenie NET w systemie Windows XP?

5

Próbuję uzyskać IEEE-1284 kabel USB-Parallel który pokazał jak USB Printing Supportsię Device managerdo pracy jako port LPT i próbował odpowiedź tutaj . Używając tego polecenia:

NET USE LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES

Polecenie wykonuje się pomyślnie, ale nie widzę LPT1 w Urządzeniach sprzętowych, aby uzyskać adres do zapisu. Znam port, który tworzę wyjścia, ponieważ stworzyłem aplikację Java, która wyświetla porty szeregowe i równoległe przy użyciu biblioteki RXTX, oto wyjście:

wprowadź tutaj opis obrazu

Dodałem wszystkie porty LPT za pomocą NETpolecenia, ponieważ mój komputer nie ma żadnego. Ale nie widzę ich nigdzie, aby uzyskać adres, a biblioteka RXTX lib nie pozwala mi uzyskać adresu portu AFAIK. Jakieś pomysły, jak uzyskać dostęp do portów?

EDYTOWAĆ:

Ok, aby trochę wyjaśnić, mam USB-do-równoległego IEEE-1284, po podłączeniu do komputera z Windows XP jest on pokazany jako USB Printing Supporturządzenie, więc nie pojawia się jako port LPT, ponieważ jest przeznaczony do pracować z drukarkami.

Stworzyłem drukarkę ze sterownikiem Generic / Text i podłączyłem ją do USB001portu, ponieważ jest to port kabla USB. Następnie udostępniam drukarkę i tworzę LPTport za pomocą NETpolecenia. Teraz chcę zapisać dane do tego portu LPT, tak jak zrobiłbym to z każdym innym rodzimym portem LPT, używając na przykład InpOut32.dll .

Jeśli w ten sposób nie można uzyskać dostępu do portu, w jaki sposób mogę uzyskać dostęp do portu w celu zapisu / odczytu surowych danych? Nie drukować dokumentu, ale zapisywać / odczytywać surowe dane, tak jak w przypadku każdego portu równoległego.

Andres
źródło
Nie możesz zrobić czegoś takiego, public static final String PARALLEL_PORT = "LPT1";jak pokazano na przykładzie kodu komunikacji równoległej ?
martineau
Historycznie, adres portu sprzętowego LPT1 to 0x3BC (patrz Interfejsy ).
martineau
Nie, muszę go używać w innym programie i potrzebuję adresu portu. Tak, ale adres nie jest taki sam dla każdego portu, prawda?
Andres
LPT2 i 3 mają różne stałe adresy (odpowiednio 0x378 i 0x278). Te trzy adresy są takie same we wszystkich systemach kompatybilnych z IBM PC.
martineau
Wydaje się, że nie działa to z portami równoległymi utworzonymi tą metodą
Andres

Odpowiedzi:

1

Dobrze. Podłączono więc urządzenie / drukarkę równoległą za pomocą „USB-do-równoległego IEEE-1284” - do portu USB komputera. Teraz musisz się z nim bezpośrednio komunikować. Rozumiem, że nie można bezpośrednio zmienić oprogramowania, aby komunikować się z nowoczesnymi portami, takimi USB001jak sterowniki skanerów. A oprogramowanie, które masz, musi komunikować się normalnym protokołem dla starych portów LPTx (np. 0x378 zamiast LPT1 itp.)

Pozostawia ci to jedną opcję, a mianowicie „emulację”. Powinno to być zrobione przez sterownik dostarczony z kablem „USB-na-równoległy IEEE-1284”. Ten sterownik powinien tworzyć port LPTx i przechwytywać komunikację z portem itp. Jednak większość (jeśli nie wszystkie) z tych adapterów ma sterowniki emulujące drukarkę USB. W większości przypadków jest to najłatwiejsze (a nawet w przypadku starych programów DOS można to rozwiązać NETpoleceniem), ale jeśli chodzi o prawdziwą komunikację z portem, jest to bezużyteczne.

Więc musisz znaleźć program, który może emulować LPTx (i jego porty) i komunikować się dwukierunkowo ze (dowolnym) sterownikiem USB na twoim komputerze. Nie znalazłem (jeszcze).

Jedyne, co znalazłem, to ten konwerter z USB na równoległy . Ten emuluje LPTx i porty i komunikuje się bezpośrednio z adapterem. Sam tego nie testowałem, ale strona informacyjna wygląda obiecująco. Z pliku pomocy:

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.

Określa swój własny sterownik jako „Sterownik niestabilny”, ale otrzymasz pomysł na to, czego szukasz. Potrzebuje również specjalnego adaptera USB2LPT. Na stronie faq :

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.

Wymienia się również jako minus dla siebie Reduced speed due to emulation (expect 10..100 times slower). Ale pozwoli to na komunikację Base address same as built-in (378h, 278h). Jeśli chcesz, możesz zrobić swój własny adapter. Schematy są na stronie. Tutaj znajdziesz kompletne instrukcje (w tym filmy) dotyczące sposobu ich tworzenia. Albo możesz wysłać do niego pocztą, aby dowiedzieć się, jak go zdobyć.

Adapter USB2LPT Adapter USB2LPT Konwerter Z USB Na Równoległy

Rik
źródło
Tak, czytałem o tym kilka tygodni temu, ale muszę kupić ich kabel i staram się najpierw pracować z moim kablem. Dziękuję Ci!
Andres
Myślałem, że potrafisz budować własne :) (instrukcje są w zestawie). Ale masz rację. To oprogramowanie nie będzie działać bez tego adaptera. Czyste oprogramowanie byłoby najlepsze, ale trudne do znalezienia. W tym miejscu zasugerowano modyfikację kodu źródłowego w celu interakcji z dowolnym sprzętem / adapterem, ale nie znalazłem nikogo, kto to zrobił.
Rik
Może ten artykuł jest interesujący. Pokazuje tylko zapis do adaptera USB-Lpt, ale powinien działać z normalnymi. Jest to dość „zrób to sam”, ale pokazuje, że nie jest łatwym zadaniem napisanie (np. Przełączenie nieco) (nie wspominając o przeczytaniu) adaptera USB-Lpt przeznaczonego dla zwykłych drukarek (a nie innych urządzeń komunikacyjnych).
Rik
1

Myślę, że możesz się tak mylić. Nie należy używać „USE NET”, ale raczej użyć sterownika oprogramowania adaptera, aby skojarzyć wirtualny port drukarki z portem USB. Rik opublikował zrzut ekranu, jak to działa. Tylko wtedy, gdy oprogramowanie adaptera na to zezwala, powinno być możliwe pisanie tak, jakby istniał ten fizyczny port.

Polecenie NET USE LPT1, które pokazałeś, służy do łączenia się z drukarką na własnym lub innym komputerze i ustawiania tej drukarki jako lokalnej (LPT1) drukarki. Opiera się na drukowaniu na nazwę urządzenia LPT1, a następnie przekierowywaniu tego, o którym mówiłeś, że oprogramowanie nie będzie działać (wymaga portu sprzętowego).

Oto sterownik z firmy Startech, który tworzy niektóre z tych kabli, ale nie wiem, czy to zadziała dla Ciebie; działa z niektórymi innymi modelami (włączając te, które posiadałem): http://sgcdn.startech.com/005329/media/sets/ASIX_MosChip-MCS7715_Drivers/ASIX_MCS7715.zip

W międzyczasie pozbyć się tego polecenia NET USE; to naprawdę nie pomaga w tej chwili, a gdybyś mógł go w ogóle uruchomić z drukarką lokalną, nadal wymagałbyś, abyś pisał do urządzenia LPT1 (nie do lokalizacji sprzętu, w której by się znajdował, gdyby tylko istniała). )

Debra
źródło
Nie odinstalowałem sterownika instalowanego przez system Windows XP na kabel i zainstalowałem ten, ale nie działał. Nie, nie mogę nawet zmusić systemu Windows do zainstalowania sterownika kabla.
Andres
0

Będziesz potrzebował .NET-Framework i PowerShell, ale dzięki temu skryptowi możesz uzyskać dostęp do listy dowolnych równoległych portów zainstalowanych w twoim systemie. (+ Dodatkowe informacje)

$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 
} 

Źródło: Technet-Microsoft

Christian Wörz
źródło
Założyłem go przeszukując Internet, ale nie wiem, jak wykonać skrypty Power-Shell, a Power-Shell wydaje się być płatnym oprogramowaniem
Andres
@Andres To jest freeware. Ale twoja wersja Windows musi być poprawna. Więc nie popękany czy coś. Ponieważ podczas instalacji sprawdzi, czy istnieje oryginalna wersja systemu Windows XP. Pobierz
Christian Wörz
Testowałem skrypt i nie działa on na PowerShell v2.0
Andres
Ok, to działa, ale nie daje mi portów równoległych utworzonych za pomocą NET
Andres
Port równoległy nie jest tworzony za pomocą polecenia NET USE. Polecenie mówi tylko systemowi, że każde wyjście skierowane na LPT1 powinno zamiast tego zostać wysłane do drukarki pod nazwą nazwa komputera.
Debra
0

(Przepisałem poprzednią odpowiedź, która nie pasowała do Twojej sprawy).

Kabel jest najwyraźniej rozpoznawany przez system Windows, ale sterownik powinien był wykonać bardziej obszerną emulację, aby był dostępny bezpośrednio do pisania.

Zmusza to do wymyślenia własnego urządzenia, w tym przypadku drukarki ogólnej. Jest całkiem możliwe, że ta drukarka jest bezużyteczna, ponieważ wysyła kody sterujące przez kabel, do którego jakiekolwiek urządzenie jest podłączone po drugiej stronie, nie wie, jak odpowiedzieć. Kabel drukarki może w tym przypadku nie być najlepszym sposobem podłączenia urządzeń.

Najlepszą rzeczą, jaką mogę znaleźć, jest artykuł Uzyskanie uchwytu na usbprint.sys, w którym opracowano program C do bezpośredniego zapisu danych do drukarki przez pominięcie sterownika druku. Możesz użyć tego prostego programu jako szablonu do opracowania własnego programu do zapisywania danych na kablu.

Aby program działał, należy znaleźć identyfikator GUID interfejsu w systemie Windows kabla, zakładając, że kabel ma dostępny GUID interfejsu. Musisz przeszukać rejestr przy użyciu regedit lub szybszego RegScanner .

harrymc
źródło
Tak, w ten sposób tworzę LPT1 i tworzę drukarkę, która drukuje na porcie LPT1, ale jak mogę przypisać ten port do kabla USB-równoległego IEEE-1284? W przeciwnym razie drukarka drukuje do wirtualnego portu LPT1.
Andres
Powiedziałeś powyżej, że polecenie NET USE LPT1: pomyślnie połączyło LPT1 z kablem. Jeśli tak nie jest, czy masz w oknie dialogowym „Dodaj drukarkę” dostępny port o nazwie USB001 lub podobny.
harrymc
Tak, stworzyłem drukarkę podłączoną do USB001, który jest moim kablem, ale nie mogę uzyskać dostępu do portu LPT. Zobacz moje edytowane pytanie proszę.
Andres,
Nie potrzebujesz LPT, więc lepiej go usuń. Potrzebna jest lokalna drukarka utworzona za pomocą sterownika rzeczywistej drukarki fizycznej i za pomocą portu USB kabla. Odłącz wszystkie niepotrzebne urządzenia USB podczas tworzenia drukarki. Numer portu to prawdopodobnie USB001, mam nadzieję, że zobaczysz go na liście portów, która jest domyślnym wirtualnym portem drukarki w systemie Windows dla drukarek USB. USB002 pojawia się tylko wtedy, gdy USB001 jest już używany.
harrymc
Oprócz powyższego: Co sprawia, że ​​jest to kabel USB-równoległy i czy otrzymałeś dysk ze sterownikami, gdy go kupiłeś?
harrymc