Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

Ako získať štatút tlačiareň a tlačovú úlohu

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:160129
SUHRN
Stav tlačiarne a tlačové úlohy aktualizujú zaraďovacia služba Win32počas despool tlačovú úlohu. Vo všetkých ostatných časy, keď tlačiareň jenie despooling a správy sa považuje za žiadne informácie o stave, tlačiareňbyť pripravený nečinný.
DALSIE INFORMACIE
Ako je uvedené rozhranie API systému Win32, "tlačiareň" sa skladá z tlačiarneovládač, Front tlače a vstupno-výstupný cestu k fyzickej tlačiarni.Operačný systém spracuje fyzická tlačiareň ako iba určeniatlačovú úlohu generované a prešla systému "Tlačiareň," uvedenéhovo zvyšku tohto článku ako tlačiareň.

Najviac Viditeľná časť tlačiareň je frontu tlače. Riadi juTlač Manager alebo tlačiareň priečinkov vo Windows 95-štýl užívateľovrozhrania. Ovládač tlačiarne je rozhranie pre tlačiareň, ktorá používažiadosti o vytvorenie tlačové úlohy prostredníctvom tlačiareň DCs. I / cesta preTlačiareň pozostáva z viacerých vrstiev kód systému vyvrcholili prístavumonitorovať.

Monitor portov je rozhrania fyzickej tlačiarni v down-prúd konca systému tlačiarne a je zodpovedná za prenos údajovtlačovú úlohu cez akékoľvek spojenie existuje fyzickej tlačiarni.V prípade obojsmerné tlačiarne, monitor portu by byťzodpovedný za prenos údajov do a z fyzickej tlačiarni. Totopripojenie a fyzickej tlačiarni, sú tam, kde sa vyskytujú chyby. To je úlohaport monitor správy týchto chýb.

Zaraďovač tlače pre štát fyzická tlačiareň na ktoré dotazyTlačiareň pripojená. Namiesto toho štátu fyzickej tlačiarni určujeúspech tlačovú úlohu v čase, je odvinuté cez portmonitorovať. Ak niektoré chyba vyskytuje v tomto procese, chyba je hlásenáport monitor a zaznamenané informácie o stave tlačovej úlohy. Zaraďovač,Naopak, propaguje primeranej chyba informácie do frontu tlačiarne.

V dôsledku toho systém tlačiareň správy žiadny štatút, keď je front tlačeprázdne. V tomto stave sa predpokladá tlačiareň pripravená akceptovať tlačové úlohy.Toto je platný predpoklad, aj keď fyzická tlačiareň je v chybaštátu, ako je off-line. Operačný systém považuje tlačiareň pripravenáakceptovať tlačové úlohy, dokonca aj vtedy, ak z nejakého dôvodu nemôže dokončiť dodávkyfyzická tlačiareň. Táto okolnosť sa považuje za chybu štátu voperačný systém, ktoré je potrebné riešiť užívateľ. Nie jeza chybu vykazovaniu na aplikáciu, ktorá je povolenéúspešne zavŕšiť zaraďuje tlačová úloha.

Určenie štátu fyzickej tlačiarni

Existuje jeden základný predpoklad, že musia byť splnené na určenie štátufyzické tlačiarne: zaraďovacia služba musí Pokúšam sa odoslať tlačovú úlohufyzickej tlačiarni. Je to len čas je stav tlačiarnehlásené monitor portu. Okrem toho najvýznamnejšie informáciemôžu byť vykazované v štatút členov JOB_INFO štruktúra pre tento konkrétny tlačovú úlohu, pretože niektoré port monitor bude mať priamo tieto hodnoty nastavené.

