質問する質問する
 

回答済みXPS Sample Driver question

  • 2009年6月26日 20: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日 18:01
    •  
  • 2009年10月22日 18: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日 18: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日 18:01
    •  
  • 2009年10月20日 19: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日 18: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日 18:01
    •