أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية الحصول على حالة مهمة طباعة وطابعه

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

اضغط هنا لرابط المقالة باللغة الانجليزية160129
الموجز
حالة الطابعات ومهام الطباعة يتم تحديثه بواسطة سبوليردورينج Win32 ديسبول مهمة الطباعة. في كل الحالات الأخرى، التي ديسبولينج isnot الطابعة والتقارير أية معلومات حالة الطابعة عند كونسيديريدتو تكون جاهزة والخمول.
معلومات أخرى
كما أشار إلى ذلك Win32 API، "طابعة" يتكون من برينتيردريفير في قائمة انتظار الطباعة ومسار الإدخال/الإخراج إلى طابعة فعلية.نظام التشغيل يعامل طابعة الفعلية أنشأه فقط الوجهة حجم مهمة الطباعة وتمريرها من خلال نظام "طابعة"، أشار توين بقية هذه المقالة كطابعة.

الجزء الأكثر وضوحاً من طابعة قائمة انتظار طباعة. تديره إدارة ثيبرينت أو مجلدات الطابعة في أوسيرينتيرفاسيس نمط Windows 95. برنامج تشغيل الطابعة هو الواجهة للطابعة التي يتم تطبيقات أوسيدبي لإنشاء مهام الطباعة عبر طابعة DCs. مسار الإدخال/الإخراج أبرينتير يتكون من عدة طبقات من قانون النظام التي قد تصل بورتمونيتور.

مراقبة منفذ واجهة الطابعة الفعلية في نهاية دفق أسفل نظام الطابعة والمسؤولة عن نقل داتاوف مهمة طباعة عبر أي اتصال موجود إلى الطابعة الفعلية.في حالة الطابعات ثنائي الاتجاه، مراقب المنفذ قد بيريسبونسيبلي لنقل البيانات من الطابعة الفعلية. يتم ثيسكونيكشن والطابعة الفعلية، حيث تحدث أخطاء. أنها جوبوف مراقب المنفذ الإبلاغ عن هذه الأخطاء.

الاستعلام المخزن المؤقت لحالة الطابعة الفعلية التي يتصل بها أبرينتير. بدلاً من ذلك، حالة النجاح ديتيرمينيسثي الطابعة الفعلية لمهمة طباعة في الوقت من ديسبوليد فوق بورتمونيتور. في حالة حدوث بعض الأخطاء في هذه العملية، التي أعدها ثيبورت مراقبة الخطأ وسجل في معلومات حالة مهمة الطباعة. التخزين المؤقت، بدورها، بنشر معلومات الخطأ معقولة "قائمة انتظار الطابعة".

ونتيجة لذلك، تقارير نظام الطابعة لا توجد حالة عند isempty قائمة انتظار الطابعة. في هذه الحالة، يتم افتراض الطابعة جاهزة لقبول مهام الطباعة.هذا وضع افتراض صحيح حتى إذا كانت الطابعة الفعلية في ارورستاتي مثل متصل. نظام التشغيل يعتبر تواكسيبت استعداد الطابعة مهام الطباعة حتى إذا، لسبب من الأسباب، أنه لا يمكن إتمام التسليم إلى الطابعة الفعلية. تعتبر هذه ظروف حالة خطأ في نظام التشغيل يجب معالجتها من قبل المستخدم. أنها نوتكونسيديريد خطأ التي يمكن للتطبيق الذي يتم السماح توكومبليتي التخزين المؤقت لمهمة الطباعة بنجاح.

تحديد حالة الطابعة الفعلية

هناك واحد من الفرضية الأساسية يجب أن يكون صحيحاً لتحديد ستاتيوف طابعة الفعلية: التخزين المؤقت يجب أن تكون محاولة إرسال جوبتو طباعة الطابعة الفعلية. هذا هو الوقت الوحيد مراقبة حالة إيسريبورتيد الطابعة عن طريق المنفذ. وبالإضافة إلى ذلك، يتم الإعلام إينفورماتيونماي الأكثر وضوحاً في حالة أعضاء بنية JOB_INFO لذلك مهمة طباعة معينة لأن بعض مراقب المنفذ سوف يكون تعيين هذه القيم مباشرة.

