Necesito inspeccionar la cola de imprecion de win2000, estoy intentando
sacar la info del jobs 1, pero falla GetJob() (no logro recuperar la ectructura jobsInfo2)
ok:= GetJob(MangoPrinter,1,2,jobsInfo2,1000,@jobsInfo2Size); //retorna jobsInfo2Size=0
Esto es mi primer uso de APIs, y la verdad es que todaba no se que es
cada cosa.
La primer parte (sin GetJob) del codigo la saque de TrucoMania,
OpenPrinter devolvio un handle corecto, GetPrinter() retorna en PrinterInfo2
informacion corecta, el problema esta en getJobs().
NOTA:al momento de correr el codigo tengo 3 archivos en cola.
Necesito que me digan que esta mal, porque la 1da llamada de getJobs()
retorna jobsInfo2Size=0 haciendo inaccecible la estructura jobsInfo2.
Código:
/---Codigo --------
jobsInfo2 :^TJobInfo2; //Nota: Probe con ^TJobInfo1[AW], ^TJobInfo2[AW]
jobsInfo2Size :DWORD;
MangoPrinter : THandle;
GetMem(PrinterInfo2, 1000);
Ok := GetPrinter(Integer(MangoPrinter), 2, PrinterInfo2, 1000, @Ocupa);
if not Ok then
if (Ocupa > 1000) then
begin
FreeMem(PrinterInfo2);
GetMem(PrinterInfo2, Ocupa);
GetPrinter(MangoPrinter, 2, PrinterInfo2, Ocupa,@Ocupa);
//nota: PrinterInfo2 tiene datos correctos, por lo tanto el MangoPrinter esta correto
GetMem(jobsInfo2,1000);
//GetJob(hPrinter,JobId,Level,pJob, DWORD cbBuf, pcbNeeded)
ok:= GetJob(MangoPrinter,1,2,jobsInfo2,1000,@--+//ret jobsInfo2Size=0
if (not ok) then
begin
FreeMem(jobsInfo2);
GetMem(jobsInfo2,jobsInfo2Size);
GetJob(MangoPrinter,1,2,jobsInfo2,jobsInfo2Size,@jobsInfo2Size);
end;
// y Obiamente falla aqui.
ShowMessage('POS:' + intToSTR(jobsInfo2^.Position) );
\---Codigo --------
/--Prototipe Jobs:
The GetJob function retrieves print-job data for the specified printer.
BOOL GetJob(
HANDLE hPrinter, // handle of printer
DWORD JobId, // job identifier value
DWORD Level, // data-structure level
LPBYTE pJob, // address of data-structure array
DWORD cbBuf, // count of bytes in array
LPDWORD pcbNeeded // address of value that contains count of bytes retrieved (or required)
);
\--Prototipe Jobs: