Ver Mensaje Individual
  #1  
Antiguo 10-11-2004
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Reputación: 22
acertij022 Va por buen camino
Post monitoriar impresiones

hola delphiano necesito ayuda por favor ya que no consigo información para monitoriar la impresora osea saber cuantas impresiones ya se realizaron si fueron en color o blanco y negro de que maquina fue, etc; lo único que he encontrado fue lo siguiente:
Código Delphi [-]
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,Printers,WinSpool;
.....
function GetCurrentPrinterHandle: THandle;
var
  Device, Driver, Port: array[0..255] of Char;
  hDeviceMode: THandle;
begin
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if not OpenPrinter(@Device, Result, nil) then
    RaiseLastWin32Error;
end;

function SavePChar(p: PChar): PChar;
const
  error: PChar = 'Nil';
begin
  if not Assigned(p) then
    Result := error
  else
    Result := p;
end;

procedure TForm1.Button1Click(Sender: TObject);
type
  TJobs = array [0..1000] of JOB_INFO_1;
  PJobs = ^TJobs;
var
  hPrinter: THandle;
  bytesNeeded, numJobs, i: Cardinal;
  pJ: PJobs;
begin
  hPrinter := GetCurrentPrinterHandle;
  try
    EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded,
      numJobs);
    pJ := AllocMem(bytesNeeded);
    if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded,
      bytesNeeded, numJobs) then
      RaiseLastWin32Error;

    memo1.Clear;
    if numJobs = 0 then
      memo1.Lines.Add('No hay trabajos en la cola')
    else
      for i := 0 to Pred(numJobs) do
        memo1.Lines.Add(Format('Printer %s, Job %s, Status (%d): %s',
          [SavePChar(pJ^[i].pPrinterName), SavePChar(pJ^[i].pDocument),
          pJ^[i].Status, SavePChar(pJ^[i].pStatus)]));
  finally
    ClosePrinter(hPrinter);
  end;
end;
//###############################################################################
//Problemas a resolver:
//1)No contabliza las paginas realmente impresas
//2)Solo muestra la cantidad de hojas del documento
//3)No las multiplica por la cantidad de copias pedida
//4)Si imprimo de una pc, en la impresora de otra pc, ni siquiera aparece la cantidad de copias del documento
//5)_JOB_INFO_1 _JOB_INFO_2:
//  a)PagesPrinted  solo da el % impreso del documento. Aparece 12..96, porque el valor
//    lo toma el timer, asi que no llega a tomar 99 y 100%
//  b)El chequeo de pStatus,Status]=['',0],[JOB_STATUS_PRINTING,?] porque tambien depende del timer
//6)Se busco en otras API,STRUCT,internet la informacion que se necesita y no se la encontro
//###############################################################################
Espero alguna respuesta con ansia como dato uso Delphi6 Enterprise con windows 2000
Responder Con Cita