بنيات JOB_INFO تحتوي على حالة عضو وعضو بستاتوس . كلا عضوي يحتوي على معلومات حالة مهمة الطباعة التي أعدها جهاز مراقبة المنفذ. هذين العضوين تختلف في حالة العضو هو حقل بت الدول التي تحتوي على قيم محددة سلفا، بينما هو عضو pStatus مؤشر إلى سلسلة التي تحتوي على أي شيء. يتم توثيق هذه القيم Win32 SDK وملف الرأس WinSpool.h. عضو بستاتوس أحياناً، ولكن ليس دائماً، معد لسلسلة حالة وصفية. يعرف كل مراقب المنفذ محتويات هذه السلسلة.

بني JOB_INFO يتم إرجاعها بواسطة الدالات API اثنين: جيتجوب وانومجوبس. انومجوبس إرجاع صفيف من بنيات JOB_INFO دون الحاجة إلى أن المرجع المتصل بعمل معين في قائمة انتظار الطابعة. مهمة الطباعة التي يتم حاليا ديسبولينج (طباعة) يحتوي على معلومات الحالة. للبحث عن هذه المهمة في الصفيف، البحث في الصفيف من بنيات JOB_INFO لتحديد موقع الذي لديه مجموعة بت JOB_STATUS_PRINTING حالة مهمة الطباعة.

أسهل طريقة لتحديد حالة الطابعة فحص ستاتوسميمبير بنية PRINTER_INFO . هذه البنية يتم إرجاعها بواسطة الدالة جيتبرينتير . هناك عيوب هذا النهج في أن هناك أي عضو سلسلة بستاتوس في بنية PRINTER_INFO قد توفر أكثر معلومات الحالة المفصلة والشاملة. ومع ذلك، هناك ميزة في ذلك جهاز عرض منفذ قد تعيين بعض الطابعات أكثر شمولاً بتات حالة بنية PRINTER_INFO . ومع ذلك، لاحظ أن أجهزة مراقبة المنافذ الافتراضية ل Windows لا يتم عادة تعيين أكثر من بت PRINTER_STATUS_ERROR عضو حالة الطابعة.

ملاحظة في حالة أعضاء أي مجموعة من الهياكل قد تحتوي على ستاتينفورميشن التي لا تتعلق حصرا بالطابعة الفعلية. فوريكسامبلي، قد يتم تعيين العضو حالة بني PRINTER_INFO مع PRINTER_STATUS_PAUSED أو PRINTER_STATUS_PENDING_DELETION، المرتبطة حصرا إلى "قائمة انتظار الطباعة". كما قد يحتوي عضو مركز بنية JOB_INFO قيم الحالة ل JOB_STATUS_PAUSED أو JOB_STATUS_DELETING، ذات الصلة بذلك مهمة طباعة معينة فقط. أيضا، لاحظ أنه قد تتراكم مهام الطباعة في قائمة انتظار طباعة بعد أن يكون إعادة لف وسيترك بحالة JOB_STATUS_PRINTED.

يتطلب كل من هذه الدالات مؤشر لطابعة لتحديد الطابعة ثيديسيريد. يتم الحصول على هذا المؤشر من دالة OpenPrinter ، يقبل سلسلة تحتوي على اسم الطابعة. يمكن أن يكون هذا الاسم أما اسم محلي للطابعة أو مشاركة UNC اسم طابعة شبكة اتصال.

نموذج التعليمات البرمجية التالي يوضح كيفية استدعاء الدالة انومجوبس بشكل صحيح لاسترداد بني JOB_INFO وكيفية استدعاء دالة جيتبرينتير لاسترداد بني PRINTER_INFO :

نموذج لتعليمة برمجية

   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;   }				
ملاحظة: عند تمكين تجمع الطابعات على Windows NT، قد يكون هناك أكثر من ديسبولينج مهمة الطباعة من قائمة انتظار طابعة التي سيتم الإبلاغ عن حالة. نموذج التعليمات البرمجية هذا ولا يعتبر هذا الظرف.
مراجع
للحصول على معلومات إضافية حول إرشادات عامة على استدعاء دوال Win32 التخزين المؤقت، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
158828 كيفية تعداد التخزين المؤقت Wind32 استدعاء واجهات برمجة التطبيقات بشكل صحيح
جديسبول

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 160129 - آخر مراجعة: 03/14/2015 05:00:00 - المراجعة: 5.0

Microsoft Win32 واجهة برمجة تطبيقات

  • kbFAQ kbhowto kbmt KB160129 KbMtar
تعليقات
/html>&t="> >html>