Teď jste offline a čekáte, až se znova připojí internet.

Jak získat stav tiskárny a tiskové úlohy

DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.

Projděte si také anglickou verzi článku: 160129
Souhrn
Stav tiskárny a tiskové úlohy jsou aktualizovány pomocí Win32 Spoolerduring despool tiskové úlohy. Ve všech ostatních případech, kdy despooling isnot tiskárny a sestavy žádné informace o stavu tiskárny je consideredto být připraven a nečinné.
Další informace
Podle rozhraní API systému Win32 "tiskárna" se skládá ovladač_tiskárny, vstupní a výstupní cestu k fyzické tiskárny a tiskové fronty.Operační systém zpracovává fyzické tiskárny pouze určení správcem tisku generovány a předán prostřednictvím systému "Tiskárna", podle toin zbytku tohoto článku jako tiskárna.

Nejviditelnější součástí tiskárny je tisková fronta. Je spravována thePrint správce nebo složky tiskárny v userinterfaces stylu systému Windows 95. Ovladač tiskárny je rozhraní pro tiskárnu, která je usedby aplikace pro vytvoření tiskové úlohy prostřednictvím tiskárny DCs. Vstupně-výstupní cestu k aPrinter se skládá z několika vrstev vyvrcholily portmonitor kódu systému.

Sledování portu rozhraní fyzické tiskárně na konci proudu systému tiskárny a je odpovědný za přenos dataof tiskové úlohy prostřednictvím jakéhokoli připojení existuje fyzické tiskárny.U tiskárny obousměrný port monitor by beresponsible pro přenos dat a fyzické tiskárny. Thisconnection a fyzická tiskárna, jsou, pokud dojde k chybám. Je jobof program pro sledování portu na zprávy o těchto chybách.

Zařazovací služba není dotazování na stav fyzické tiskárny, ke kterému je připojen aPrinter. Stav úspěch determinesthe fyzické tiskárny tiskové úlohy v době je to despooled přes portmonitor. Pokud v tomto procesu dojde k některé chyby, chyby je vykazován theport monitor zaznamenat informace o stavu tiskové úlohy Zařazování tisku, naopak šíří informace o chybě přiměřené do tiskové fronty.

V důsledku toho systém tiskárny hlásí žádný stav po isempty fronty tiskárny. V tomto stavu se předpokládá tiskárna přijímá tiskové úlohy.Toto je platný předpokladů, i když fyzické tiskárny v errorstate, jako offline. Operační systém považuje za toaccept připraven tiskárny tiskové úlohy i když z nějakého důvodu nemůže dokončit dodávku fyzické tiskárny. Taková okolnost je považován za stavu chyby v operačním systému, který musí být adresována uživatelem. Notconsidered je chyba událostí podléhajících k aplikaci, která je povolena tocomplete zařazování tiskové úlohy úspěšně.

Určení státu fyzické tiskárny

Existuje jedno základní edice, musí být splněny k určení fyzické tiskárny stateof: zařazovací služba musí být pokusu o odeslání tiskové jobto fyzické tiskárny. Toto je pouze čas, sledování stavu tiskárny isreported prostřednictvím portu. Navíc smysluplných informationmay vykázat v členy stavu JOB_INFO struktury pro danou konkrétní tiskovou úlohu, protože některé sledování portu bude mít tyto hodnoty nastavit přímo.

JOB_INFO struktury obsahovat Stav člen a člen pStatus . Obě obsahují informace o stavu tiskové úlohy ohlášený program pro sledování portu. Tyto dva členy se liší v tom, že Stav členů je bitové pole států, který obsahuje předdefinované hodnoty, zatímco členské pStatus je ukazatel na řetězec, který může obsahovat jakoukoli. Tyto hodnoty jsou popsány v sadě Win32 SDK a hlavičkový soubor WinSpool.h. Členské pStatus někdy, ale ne vždy nastavena na stav popisný řetězec. Obsah tohoto řetězce jsou definovány jednotlivé sledování portu.

JOB_INFO struktury, které jsou vráceny pomocí dvou funkcí rozhraní API: GetJob a EnumJobs. EnumJobs vrátí matici struktury JOB_INFO bez nutnosti, volající konkrétní úlohy v tiskové frontě. Tiskové úlohy, která je právě despooling (tisk) obsahuje informace o stavu. Této úlohy naleznete v poli vyhledejte pole struktur JOB_INFO vyhledejte tiskové úlohy, jejichž stav člen má nastavit JOB_STATUS_PRINTING bit.

Jednodušší metoda určení stavu tiskárny je prozkoumat Statusmember struktury PRINTER_INFO . Tato struktura je vrácené funkcí GetPrinter . V tom, že neexistuje žádný člen řetězce pStatus struktury PRINTER_INFO může poskytovat podrobné a rozsáhlé informace stát je nevýhodou tohoto přístupu. Existuje však výhodu v tom, že některé tiskárny rozsáhlejší sledování portu stanovit stav bitů struktury PRINTER_INFO . Uvědomte si však, že výchozí program pro sledování portu pro systém Windows nenastaví obvykle více než PRINTER_STATUS_ERROR bit členský stav tiskárny.

Všimněte si, že stav členů obou sad struktury mohou obsahovat stateinformation, který naprosto nesouvisí s tiskárnou. Forexample, členský stav PRINTER_INFO struktur může být nastavena s PRINTER_STATUS_PAUSED nebo PRINTER_STATUS_PENDING_DELETION, které jsou nezbytně důležité pro tisková fronta. Také stav člen JOB_INFO struktury mohou obsahovat hodnoty stavu JOB_STATUS_PAUSED nebo JOB_STATUS_DELETING, které jsou relevantní pouze pro tento konkrétní tiskovou úlohu. Všimněte si také, že tiskové úlohy může po zůstane stavu JOB_STATUS_PRINTEDa despooled mají shromažďovat v tiskové fronty.

