Obtener información de la cola de impresión....

26/11/2003 - 02:41 por Juvenal León | Informe spam
Saludos a todos,

Necesito obtener los datos de la cola de impresión de
Windows. Tengo el ejemplo que está en:

http://support.microsoft.com/defaul...cid=KB;en-
us;q196805

Sucede que no sé cómo obtener además dos datos muy
importantes para mi aplicción en estos momentos: si la
impresión ha sido a color o blanco y negro y el tamaño del
papel.

Parece que en esta función (en "Queue.C") se refrescan los
datos de la cola de impresión:

static BOOL NewJob(JOBDATA *pJob, JOB_INFO_2 *pJI)
{




/* pJob assumed uninitilazed */
ZeroMemory(pJob, sizeof(JOBDATA));


/* Copy the data we want */
pJob->JobId = pJI->JobId;

if (!ReplaceString(&pJob->pszDocument, pJI-

pDocument))


goto Fail;
if (!ReplaceString(&pJob->pszOwner, pJI-

pUserName))


goto Fail;
if (!ReplaceString(&pJob->pszStatus, pJI->pStatus))
goto Fail;

pJob->dwStatus = pJI->Status;
pJob->PagesPrinted = pJI->PagesPrinted;
pJob->TotalPages = pJI->TotalPages;
pJob->Size = pJI->Size;
pJob->Submitted = pJI->Submitted;
pJob->BytesPrinted = 0;

//Trato de accesar a la estrucutura donde
//se encuentran dichos datos (color y tamaño del papel):

LPDEVMODEA apDevMode;
int tam;

apDevMode=pJI->pDevMode;
tam=apDevMode->dmPaperSize;//<-error aquí!
//Unhandled exception in Printjob.exe 0xC0000005:Access
//Violation

/*cuando pongo un breakpoint en esta función, puedo
ver datos como:
+ pMachineName 0x007903ad "\\PC 03"
pero obtengo una dirección nula para:
+ pDevMode 0x00000000
por lo que no puedo accesar a los datos de la
estrucutura a la que apunta pDevMode
¿Cómo puedo accesar a dichos datos?

*/


/* Initialize the changed data to now chagnes */
memset(&pJob->Changed, (char)TRUE, sizeof(pJob-

Changed));



return TRUE;

/* Bail when failure occurs */
Fail:
FreeJob(pJob);

return FALSE;

} /* end of function NewJob */





Gracias de antemano.

Juvenal León
 

Leer las respuestas

#1 Rodrigo Corral González
26/11/2003 - 09:56 | Informe spam
Debes utilizar la función EnumJobs para enumerar los trabajos en cola, una
vez hecho esto con GetJob puedes obtener la información de cada trabajo en
concreto, a través de una estructura JOB_INFO_2 que tiene un miembro
LPDEVMODE pDevMode que contiene la información que necesitas en los campos
dmColor (DMCOLOR_COLOR o DMCOLOR_MONOCHROME ) y el tamaño de papel en
dmPaperSize.

Un saludo
Rodrigo Corral González

Preguntas similares