Hi,
I'm writing a printer driver for windows. I need to hook to Document Events. To my understanding, i have to implement the function DrvDocumentEvent() in my Printer Interface DLL. However, I only get iEsc values 1 and 14 invoked.
Here's the code I'm using...
rc = DOCUMENTEVENT_SUCCESS;
switch(iEsc)
{
case DOCUMENTEVENT_CREATEDCPRE:
{
LOG("DrvDocumentEvent(DOCUMENTEVENT_CREATEDCPRE)") ;
}
break;
case DOCUMENTEVENT_STARTDOCPRE:
{
LOG("DrvDocumentEvent(DOCUMENTEVENT_STARTDOCPRE)") ;
//... Some processing
}
break;
case DOCUMENTEVENT_ENDPAGE:
{
LOG("DrvDocumentEvent(DOCUMENTEVENT_ENDPAGE)");
//... Some processing
}
break;
case DOCUMENTEVENT_DELETEDC:
{
LOG("DrvDocumentEvent(DOCUMENTEVENT_DELETEDC)");
}
break;
case DOCUMENTEVENT_CREATEDCPOST:
LOG("DrvDocumentEvent(DOCUMENTEVENT_CREATEDCPOST)" );
break;
case DOCUMENTEVENT_RESETDCPRE:
LOG("DrvDocumentEvent(DOCUMENTEVENT_RESETDCPRE)");
break;
case DOCUMENTEVENT_RESETDCPOST:
LOG("DrvDocumentEvent(DOCUMENTEVENT_RESETDCPOST)") ;
break;
case DOCUMENTEVENT_STARTDOCPOST:
LOG("DrvDocumentEvent(DOCUMENTEVENT_STARTDOCPOST)" );
break;
case DOCUMENTEVENT_STARTPAGE:
LOG("DrvDocumentEvent(DOCUMENTEVENT_STARTPAGE)");
break;
case DOCUMENTEVENT_ENDDOCPRE:
LOG("DrvDocumentEvent(DOCUMENTEVENT_ENDDOCPRE)");
break;
case DOCUMENTEVENT_ENDDOCPOST:
LOG("DrvDocumentEvent(DOCUMENTEVENT_ENDDOCPOST)");
break;
case DOCUMENTEVENT_ABORTDOC:
LOG("DrvDocumentEvent(DOCUMENTEVENT_ABORTDOC)");
break;
case DOCUMENTEVENT_ESCAPE:
LOG("DrvDocumentEvent(DOCUMENTEVENT_ESCAPE)");
break;
case DOCUMENTEVENT_QUERYFILTER:
{
LOG("DrvDocumentEvent(DOCUMENTEVENT_QUERYFILTER)") ;
DOCEVENT_FILTER *doc_events = (DOCEVENT_FILTER*) pbOut;
if (doc_events)
{
doc_events->aDocEventCall[0] = DOCUMENTEVENT_CREATEDCPRE;
doc_events->aDocEventCall[1] = DOCUMENTEVENT_CREATEDCPOST;
doc_events->aDocEventCall[2] = DOCUMENTEVENT_RESETDCPRE;
doc_events->aDocEventCall[3] = DOCUMENTEVENT_RESETDCPOST;
doc_events->aDocEventCall[4] = DOCUMENTEVENT_STARTDOCPRE;
doc_events->aDocEventCall[5] = DOCUMENTEVENT_STARTPAGE;
doc_events->aDocEventCall[6] = DOCUMENTEVENT_ENDPAGE;
doc_events->aDocEventCall[7] = DOCUMENTEVENT_ENDDOCPRE;
doc_events->aDocEventCall[8] = DOCUMENTEVENT_ABORTDOC;
doc_events->aDocEventCall[9] = DOCUMENTEVENT_DELETEDC;
doc_events->aDocEventCall[10] = DOCUMENTEVENT_ESCAPE;
doc_events->aDocEventCall[11] = DOCUMENTEVENT_ENDDOCPOST;
doc_events->aDocEventCall[12] = DOCUMENTEVENT_STARTDOCPOST;
/*doc_events->cElementsNeeded = _Num_of_doc_events;*/
doc_events->cElementsReturned = _Num_of_doc_events;
dump(doc_events);
}
rc = DOCUMENTEVENT_SUCCESS;
}
break;
default:
{
LOG("DrvDocumentEvent(%d)", iEsc);
rc = DOCUMENTEVENT_UNSUPPORTED;
}
break;
}
return rc;
Hope you can help.
|