Adresse von LPT herausfinden

Gast #199098
Lesenswert?
• ▲
▼
Das steht eigentlich im BIOS-Datenbereich, wenn man denn auf diese
treiberlose Art und Weise mit der Parallelschnittstelle 'rumfummeln
will.

Der Windows-Weg ist ein Nachsehen in der Registry.

Welche Parallelschnittstellen vorhanden sind, findest Du durch
Enumerieren der Werte unter dem Schlüssel
"HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PARALLEL PORTS"

die einzelnen Werte (vom Typ REG_SZ) heissen beispielsweise
"\Device\Parallel0"

und der Wert davon wiederum lautet (auf meinem Rechner)
"\DosDevices\LPT1"

Die verwendeten Resourcen (I/O-Ports etc) findest Du unter dem
Schlüssel

"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter"

Die nächste Ebene ist von 0 bis irgendwas durchnumeriert, und unter
einem der Schlüssel gibt es wiederum einen Schlüssel namens
""ParallelController"
Darunter wiederum ist für jede installierte Schnittstelle ein von 0 bis
irgendwas durchnumerierter Schlüssel zu finden.

Auf meinem System ist das beispielsweise
"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\5\P 
arallelController\0"

(die 5 ist höchstwahrscheinlich von System zu System unterschiedlich)

Darunter gibt es einen Wert namens "Configuration Data" vom Typ
REG_FULL_RESOURCE_DESCRIPTOR, in dem alle relevanten Daten aufgeführt
sind.

Das Format von REG_FULL_RESOURCE_DESCRIPTOR wirst Du vermutlich in der
MSDN beschrieben finden.



Das ist der "elegante" von Microsoft vorgesehene Weg (naja, wirklich
vorgesehen ist das so nicht, weil natürlich Programme gar nicht mit der
parallelen Schnittstelle durch Port-Zugriffe kommunizieren sollen).

Deutlich einfacher ist es, wenn Du die Standard-Adressen der drei
möglichen Parallelschnittstellen zur Auswahl anbietest - auf
nicht-Standard-Parallelschnittstellen kannst Du auf Deine Art und Weise
eh' nicht zugreifen (PCI-Karten, USB-Parallel-Adapter).
Also lohnt der Aufwand nicht wirklich.

Die Standard-Adressen sind
0x378
0x3BC (MDA)
0x278

Wie gesagt, andere als diese parallelen Schnittstellen kannst Du mit
direkten I/O-Befehlen nicht befummeln, da die verwendete Hardware
völlig anders aufgebaut ist.
Gast #199099
Lesenswert?
• ▲
▼
Danke für die Info!

Wie kann ich dies zum Beispiel mit dem Borland Builder C++ realisieren?

Wenn zum Beispiel ein button gedrückt wird, dann erscheint die ANzahl
der LPT's sowie die dazugehörigen Adressen.
Gast #199100
Lesenswert?
• ▲
▼
Welchen Compiler man verwendet, um Win32-API-Funktionen aufzurufen,
dürfte völlig irrelevant sein.

Sieh Dir die Dokumentation der Registryfunktionen in der MSDN an.

Was die Oberflächenprogrammierung betrifft: Sieh Dir die Dokumentation
Deines Compilers an. Sicherlich finden sich irgendwo im Netz auch
Tutorials dazu. Ich kann dazu nichts weiteres beitragen, da ich keine
Borland-Compiler mehr verwende, seitdem Borland die große "wir machen
einen 32-Bit-Compiler"-Verarsche abgezogen hat.

(Borland C++ 4.0 ist der erste Versuch von Borland gewesen, einen
32-Bit-Compiler herauszubringen. Das tolle war, daß der unter dem
einzigen damals verfügbaren 32-Bit-Betriebssystem, für das er Code
erzeugen konnte, nicht lief ...)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.