질문하기질문하기
 

답변됨XPS Sample Driver question

  • 2009년 6월 26일 금요일 오후 8:47rjenovai 사용자 메달사용자 메달사용자 메달사용자 메달사용자 메달
     
    Hi,

    I am trying to modify xpsdrvsmpl to call another program shortly after the document
    starts to "print". Where would be the best place to place the CreateProcess or ShellExecute
    call so that it only executes once? Thanks

    Randy

답변

  • 2009년 7월 2일 목요일 오전 8:24digitalmercenary 사용자 메달사용자 메달사용자 메달사용자 메달사용자 메달
     답변됨
    Hi!

    You can to this in the User Interface DLL. see http://msdn.microsoft.com/en-us/library/bb734121.aspx with the DOCUMENTEVENT_STARTDOC event.

    • 답변으로 표시됨rjenovai 2009년 10월 22일 목요일 오후 6:01
    •  
  • 2009년 10월 22일 목요일 오후 6:00rjenovai 사용자 메달사용자 메달사용자 메달사용자 메달사용자 메달
     답변됨코드 있음
    I got it to work after adding the following to DOCUMENTEVENT_QUERYFILTER:

    if (pvOut)
                {
                    DOCEVENT_FILTER* pFilter = (DOCEVENT_FILTER*)pvOut;
                    pFilter->cElementsReturned = 6;
                    pFilter->aDocEventCall[0] = DOCUMENTEVENT_ENDDOCPOST;
                    pFilter->aDocEventCall[1] = DOCUMENTEVENT_STARTDOC;
                    pFilter->aDocEventCall[2] = DOCUMENTEVENT_ENDDOC;
                    pFilter->aDocEventCall[3] = DOCUMENTEVENT_STARTPAGE;
                    pFilter->aDocEventCall[4] = DOCUMENTEVENT_ENDPAGE;
                    pFilter->aDocEventCall[5] = DOCUMENTEVENT_XPS_ADDFIXEDDOCUMENTSEQUENCEPOST;
                    *piResult = DOCUMENTEVENT_SUCCESS;
                    ret = DOCUMENTEVENT_SUCCESS;
                   
                }
                else
                {
                    *piResult = DOCUMENTEVENT_UNSUPPORTED;
                    ret = E_NOTIMPL;
                }
    
    I also made sure that piResult was not set as an unreferenced parameter

    Once these were added, the STARTDOC, ENDDOC, etc.. events were fired in windows x64.
    • 답변으로 표시됨rjenovai 2009년 10월 22일 목요일 오후 6:01
    •  

모든 응답

  • 2009년 7월 2일 목요일 오전 8:24digitalmercenary 사용자 메달사용자 메달사용자 메달사용자 메달사용자 메달
     답변됨
    Hi!

    You can to this in the User Interface DLL. see http://msdn.microsoft.com/en-us/library/bb734121.aspx with the DOCUMENTEVENT_STARTDOC event.

    • 답변으로 표시됨rjenovai 2009년 10월 22일 목요일 오후 6:01
    •  
  • 2009년 10월 20일 화요일 오후 7:29rjenovai 사용자 메달사용자 메달사용자 메달사용자 메달사용자 메달
     
    This worked well until I tried to move my driver to 64-bit vista and windows 7. It appears that the STARTDOC and ENDDOC events
    are not being called. Is this true and if so what can I do to workaround? Thanks

    Randy
  • 2009년 10월 22일 목요일 오후 6:00rjenovai 사용자 메달사용자 메달사용자 메달사용자 메달사용자 메달
     답변됨코드 있음
    I got it to work after adding the following to DOCUMENTEVENT_QUERYFILTER:

    if (pvOut)
                {
                    DOCEVENT_FILTER* pFilter = (DOCEVENT_FILTER*)pvOut;
                    pFilter->cElementsReturned = 6;
                    pFilter->aDocEventCall[0] = DOCUMENTEVENT_ENDDOCPOST;
                    pFilter->aDocEventCall[1] = DOCUMENTEVENT_STARTDOC;
                    pFilter->aDocEventCall[2] = DOCUMENTEVENT_ENDDOC;
                    pFilter->aDocEventCall[3] = DOCUMENTEVENT_STARTPAGE;
                    pFilter->aDocEventCall[4] = DOCUMENTEVENT_ENDPAGE;
                    pFilter->aDocEventCall[5] = DOCUMENTEVENT_XPS_ADDFIXEDDOCUMENTSEQUENCEPOST;
                    *piResult = DOCUMENTEVENT_SUCCESS;
                    ret = DOCUMENTEVENT_SUCCESS;
                   
                }
                else
                {
                    *piResult = DOCUMENTEVENT_UNSUPPORTED;
                    ret = E_NOTIMPL;
                }
    
    I also made sure that piResult was not set as an unreferenced parameter

    Once these were added, the STARTDOC, ENDDOC, etc.. events were fired in windows x64.
    • 답변으로 표시됨rjenovai 2009년 10월 22일 목요일 오후 6:01
    •