V JOB_INFO štruktúry obsahovať Stav Členské a pStatus člen. Obaja členovia obsahovať stavové informácie tlačovú úlohu hlásené monitor portu. Týchto dvoch členov líšia v tomto Stav člen je bitové pole štátov, ktoré obsahuje vopred určené hodnoty, zatiaľ čo pStatus člen je smerník na reťazec, ktorý môže obsahovať čokoľvek. Tieto hodnoty sú zdokumentované Win32 SDK a hlavička súboru WinSpool.h. V pStatus člen niekedy, ale nie vždy nastavená na popisné Stavový reťazec. Obsah tohto reťazca sú definované každý monitor portu.

JOB_INFO štruktúry sú odoslal dva API funkcie: GetJob a EnumJobs. EnumJobs Vracia pole JOB_INFO štruktúry bez požadovania, že volajúci odkaz najmä prácu v front tlačiarne. Tlačovú úlohu, ktorá je v súčasnosti despooling (tlač) obsahuje informácie o stave. Nájsť túto prácu v poli Hľadať pole JOB_INFO nastavený bit štruktúr vyhľadajte tlačovej úlohy, ktorých stav člen má JOB_STATUS_PRINTING.

Jednoduchšie metódy stanovenia stav tlačiarne je skúmať stavčlen PRINTER_INFO štruktúra. Táto štruktúra vráti GetPrinter Funkcia. Existuje nevýhodou tohto prístupu, že neexistuje žiadne pStatus reťazec člena v PRINTER_INFO štruktúra, ktorá môže poskytnúť podrobné alebo rozsiahle informácie štátu. Existuje však výhodu v tom, že port monitor môže stanoviť niektoré rozsiahlejšie tlačiarne stav bitov PRINTER_INFO štruktúra. Všimnite si, že predvolený port monitor pre systém Windows zvyčajne nenastaví viac ako PRINTER_STATUS_ERROR bitové tlačiarne štatút člena.

Všimnite si, že štatút členov buď súbor stavieb môže obsahovať štátuinformácie, ktoré nie je nevyhnutne spojené s fyzickej tlačiarni. Prenapríklad, stav člen PRINTER_INFO štruktúry môže byť stanovená s PRINTER_STATUS_PAUSED alebo PRINTER_STATUS_PENDING_DELETION, sú nevyhnutne dôležité pre front tlače. Tiež stav člen JOB_INFO štruktúra môže obsahovať hodnoty stavu pre JOB_STATUS_PAUSED alebo JOB_STATUS_DELETING, sú dôležité len pre tento konkrétny tlačovej úlohy. Upozorňujeme tiež, že tlačové úlohy môže hromadiť vo fronte tlače po mať odvinuté a by bolo ponechané s stave JOB_STATUS_PRINTED.

Každá z týchto funkcií vyžaduje rukoväť na tlačiareň identifikovaťpožadovanú tlačiareň. Táto rukoväť sa získava z OpenPrinter Funkcia, ktorá prijíma reťazec, ktorý obsahuje názov tlačiarne. Tento názov môže byť lokálny názov tlačiarne alebo UNC zdieľať názov na sieťovej tlačiarni.

Nasledujúci kód vzorky preukáže ako volať EnumJobs Funkcia správne na načítanie JOB_INFO štruktúry a ako volať GetPrinter Funkcia načítať PRINTER_INFO štruktúry:

Vzorky 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: Ak je zapnuté združovanie tlačiarní v systéme Windows NT, tam môže byť viac ako jeden despooling tlačovú úlohu z frontu tlačiarne, ktoré bude hlásiť stav. Táto vzorka kódu nepovažuje za túto okolnosť.
ODKAZY
Dodatočné informácie o všeobecných pokynov na volanie funkcií zaraďovacia služba Win32, po kliknutí na nasledovné číslo článku databázy Microsoft Knowledge Base:
158828Ako volanie Wind32 zaraďovača enumerácie API správne
GdiSpool

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 160129 – Posledná kontrola: 10/17/2011 13:24:00 – Revízia: 2.0

Microsoft Win32 Application Programming Interface

  • kbFAQ kbhowto kbmt KB160129 KbMtsk
Pripomienky
amp;t=">