Fórum Como saber se a impressora esta ligada #252568
29/09/2004
0
Algum saberia me dizer porque lea não funciona o XP?
Desde já muito obrigado.
Function OnLine(Porta:Word):Boolean;
Const
Portas :Byte = $02;
Var
Res :Byte;
Begin
{ Código em Assembler }
Asm
mov ah,Portas; {Requisita o acesso as portas}
mov dx,Porta;{Define a porta de teste}
Int $17; {Chama a interrupção de Impressora}
mov Res,ah; {Guarda em Res o resultado da operação }
end;
Result := (Res and $80) = $80; {Testa o valor de saída}
End;
Debug
Curtir tópico
+ 0Posts
29/09/2004
Afarias
T+
Gostei + 0
29/09/2004
Dopi
Estive tentando fazer isso usando uma Thread e um Intervalo de TimeOut.
+ ou - assim...
procedure TForm1.Imprimir( Porta, Texto : String; Tempo : Integer ); Var TempoFinal : TDateTime ; IsTimeOut : Boolean ; TP : ThreadEnviaLPT ; begin TempoFinal := IncMilliSecond(now,Tempo) ; IsTimeOut := false ; TP := ThreadEnviaLPT.Create( Porta, Texto ) ; try while (not TP.Terminated) and (not IsTimeOut) do begin IsTimeOut := (now > TempoFinal) ; sleep(50) ; Application.ProcessMessages ; end ; finally TP.Terminate ; TP.Free ; if IsTimeOut then raise Exception.CreateFmt( ´Impressora em: ¬s nao está pronta´,[Edit2.Text]) ; end ; end;
A Thread:
type
ThreadEnviaLPT = class(TThread)
private
{ Private declarations }
fsTexto : String ;
fsPorta : String ;
protected
procedure Execute ; override;
public
constructor Create(Porta,Texto : String) ;
end;
implementation
constructor ThreadEnviaLPT.Create( Porta,Texto : String);
begin
inherited Create( false) ; { Rodar Imediatamente }
// FreeOnTerminate := true ;
fsPorta := Porta ;
fsTexto := Texto ;
end;
procedure ThreadEnviaLPT.Execute;
Var ArqPrn: TextFile;
begin
AssignFile( ArqPrn, fsPorta );
try
ReWrite( ArqPrn );
Write( ArqPrn, fsTexto ) ;
finally
System.CloseFile( ArqPrn ) ;
end ;
Terminate ;
end;
Uso:
Imprimir( ´LPT1´, #0, 100); { 100 milisegundos }
A ideia é: Se a Thread nao conseguir terminar antes do Timeout ocorrer, significa que a impressora nao conseguiu imprimir ( fora de linha )
Isso tb evita o congelamento do programa na linha: [b:f7e2fa1169]Write( ArqPrn, fsTexto ) ;[/b:f7e2fa1169] ou writeln, quando a impressora nao está pronta...
Gostei + 0
23/10/2004
Walbicudo
Caro colega [color=red:90cc5a5857]afarias [/color:90cc5a5857]teria como voce disponibilizar um exemplo de como checar a impressora pelo API do WINDOWSXP
Gostei + 0
25/10/2004
Khundalini
[]s
Rubem Rocha
Manaus, AM
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)