PDA

Ver la Versión Completa : monitoriar impresiones


acertij022
10-11-2004, 16:14:07
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:

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 :confused:

acertij022
18-11-2004, 13:23:16
Mil disculpa solo genere este hilo para que aparezca de nuevo en los primeros, esque estoy un poco desesperado. :confused: