Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Yazıcı ve yazdırma işi durumunu alma

ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.

160129
Özet
Yazıcılar ve yazdırma işlerinin durumunu olan bir yazdırma işinin despool Win32 Spoolerduring tarafından güncelleştirildi. Tüm diğer zamanlarda bu yazıcı IsNot despooling ve raporlar Yazıcı hiçbir durum bilgilerini olduğunda consideredto hazır ve boşta.
Daha fazla bilgi
Win32 API tarafından başvurulan gibi "yazıcı", yazıcıSürücüsü, yazdırma sırasını ve fiziksel yazıcının giriş/çıkış yolu oluşur.İşletim sistemi fiziksel yazıcı yalnızca hedef bir yazdırma işi tarafından oluşturulan ve bir sistem iletilen "Yazıcı" denir toin bir yazıcı olarak bu makalenin geri kalanında gibi davranır.

En belirgin bir yazıcıya bir yazdırma sırası parçasıdır. ThePrint Yöneticisi veya Windows 95 stili kullanarak kullanıcı arabirimleri yaratmayı yazıcı klasörlerde tarafından yönetilir. Yazıcı sürücüsü yazıcı DCs üzerinden yazdırma işleri oluşturmak için usedby uygulamaları olan yazıcıya arabirimdir. G/ç yol aPrinter için sistem kodu portmonitor ile sonuçlanan birkaç katmandan oluşur.

Bağlantı Noktası İzleyicisi sistem yazıcı aşağı akış sonunda fiziksel yazıcının arabirim ve dataof bir yazdırma işi için fiziksel yazıcının ne olursa olsun bağlantı var arasında aktarmak için sorumludur.Çift yönlü yazıcı söz konusu olduğunda, fiziksel yazıcının gelen ve giden veri aktarımı için beresponsible bağlantı noktası ekranı olacaktır. Thisconnection ve fiziksel yazıcının nerede hatalar ortaya ' dir. Bu hataları bildirmek için bağlantı noktası İzleyicisi jobof olur.

Biriktirici için aPrinter bağlı olan fiziksel bir yazıcının durumunu sorgulamaz. Bunun yerine, yazdırma işi zaman fiziksel yazıcının determinesthe başarısını, portmonitor despooled durumudur. Bu işlemde bazı hata ortaya çıkarsa, hata theport İzleyicisi tarafından bildirilen ve bir yazdırma işi'nin durumu bilgileri kaydedilir. Biriktirici, yazıcı sırası için makul hata bilgisi yayar.

Yazıcı kuyruk IsEmpty sonuç olarak, sistem yazıcısı yok durumu bildirir. Bu durumda, yazıcının yazdırma işlerini kabul etmeye hazır olduğu varsayılır.Fiziksel yazıcıda bir errorstate gibi olsa bile bu bir geçerli varsayılır çevrimdışı. Herhangi bir nedenle teslim fiziksel yazıcının tamamlayamıyor olsa bile, işletim sisteminin yazdırma işlerini yazıcı hazır AddNew dikkate alır. Kullanıcı tarafından ele alınacak işletim sisteminde bir hata durumunda böyle bir işlemin bir durum olarak kabul edilir. Notconsidered durumda olan uygulamaya raporlanabilir hata izin verilen tocomplete biriktirme yazdırma işinin başarıyla.

Fiziksel yazıcının durumunu belirleme

Fiziksel yazıcının stateof belirlemek için doğru olması gereken bir temel içi yoktur: biriktirici yazdırma jobto fiziksel yazıcının gönderme denemesi gerekir. Bu bağlantı noktasına göre yazıcı isreported durumunu izlemek tek zamandır. Ayrıca, bazı bağlantı noktası İzleyicisi bu değerleri doğrudan kurmanız gerekir çünkü en anlamlı informationmay JOB_INFO yapısı, belirli bir yazdırma işinin durumu üyeleri olarak bildirilmesi.

