Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

azeredo

Interceptar impressão

Recommended Posts

Pessaol.. gostaria de saber se pelo delphi tem como eu interceptar o comando de impressão.

 

Tipo.. quando eu mandar imprimir alguma coisa.. antes dessa informação chegar a impressora, como faço para pegar as informaçoes deste comando?

 

Algum ideia de como fazer isso via delphi, vb ou c++?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

 

Interceptar impressão, bom, vou adiantando que isto é bastante complicado, envolve muitos processo minuciosos de controles do windows, detalhes em que você precisa saber dominar muito bem o Delphi e conhecer todos os processos envolvidos no Windows... APIs, entre outros.

 

Bom, eu iniciei um projeto destes, não consegui acabar, contabilizava impressões quando vinham separadamente ao servidor, mas há alguns sistemas que enviam 5, 8 jobs em um único instante, não dava outro, o sistema travava.

 

O que eu usei foram as uses Printers e WinSpool

Eu consegui um documento, no site da codegear (PBPrintersMonitorU), na verdade é um exemplo, uma unit de exemplo que tem vários processos que capturam as informações de spooler do Windows e também interceptam elas, como é o exemplo desta função, que deixa um job com status pausado:

procedure JOBPrint.PausarImpressao(sPrinterName : String; IdJob : Integer);
var
  lRet : LongBool;
  mhPrinter : THandle;
  paAll : PRINTER_DEFAULTS;
begin
  paAll.DesiredAccess := PRINTER_ALL_ACCESS;
  OpenPrinter(PChar(sPrinterName), mhPrinter, nil);
  If mhPrinter <> 0 Then
  lRet := SetJob(mhPrinter, idJob, 0, nil, JOB_CONTROL_PAUSE);
  ClosePrinter(mhPrinter)
end;

Esta procedure recebe o nome da impressora na qual o Job foi enviado e o ID do mesmo, deixando-o pausado. Isto eu usava quando um novo documento caia na fila de impressão, mantia-o em pausa até finalizar o spool, capturava as informações dele como numero de páginas, nome do documento, usuário, estação de origem, entre outros, e após isso, libero a impressão (JOB_CONTROL_RESUME).

 

Bom, espero que isso consilha lhe ajudar alguma coisa

 

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.