현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

프린터 및 인쇄 작업 상태를 가져오는 방법

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:160129
요약
프린터 및 인쇄 작업의 상태는 인쇄 작업을 despool Win32 Spoolerduring으로 업데이트 합니다. 그 외에 해당 프린터 isnot despooling 및 보고서의 프린터 상태 정보 없음 때 준비 및 유휴 consideredto 수 있습니다.
추가 정보
Win32 API를 참조 하는 같이 "프린터"는 printerdriver, 인쇄 대기열 및 실제 프린터 입/출력 경로가 구성 됩니다.운영 체제는 단순히 대상 되기 인쇄 작업에 의해 생성 되며 시스템을 통해 전달 된 "프린터" toin 프린터로이 문서의 나머지 부분으로 실제 프린터를 처리 합니다.

프린터 가장 보이는 부분에서 인쇄 대기열입니다. ThePrint 관리자 또는 Windows 95 스타일 userinterfaces의 프린터 폴더에 의해 관리 됩니다. 프린터 드라이버는 프린터 Dc 통해 인쇄 작업을 만들려면 응용 프로그램 사용자는 프린터에 인터페이스입니다. APrinter에 대 한 I/O 경로 구획을 portmonitor를 사용 하 여 시스템 코드의 여러 계층으로 이루어져 있습니다.

포트 모니터는 실제 프린터 프린터 시스템 하위 스트림 끝에 인터페이스 및 실제 프린터 모든 연결이 존재를 통해 dataof 인쇄 작업을 전송 하는.양방향 프린터의 경우 포트 모니터 beresponsible 실제 프린터 간에 데이터를 전송 하기 위한 것입니다. Thisconnection, 및 실제 프린터 오류가 발생 됩니다. 이러한 오류를 보고 하려면 포트 모니터 jobof는.

APrinter 연결 된 실제 프린터의 상태에 대 한 스풀러를 쿼리하지 않습니다. 대신, 실제 프린터 determinesthe 성공 시 인쇄 작업의 상태는 despooled에서 portmonitor를 통해 이 과정에서 일부 오류가 발생 한 경우 오류 theport 모니터 보고 이며 인쇄 작업 상태 정보가 기록 됩니다. 그러면 스풀러, 프린터 대기열 적절 한 오류 정보를 전파합니다.

따라서 프린터 시스템 프린터 큐 isempty 때 없음 상태를 보고 합니다. 이 상태에서는 프린터 인쇄 작업의 받을 준비가 간주 됩니다.같은 실제 프린터는 errorstate에는 경우에 유효한 가정입니다 오프 라인. 운영 체제는 몇 가지 이유로 실제 프린터 배달 완료할 수 없는 경우 인쇄 작업 프린터 준비 toaccept를 고려 합니다. 환경에서 사용자가 해결 해야 하는 운영 체제에서 오류 상태로 간주 됩니다. Notconsidered는 보고 가능 응용 프로그램에 오류가 허용 tocomplete 인쇄 작업의 스풀링 성공적으로.

실제 프린터 상태 확인

Stateof 실제 프린터를 확인 하려면 충족 해야 하는 하나의 기본적인 전제는: 스풀러 실제 프린터 인쇄 jobto 보낼 시도 합니다. 에 프린터가 isreported 포트에서의 상태 모니터링입니다. 또한 일부 포트 모니터를 설정한이 값이 직접 이므로에 해당 특정 인쇄 작업에 대 한 JOB_INFO 구조체의 상태 멤버가 가장 의미 있는 informationmay는 보고 됩니다.

JOB_INFO 구조체의 상태 멤버를 pStatus 구성원을 포함합니다. 두 멤버에 포트 모니터에 의해 보고 된 인쇄 작업의 상태 정보가 포함 되어 있습니다. 이러한 두 멤버는 상태 멤버를 pStatus 구성원 거의 포함 될 수 있는 문자열에 포인터는 미리 결정 된 값을 포함 하는 비트 필드 상태 다. 이러한 값은 Win32 SDK 및 WinSpool.h 헤더 파일에 설명 되어 있습니다. PStatus 구성원 항상 그렇지는 않지만 경우에 따라, 상태 설명 문자열으로 설정 됩니다. 이 문자열의 내용은 각 포트 모니터에 의해 정의 됩니다.

