Вопрос № 124742: Добрый день.
Помогите до конца разобраться с работой с LPT портом.
По ниже приведенному коду произвожу запись в порт со 2 по 9 пины. Возможно также производить запись в пины 1, 14, 16 и 17 ; и читать состояние пинов 10-13 и 15
...
Вопрос № 124.742
Добрый день.
Помогите до конца разобраться с работой с LPT портом.
По ниже приведенному коду произвожу запись в порт со 2 по 9 пины. Возможно также производить запись в пины 1, 14, 16 и 17 ; и читать состояние пинов 10-13 и 15
var
hLpt: THandle;
ret: DWORD;
Address: byte;
Data: byte;
const
IOCTL_PAR_SET_WRITE_ADDRESS = $16001C;
procedure TForm1.FormCreate(Sender: TObject);
begin
hLPT := CreateFile('LPT1', GENERIC_WRITE, 0, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(hLpt);
end;
procedure TForm1.Button1Click(Sender: TObject);
Var S1:PChar;
begin
//Caption:=IntToStr(EOF);
S1 := 'This is without driver print'+#10;
WriteFile(hLpt, S1^, Length(S1), ret, nil);
Edit1.Text := IntToStr(ret);
end;
Отвечает: PavelGM
Здравствуйте, Супер Иван Иваныч!
Windows не способна оперировать на уровне "пинов". Работа ведется с данными, а не с пинами, а ваши пины 2-9 - это просто 8 байт data шины. Вам нужен доступ к регистрам порта - считывание регистра состояния даст 10-13 пины, да и 15 (Error) там же. Не знаю можно ли получить такую информацию через CreateFile, но через ставший уже классическим драйвер gwiopm.sys - без проблем - у меня так индикатор работает.
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 27.02.2008, 12:03