Hi!
Ich nutze für so etwas immer die inpout32.dll von
www.logix4u.com. Die Library ist klein, schnell, und hat nur das, was man braucht.
Lade sie in dein Programm wie folgt:
Delphi-Quellcode:
// inpout32.dll für LPT-Ausgang unter WinNT, Win2000 und WinXP laden
procedure Out32(PortAddress:word;Value:byte);
stdcall;
export;
external '
inpout32.DLL';
function Inp32(PortAddress:word):byte;
stdcall;
export;
external '
inpout32.DLL';
Mit
out32(888,1);
kannst du z.B. D0 des LPT1-Portes auf High setzen. Mit
Inp32(888);
liest du den aktuellen Status des LPT1-Portes aus. Das klappt prima. Zudem kann man jede Byteoperation anwenden, die man kennt.
Wenn du
Out(888,255);
setzt, dann schaltest du alle Register auf high, bei 127 nur das letzte, bei 64 das vorletzte, etc.
Der LPT1-Port geht dann auch noch von 888 auf 889 und 890, wo man dann jeweils neben den Data-Registern auch die Status- und Strobe-/Line-/Feed- etc. Register lesen / setzen kann.
Du musst jetzt nur noch einen Timer setzen, der in bestimmten Zeitabständen den Port mit
if not inp32(888)=0 then ShowMessage('Da ist einer auf meine Schnur getreten!');
etc. abfragt. Pass aber auf: manche Register sind negiert und müssen gesondert behandelt werden.
Schöne grüße,
Christian