Como saber se a impressora esta ligada
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
Posts
29/09/2004
Afarias
T+
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...
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
25/10/2004
Khundalini
[]s
Rubem Rocha
Manaus, AM
Clique aqui para fazer login e interagir na Comunidade :)