Array
(
)

Como testar se a impressora está ok?

Fabiano_aprendiz
   - 15 mar 2006

Prezados colegas,

Como fazer p/saber se a impressora está ok(ligada ou desligada, ou se a impressora estiver na rede e a máquina estiver fora, etc) antes de mandar imprimir? Tive pesquisando na net e achei apenas a seguinte função:

function PrinterOnLine : Boolean;
Const
PrnStInt : Byte = $17;
StRq : Byte = $02;
PrnNum : Word = 0; {0 para LPT1, 1 para LPT2, etc}
Var
nResult : byte;
Begin
Asm
mov ah,StRq;
mov dx,PrnNum;
Int $17;
mov nResult,ah;
End;
PrinterOnLine :=(nResult and $80)= $80;
End;

Só q com o seguinte alerta :´ Não funciona em Windows NT, 2000 ou XP (infelizmente).´
Uso o XP e realmente não funciona, alguém saberia dizer porq e tbm tem alguma outra dica ou solução?
Desde já agradeço.

Fabiano.


Adalberto
   - 28 mar 2006

Tente o código abaixo... Infelizmente também não trabalha sob o NT e eu também não cheguei a testá-lo...


Autor: Colombo Gianluca
Homepage: http://www.digitstudios.com


function TestPrinterStatus(LPTPort: Word): Byte;
var
Status: byte;
CheckLPT: word;
begin
Status := 0;
if (LPTPort >= 1) and (LPTPort <= 3) then
begin
CheckLPT := LPTPort - 1;
asm
mov dx, CheckLPT;
mov al, 0;
mov ah, 2;
int 17h;
mov &Status, ah;
end;
end;
Result := Status;
end;


{
Pass in the LPT port number you want to check & get the following back:
01h - Timeout
08h - I/O Error
10h - Printer selected
20h - Out of paper
40h - Printer acknowledgement
80h - Printer not busy (0 if busy)

Note:
This function doesn´t work under NT, it gives an access violation
from the DOS interrupt call.
}

Boa sorte...