JOB_INFO yapıların Durum üyesi ve pStatus üye içerir. Her iki üye Bağlantı Noktası İzleyicisi tarafından bildirilen bir yazdırma işinin durumu bilgilerini içerir. Hemen hemen her şeyi içerebilir bir dize işaretçisi pStatus üye olmakla birlikte, önceden belirlenmiş değerler içeren bir bit alanı durumları Durum üye olduğu, bu iki üyenin farklı. Bu değerler, Win32 SDK ve WinSpool.h üstbilgi dosyası tarafından belgelenmiştir. PStatus üye, bazen, her zaman değilse de, açıklayıcı durum dizesi için ayarlanır. Bu dize, içeriğini, her bağlantı noktası İzleyicisi tarafından tanımlanır.

JOB_INFO yapıları iki API işlevleri tarafından döndürülen: GetJob ve EnumJobs. EnumJobs JOB_INFO yapıları dizisi gerek kalmadan belirli bir iş arayan başvuru yazıcı sırasında döndürür. Şu anda (yazdırma) despooling yazdırma işinin durum bilgileri içerir. Dizide bu iş bulmak için arama yapın, durum üye JOB_STATUS_PRINTING biti ayarlanmış yazdırma işi bulmak için JOB_INFO yapıları dizisi.

Yazıcı durumu belirleme daha kolay bir yöntem Statusmember, PRINTER_INFO yapısını incelemektir. Bu yapı GetPrinter işlevi tarafından döndürülür. Yok, hiç pStatus dize üye daha ayrıntılı veya kapsamlı durum bilgileri sağlayabilir PRINTER_INFO yapısında bu yaklaşımın dezavantajı yoktur. Ancak, bağlantı noktası İzleyicisi daha kapsamlı yazıcı bazıları PRINTER_INFO yapısının durum bitleri ayarlanmış bir yararı yoktur. Ancak, Windows için varsayılan bağlantı noktası İzleyicisi genellikle birden çok PRINTER_STATUS_ERROR bit bir yazıcının durumunu üyesinin ayarlamaz olduğunu unutmayın.

Ya da yapıları kümesi durumu üyeleri kesinlikle fiziksel yazıcının ilişkili olmayan stateinformation bulunabileceğine dikkat edin. Örneğin, PRINTER_STATUS_PAUSED veya yazdırma sırası kesinlikle ilgisi olan PRINTER_STATUS_PENDING_DELETION, PRINTER_INFO yapıların durum üyesi ayarlanabilir. Ayrıca, JOB_INFO yapısı durum üyesi JOB_STATUS_PAUSED veya yalnızca o belirli yazdırma işleriyle ilgili olan JOB_STATUS_DELETING, durum değerleri içerebilir. Ayrıca, despooled ve JOB_STATUS_PRINTEDdurumuyla sol sonra yazdırma işlerini yazdırma kuyruğunda birikmektedir unutmayın.

Bu işlevlerden her biri thedesired yazıcı tanıtmak için bir yazıcı için bir tanıtıcı gerektirir. Bu tanıtıcı, yazıcının adını içeren bir dize kabul eden OpenPrinter işlevinden elde edilir. Bu ad ya da yerel yazıcının adı olabilir veya bir UNC paylaşım adı bir ağ yazıcısına.

Aşağıdaki örnek kodu düzgün JOB_INFO yapıları almak için EnumJobs işlev çağrısı ve PRINTER_INFO yapıları almak için GetPrinter işlevini çağırmak nasıl gösterir:

Örnek Kod

   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;   }				
Not: yazıcı kuyruğunu Windows NT üzerinde etkinleştirildiğinde olabilir birden fazla yazdırma işinin durumu bildirir bir yazıcı sırası despooling. Bu örnek kod, bu işlemin durum dikkate almaz.
Referanslar
Win32 biriktirici işlevlerini çağırma genel yönergeler hakkında ek bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
158828 Çağrı Wind32 biriktirici numaralama API'ları nasıl düzgün
GdiSpool

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 160129 - Son İnceleme: 03/14/2015 09:28:00 - Düzeltme: 5.0

  • Microsoft Win32 Uygulama Programlama Arabirimi
  • kbFAQ kbhowto kbmt KB160129 KbMttr
Geri bildirim