Hallo allemaal,
Ik wil de status van een LPT1 printer uitlezen. De createfile funtie werkt goed. Deze geeft een handle terug. Als ik vervolgens de SetcommTimeouts aanroept dan geeft deze FALSE terug als resultwaarde (De GetLastError geeft 1 terug). Heeft iemand enig idee waar dit aan zou kunnen liggen en wat die 1 betekend?
Als ik trouwens daarna de WriteFile aanroep dan worden de bytes wel verzonden naar e printer. Als ik daarna de ReadFile aanroep dan blijft mijn programma hierop hangen en komt dus niet mer uit deze funtie.
Hieronder het voorbeeldje dat ik heb gemaakt.
Code:
procedure TForm1.Button1Click(Sender: TObject);
const
ASK_STATUS = '#27#5#6';
VAR
hport: Thandle;
NumberOfBytes: Cardinal;
Status_Result: Array[0..1] of Char;
CommTimeOuts: _CommTimeouts;
begin
hport := CreateFile(Pchar('LPT1'),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if hport = INVALID_HANDLE_VALUE
then Showmessage('Fout bij CreateFile');
CommTimeOuts.WriteTotalTimeoutMultiplier := 1000;
CommTimeOuts.WriteTotalTimeoutConstant := 5000;
CommTimeOuts.ReadIntervalTimeout := 0;
CommTimeOuts.ReadTotalTimeoutMultiplier := 10;
CommTimeOuts.ReadTotalTimeoutConstant := 1000;
if not SetCommTimeouts(hport,CommTimeOuts) then
begin
ShowMessage('Fout bij SetCommTimeouts. GetLastError = '+IntTOStr(GetLastError));
{GetLastError geeft hier de waarde 1 terug. Ik kan echter nergen vinden wat dat betekend}
end;
if Not WriteFile(hport,ASK_STATUS[1],3,NumberOfBytes,0)
then Showmessage('Fout bij WriteFILE');
if Not ReadFile(hport,Status_Result,2,NumberOfBytes,0)
then Showmessage('Fout bij ReadFile');
CloseHandle(hport);
end;
Alvast bedankt voor het meedenken.
Bookmarks