Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Druckerport Adresse auslesen





Frage

Hi weiß zufälliger weiße jmd wie man mit Hilfe von C++ die Adresse des Druckerports ausliest? Danke schon mal im Vorraus Marc

Antwort 1 von manfred

Vielleicht holft das ein wenig:
http://wwwserv1.rz.fh-hannover.de/etech/e12/downloads/dv_labor/Seri...
Die vom Bios ermittelten Par. ports starten inho bei 0000:0408

Gruß Manfred



Antwort 2 von Gummikuh

Hallo Marc,
kenne mich nicht so aus, aber ist normalerweise die Adresse des Druckerport nicht bekannt 378h Int.7 ?
Kannst Du nicht ein Register auslesen wenn Du den Int 7 auslöst.
oder einfach versuchen die üblichen Adressen (378h, 278h, 3BCh, 2BCh) anzusprechnen, die die antwortet, ist vorhanden.
Soll den ein Drucker damit angesteuert werden, dann ggf. einfach paper out oder online abfragen.

Hab' hier noch was gefunden:

Interrupt 17h - Druckerzugriff
Die Funktionen des Interrupts 17h Funktion Bedeutung und Eingabe Ausgabe und Kommentar 
00h Zeichen parallel ausgeben
DX: Schnittstellennummer
AL: Zeichencode AH: Schnittstellenstatus 
01h Initialisierung
DX: Schnittstellennummer (0=LPT1) AH: Schnittstellenstatus 
02h Schnittstellenstatus ermitteln
DX: Schnittstellennummer AH: Schnittstellenstatus 

Schnittstellenstatus Bitnr. Zustand Bitnr. Zustand 
0 Timeout-Fehler 4 On Line 
1 ist immer 0 5 Papierende 
2 ist immer 0 6 Empfangsbestätigung 
3 Ein/Ausgabefehler 7 Beschäftigt 


Gruss
Micha

Antwort 3 von Dante

Danke erstmals

aber ich glaube ich habe etwas vergessen.Ja die Druckerport adresse ist mir bekannt. In meinem Porgramm habe ich diese 0x378 gerade fest definiert. Nur kann ich mir dabei sicher sein das das auf jedem PC so der Fall sein wird?

Eigentlich brauche ich "nur" ein Programm/Quelltext, der mir "die anfangsadresse" Ausließt also 0x378 weil 0x379...... kann man ja mit einer einfachen formel weiterführen.

Übrigens ich programmiere dieses Programm für Win2k mit einem speziellen Treiber -> http://www.logix4u.net/inpout32.htm

der Quelltext um mit dieser DLL zu arbeiten schaut folgender maßen aus:




#include <stdio.h>
#include <conio.h>
#include <windows.h>


/* Definitions in the build of inpout32.dll are: */
/* short _stdcall Inp32(short PortAddress); */
/* void _stdcall Out32(short PortAddress, short data); */


/* prototype (function typedef) for DLL function Inp32: */

typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;

short x;
int i;
int t;

/* Load the library */
hLib = LoadLibrary("inpout32.dll");

if (hLib == NULL) {
printf("LoadLibrary Failed.\n");
return -1;
}

/* get the address of the function */

inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}


oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}


/***************************************************************/
/* now test the functions */

/* Try to read 0x378..0x37F, LPT1: */

for (i=0x378; (i<0x380); i++) {

x = (inp32)(i);

printf("port read (%04X)= %04X\n",i,x);
}

/***** Write the data register */

i=0x378;
x=0x00;

(oup32)(i,x);

printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

/***** And read back to verify */
x = (inp32)(i);
printf("port read (%04X)= %04X\n",i,x);



/***** One more time, different value */

i=0x378;
x=0xAA;

(oup32)(i,x);

printf("port write to 0x%X, datum=0x%2X\n" ,i ,x);

/***** And read back to verify */
x = (inp32)(i);
printf("port read (%04X)= %04X\n",i,x);

/***** One more time, different value */

i=0x378;

printf("Binärzähler von 0x00 auf 0xFF\n");
printf("Vorgang läuft, Bitte warten..........\n");
for (t=0; (t<=10000); t++)
for (x=0x01; (x<=0xFF); x++)
for (t=0; (t<=10000); t++)
(oup32)(i,x);

/***** And read back to verify */
x = (inp32)(i);
printf("port read (%04X)= %04X\n",i,x);

FreeLibrary(hLib);
scanf("%e");
return 0;
}

Wie zu sehen ist ist der Druckerport immer mit i=0x378 definiert

Antwort 4 von manfred

port 0x378 ist ja auch der Standard. Aber es gibt auch systeme mit 2 oder 3 P-Ports. Außerdem kann in vielen BIOS's die Port-Adresse des (onboard)Anschlußes geändert werden.
Gruß Manfred
ps hab' von C++ KEINE Ahnung!


Antwort 5 von Dante

Naja ich lass das jetzt mal bei der Adresse, bei meinen Rechnern weiß ich ja das der Druckerport mit der Standardadresse arbeitet. Wenn ich mal mehr zeit habe dann knie ich mich in dieses Thema. Aber Ich danke trotzdem allen die mir geschrieben haben um zu Helfen, ich werde die Infos gut gebrauchen können.

THX bye Marc

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: