Forum: PC-Programmierung Adresse von LPT herausfinden


von Dennis (Gast)


Lesenswert?

Hallo!

Ich kann ohne Probleme auf die LPT unter Win2000 zugreifen.
Jetzt will ich, dass das Programm automatisch die Adresse von der LPT
und die Anzahl der LPTs findet.
Wie muss ich dies in C Programmieren?

von Rufus T. Firefly (Gast)


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.

von Dennis (Gast)


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.

von Rufus T. Firefly (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.