2016-07-08 57 views
1

私の目標は、新しいページを印刷することが可能であることを定義できる機能をドライバに実装することです。このコードは、現在のページを印刷するのに十分な用紙があるかどうかをプリンタに尋ね、そうでなければ「用紙切れ」ステータスを設定する必要があります(HPプリンタの場合のように)。印刷ジョブの「用紙の状態」をドライバから設定する(プログラムで)

私はDDIフック(スタートページ用)を使用しています。私はここでやったことです:

 LPJOB_INFO_1 pJobInfo = NULL; 
    GetJob(hPrinter, pOemPDEV->JobId, 1, NULL, 0, &dwNeeded); 

    if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) 
     return FALSE; 

    pJobInfo = (LPJOB_INFO_1) AllocSplMem(dwNeeded); 

    if (!pJobInfo) 
     return FALSE; 

    BOOL getJobRes = GetJob(hPrinter, pOemPDEV->JobId, 1, (LPBYTE)pJobInfo, dwNeeded, &dwNeeded); 
    if (!getJobRes) 
     return FALSE; 

    wsprintf(string, L"pJobInfo->Status %d", pJobInfo->Status); 
    VERBOSE(string); 

    pJobInfo->Status |= JOB_STATUS_PAPEROUT;  

    BOOL a = SetJob(hPrinter, pOemPDEV->JobId, 1, (LPBYTE)pJobInfo, JOB_CONTROL_PAUSE); 

結果では、私がしている:しかしうち、 "一時停止" に変更FALSEとエラーを返しSetJob

  • は5(アクセスが拒否されました)

  • ステータスです-of-ペーパー表示されませんでした: enter image description here

質問JOB_STATUS_PAPEROUTを設定する方法です。前もって感謝します。

答えて

2

遅れてごめんなさい。私はというタグに従います。とにかく、今月前に解決したかもしれませんが、PositionをJOB_POSITION_UNSPECIFIEDに設定しないと、アクセスが拒否されることがあります。

関連する問題