Každá z těchto funkcí vyžaduje popisovač k identifikaci tiskárny thedesired tiskárny. Tento popisovač je získán z funkce OpenPrinter , který přijímá řetězec obsahující název tiskárny. Tento název může být místní název tiskárny nebo sdílení UNC název síťové tiskárny.

Následující ukázkový kód demonstruje, jak pro volání funkce EnumJobs správně k načtení JOB_INFO struktur a jak volat funkci GetPrinter načíst PRINTER_INFO struktur:

Ukázkový kód

   BOOL GetJobs(HANDLE hPrinter,        /* Handle to the printer. */                 JOB_INFO_2 **ppJobInfo, /* Pointer to be filled.  */                 int *pcJobs,            /* Count of jobs filled.  */                 DWORD *pStatus)         /* Print Queue status.    */    {   DWORD               cByteNeeded,                        nReturned,                        cByteUsed;    JOB_INFO_2          *pJobStorage = NULL;    PRINTER_INFO_2       *pPrinterInfo = NULL;   /* Get the buffer size needed. */        if (!GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded))       {           if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)               return FALSE;       }       pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded);       if (!(pPrinterInfo))           /* Failure to allocate memory. */            return FALSE;       /* Get the printer information. */        if (!GetPrinter(hPrinter,               2,               (LPSTR)pPrinterInfo,               cByteNeeded,               &cByteUsed))       {           /* Failure to access the printer. */            free(pPrinterInfo);           pPrinterInfo = NULL;           return FALSE;       }       /* Get job storage space. */        if (!EnumJobs(hPrinter,               0,               pPrinterInfo->cJobs,               2,               NULL,               0,               (LPDWORD)&cByteNeeded,               (LPDWORD)&nReturned))       {           if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)           {               free(pPrinterInfo);               pPrinterInfo = NULL;               return FALSE;           }       }       pJobStorage = (JOB_INFO_2 *)malloc(cByteNeeded);       if (!pJobStorage)       {           /* Failure to allocate Job storage space. */            free(pPrinterInfo);           pPrinterInfo = NULL;           return FALSE;       }       ZeroMemory(pJobStorage, cByteNeeded);       /* Get the list of jobs. */        if (!EnumJobs(hPrinter,               0,               pPrinterInfo->cJobs,               2,               (LPBYTE)pJobStorage,               cByteNeeded,               (LPDWORD)&cByteUsed,               (LPDWORD)&nReturned))       {           free(pPrinterInfo);           free(pJobStorage);           pJobStorage = NULL;           pPrinterInfo = NULL;           return FALSE;       }       /*        *  Return the information.        */        *pcJobs = nReturned;       *pStatus = pPrinterInfo->Status;       *ppJobInfo = pJobStorage;       free(pPrinterInfo);       return TRUE;   }   BOOL IsPrinterError(HANDLE hPrinter)   {       JOB_INFO_2  *pJobs;       int         cJobs,                   i;       DWORD       dwPrinterStatus;       /*        *  Get the state information for the Printer Queue and        *  the jobs in the Printer Queue.        */        if (!GetJobs(hPrinter, &pJobs, &cJobs, &dwPrinterStatus))			return FALSE;       /*        *  If the Printer reports an error, believe it.        */        if (dwPrinterStatus &           (PRINTER_STATUS_ERROR |           PRINTER_STATUS_PAPER_JAM |           PRINTER_STATUS_PAPER_OUT |           PRINTER_STATUS_PAPER_PROBLEM |           PRINTER_STATUS_OUTPUT_BIN_FULL |           PRINTER_STATUS_NOT_AVAILABLE |           PRINTER_STATUS_NO_TONER |           PRINTER_STATUS_OUT_OF_MEMORY |           PRINTER_STATUS_OFFLINE |           PRINTER_STATUS_DOOR_OPEN))       {           free( pJobs );           return TRUE;       }       /*        *  Find the Job in the Queue that is printing.        */        for (i=0; i < cJobs; i++)       {           if (pJobs[i].Status & JOB_STATUS_PRINTING)           {               /*                *  If the job is in an error state,                *  report an error for the printer.                *  Code could be inserted here to                *  attempt an interpretation of the                *  pStatus member as well.                */                if (pJobs[i].Status &                   (JOB_STATUS_ERROR |                   JOB_STATUS_OFFLINE |                   JOB_STATUS_PAPEROUT |                   JOB_STATUS_BLOCKED_DEVQ))               {                   free( pJobs );                   return TRUE;               }           }       }       /*        *  No error condition.        */        free( pJobs );       return FALSE;   }				
Poznámka: je-li fondy tiskáren v systému Windows NT, může existovat více než jeden despooling tiskovou úlohu z tiskové fronty, který předloží zprávu stavu. Tento ukázkový kód nebere v úvahu tuto okolnost.
Odkazy
Další informace o obecných ustanoveních o volání funkcí Win32 zařazování klepněte na následující číslo článku databáze Microsoft Knowledge Base:
158828 Jak výčet zařazování Wind32 volání rozhraní API správně
GdiSpool

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 160129 - Poslední kontrola: 03/14/2015 05:26:00 - Revize: 7.0

Microsoft Win32 Application Programming Interface

  • kbFAQ kbhowto kbmt KB160129 KbMtcs
Váš názor
dy> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" ens track by $index" class="col-sm-6 col-xs-24 ng-scope"> Venezuela - Español
>mp;t=">/body>did=1&t="> mp;t=">>dy> "//c.microsoft.com/ms.js'><\/script>"); &t=">