JOB_INFO 구조체 두 API 함수에 의해 반환 됩니다: GetJob 및 EnumJobs. EnumJobs 참조를 반환 JOB_INFO 구조체의 배열에 관계 없이 호출자에 게 특정 작업을 프린터 대기열에. (인쇄) despooling 현재는 인쇄 작업 상태 정보가 포함 되어 있습니다. 배열에서이 작업을 찾으려면 찾을 인쇄 작업 상태 멤버를 가진 JOB_STATUS_PRINTING 비트 집합이 JOB_INFO 구조체의 배열을 검색 합니다.

프린터 상태를 결정 하는 쉬운 방법을 PRINTER_INFO 구조체의 Statusmember를 검사 하는 것입니다. 이 구조는 GetPrinter 함수에 의해 반환 됩니다. 한다는 점에서 pStatus 문자열 멤버가 PRINTER_INFO 구조의 광범위 한 또는 자세한 상태 정보를 제공할 수 있는 단점이 있습니다. 그러나 포트 모니터는 설정 보다 광범위 한 프린터 PRINTER_INFO 구조의 상태 비트는 장점이 있습니다. 그러나 Note,는 Windows에 대 한 기본 포트 모니터 설정 하지 않으면 일반적으로 프린터의 상태 멤버의 PRINTER_STATUS_ERROR 비트 이상.

참고 두 구조체의 상태 멤버 엄격 하 게 실제 프린터 관련 되지 않은 stateinformation를 포함할 수 있습니다. Forexample는 PRINTER_INFO 구조체의 상태 멤버가 PRINTER_STATUS_PAUSED 또는 PRINTER_STATUS_PENDING_DELETION를 엄격 하 게 관련 인쇄 큐를 사용 하 여 설정할 수 있습니다. 또한 JOB_INFO 구조체의 상태 멤버가 JOB_STATUS_PAUSED 또는 JOB_STATUS_DELETING에 해당 특정 인쇄 작업에만 관련이 있는 상태 값을 포함할 수 있습니다. 이때, 또한 스풀링이 해제 한 후 JOB_STATUS_PRINTED의 상태로 남아 있게 됩니다 인쇄 작업이 인쇄 큐에 누적 될 수 있습니다.

이들 각이 함수 thedesired 프린터 식별 하기 위해 프린터 핸들이 필요 합니다. 이 핸들에서 프린터의 이름을 포함 하는 문자열을 허용 하는 OpenPrinter 함수를 가져옵니다. 이 이름은 프린터의 로컬 이름을 수 또는 UNC 공유 네트워크 프린터 이름입니다.

다음 코드 예제에서는 JOB_INFO 구조체를 검색 하는 EnumJobs 함수를 호출 하는 방법과 PRINTER_INFO 구조체를 검색 하려면 GetPrinter 함수를 호출 하는 방법을 보여 줍니다.

샘플 코드

   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 프린터 풀링을 사용 하는 경우 있을 수 이상의 상태를 보고 하는 프린터 대기열에서 인쇄 작업이 despooling. 이 샘플 코드는 해당 상황을 고려 하지 않습니다.
참조
스풀러 Win32 함수를 호출 하는 일반적인 지침에 대 한 자세한 내용은 Microsoft 기술 자료의 다음 문서 번호를 클릭 합니다.
158828 Api 호출 Wind32 스풀러 열거 하는 방법을 제대로
GdiSpool

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 160129 - 마지막 검토: 03/14/2015 07:29:00 - 수정: 5.0

Microsoft Win32 Application Programming Interface

  • kbFAQ kbhowto kbmt KB160129 KbMtko
피드백