Anda sedang offline saat ini, menunggu internet Anda untuk menyambung kembali

Cara mendapatkan status pencetak dan pekerjaan pencetakan

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 160129
Ringkasan
Status pencetak dan pekerjaan pencetakan yang diperbarui oleh Win32 Spoolerduring despool pekerjaan pencetakan. Pada waktu yang lain, saat itu printer tidak despooling laporan dan tidak ada informasi status, printer adalah consideredto akan siap dan mati.
Informasi lebih lanjut
direkomendasikan oleh Win32 API, seperti "printer" terdiri dari printerdriver, antrian cetak dan lintasan input/output ke printer fisik.sistem operasi memperlakukan printer fisik semata tujuan ofa pekerjaan pencetakan yang dihasilkan oleh dan melewati sistem yang disebut "Printer," toin seluruh artikel ini sebagai Printer.

Bagian yang paling terlihat printer adalah antrian cetak. Dikelola oleh thePrint manajer atau folder Printer di Windows 95-style userinterfaces. pengandar pencetak adalah antarmuka ke Printer yang usedby aplikasi untuk membuat pekerjaan pencetakan melalui printer DC. garis jatuh berseri I/O untuk aPrinter terdiri atas beberapa lapisan sistem kode berpuncak dengan portmonitor.

Port monitor antarmuka ke printer fisik di akhir turun-aliran sistem Printer dan bertanggung jawab untuk mentransfer dataof pekerjaan pencetakan melalui sambungan apa pun yang ada ke printer fisik.Jika bi-directional printer, port monitor akan beresponsible untuk mentransfer data ke dan dari printer fisik. Thisconnection, dan printer fisik, yang mana terjadi kesalahan. Ini adalah jobof port monitor melaporkan kesalahan tersebut.

Spooler tidak meminta status pencetak fisik yang aPrinter tersambung. Sebaliknya, status printer fisik determinesthe keberhasilan pekerjaan pencetakan pada waktu itu despooled melalui portmonitor. Jika terjadi galat beberapa proses ini, galat dilaporkan oleh theport monitor dan dicatat di informasi status pekerjaan pencetakan. Spooler, bergantian, menjalar wajar kesalahan informasi untuk antrian cetak.

Akibatnya, sistem Printer laporan status tidak saat Printer antrian isempty. Dalam keadaan ini, Printer dianggap siap untuk menerima pekerjaan pencetakan.Ini adalah asumsi berlaku bahkan jika printer fisik di errorstate seperti secara offline. sistem operasi menganggap toaccept siap Printer pekerjaan pencetakan meskipun, untuk beberapa alasan, tidak dapat menyelesaikan pengiriman ke printer fisik. Keadaan ini dianggap kondisi galat pada sistem operasi yang harus diatasi oleh pengguna. Ini adalah notconsidered galat dilaporkan ke aplikasi yang diizinkan tocomplete spooling pencetakan berhasil.

Menentukan status pencetak fisik

Ada satu tempat dasar yang benar untuk menentukan artistik printer fisik: gelondong harus mencoba untuk mengirim jobto cetak printer fisik. Ini adalah satu-satunya saat memantau status isreported printer dengan port. Selain itu, informationmay paling bermakna dilaporkan anggota status JOB_INFO struktur untuk pekerjaan pencetakan yang tertentu karena beberapa monitor port akan menetapkan nilai ini secara langsung.

Struktur JOB_INFO berisi anggota Status dan anggota pStatus . Kedua anggota berisi informasi status pekerjaan pencetakan yang dilaporkan oleh port monitor. Berikut ini dua anggota berbeda bahwa anggota Status kolom bit Serikat yang berisi nilai yang telah ditentukan, sedangkan anggota pStatus pointer ke string yang dapat berisi apa saja. Nilai ini didokumentasikan dengan Win32 SDK dan WinSpool.h header file. Anggota pStatus kadang-kadang, tapi tidak selalu diatur ke status deskriptif untai. Konten string ini didefinisikan oleh masing-masing port monitor.

Struktur JOB_INFO dikembalikan oleh dua fungsi API: GetJob dan EnumJobs. EnumJobs gulung balik array JOB_INFO struktur tanpa memerlukan yang referensi pemanggil pekerjaan tertentu dalam antrian cetak. Pekerjaan pencetakan yang saat ini despooling (pencetakan) berisi informasi status. Untuk menemukan pekerjaan ini dalam array, Cari array JOB_INFO struktur untuk menemukan pencetakan anggota Status yang memiliki set JOB_STATUS_PRINTING bit.

Metode yang lebih mudah untuk menentukan status pencetak adalah untuk memeriksa Statusmember struktur PRINTER_INFO . Struktur ini dikembalikan oleh fungsi GetPrinter . Ada kerugian pendekatan ini yang ada tidak ada anggota string pStatus dalam struktur PRINTER_INFO yang dapat memberikan rincian atau ekstensif negara bagian informasi selengkapnya. Namun, ada keuntungan bahwa monitor port yang dapat menetapkan beberapa printer yang lebih luas status bit struktur PRINTER_INFO . Namun, perlu dicatat bahwa monitor port default untuk Windows tidak biasanya diatur lebih dari bit PRINTER_STATUS_ERROR anggota Status Printer.

Perhatikan Status anggota baik serangkaian struktur mungkin berisi stateinformation yang tidak benar-benar terkait ke printer fisik. Forexample, anggota Status struktur PRINTER_INFO dapat ditetapkan dengan PRINTER_STATUS_PAUSED atau PRINTER_STATUS_PENDING_DELETION, yang sangat relevan untuk antrian cetak. Selain itu, anggota Status struktur JOB_INFO mungkin berisi nilai status JOB_STATUS_PAUSED atau JOB_STATUS_DELETING, yang relevan hanya untuk pekerjaan pencetakan yang tertentu. Ingat, juga, pekerjaan pencetakan dapat mengumpulkan dalam antrian cetak setelah mereka memiliki despooled dan akan meninggalkan dengan status JOB_STATUS_PRINTED.

Masing-masing fungsi-fungsi ini memerlukan handle ke printer untuk mengidentifikasi thedesired Printer. Tuas ini diperoleh dari fungsi OpenPrinter , yang menerima string yang berisi nama printer. Nama ini dapat berupa salah satu nama printer lokal atau UNC nama ke printer jaringan bersama.

Kode contoh berikut menunjukkan cara memanggil fungsi EnumJobs dengan benar untuk mengambil JOB_INFO struktur dan memanggil fungsi GetPrinter untuk mengambil struktur PRINTER_INFO :

Kode sampel

   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;   }				
Catatan: jika printer penggabungan diaktifkan pada Windows NT, mungkin ada lebih dari satu pekerjaan pencetakan despooling dari antrian cetak yang akan melaporkan status. Kode sampel ini menganggap bahwa keadaan.
Referensi
Untuk informasi tambahan tentang petunjuk umum pada memanggil fungsi Win32 Spooler, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
158828 Cara panggilan Wind32 Spooler enumerasi api dengan benar
GdiSpool

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 160129 - Tinjauan Terakhir: 03/14/2015 06:48:00 - Revisi: 3.0

Microsoft Win32 Application Programming Interface

  • kbFAQ kbhowto kbmt KB160129 KbMtid
Tanggapan
t/javascript"> Asimov.clickstreamTracker.init();