FindNextPrinterChangeNotification 함수

FindNextPrinterChangeNotification 함수는 프린터 또는 인쇄 서버와 연결된 변경 알림 개체에 대한 최신 변경 알림에 대한 정보를 검색합니다. 변경 알림 개체에 대한 대기 작업이 충족되면 이 함수를 호출합니다.

또한 함수는 변경 알림 개체를 신호가 없는 상태로 다시 설정합니다. 그런 다음 다른 대기 작업에서 개체를 사용하여 프린터 또는 인쇄 서버를 계속 모니터링할 수 있습니다. 운영 체제는 다음에 지정한 변경 집합 중 하나가 프린터 또는 인쇄 서버에 발생할 때 개체를 신호 상태로 설정합니다. FindFirstPrinterChangeNotification 함수는 변경 알림 개체를 만들고 모니터링할 변경 내용 집합을 지정합니다.

구문

BOOL FindNextPrinterChangeNotification(
  _In_      HANDLE hChange,
  _Out_opt_ PDWORD pdwChange,
  _In_opt_  LPVOID pPrinterNotifyOptions,
  _Out_opt_ LPVOID *ppPrinterNotifyInfo
);

매개 변수

hChange [in]

프린터 또는 인쇄 서버와 연결된 변경 알림 개체에 대한 핸들입니다. FindFirstPrinterChangeNotification 함수를 호출하여 이러한 핸들을 가져옵니다. 운영 체제는 개체의 변경 알림 필터에 지정된 변경 내용 중 하나를 검색할 때 이 변경 알림 개체를 신호 상태로 설정합니다.

pdwChange [out, optional]

가장 최근 알림을 발생시킨 변경 내용을 나타내기 위해 비트가 설정된 변수에 대한 포인터입니다. 설정할 수 있는 비트 플래그는 FindFirstPrinterChangeNotification 호출의 fdwFilter 매개 변수에 지정된 것과 일치합니다. 시스템은 다음 비트 플래그 중 하나 이상을 설정합니다.

의미
PRINTER_CHANGE_ADD_FORM
양식이 서버에 추가되었습니다.
PRINTER_CHANGE_ADD_JOB
인쇄 작업이 프린터로 전송되었습니다.
PRINTER_CHANGE_ADD_PORT
포트 또는 모니터가 서버에 추가되었습니다.
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
인쇄 프로세서가 서버에 추가되었습니다.
PRINTER_CHANGE_ADD_PRINTER
프린터가 서버에 추가되었습니다.
PRINTER_CHANGE_ADD_PRINTER_DRIVER
프린터 드라이버가 서버에 추가되었습니다.
PRINTER_CHANGE_CONFIGURE_PORT
서버에 포트가 구성되었습니다.
PRINTER_CHANGE_DELETE_FORM
서버에서 양식이 삭제되었습니다.
PRINTER_CHANGE_DELETE_JOB
작업이 삭제되었습니다.
PRINTER_CHANGE_DELETE_PORT
서버에서 포트 또는 모니터가 삭제되었습니다.
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
서버에서 인쇄 프로세서가 삭제되었습니다.
PRINTER_CHANGE_DELETE_PRINTER
프린터가 삭제되었습니다.
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
프린터 드라이버가 서버에서 삭제되었습니다.
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
프린터 연결에 실패했습니다.
PRINTER_CHANGE_SET_FORM
서버에 양식이 설정되었습니다.
PRINTER_CHANGE_SET_JOB
작업이 설정되었습니다.
PRINTER_CHANGE_SET_PRINTER
프린터가 설정되었습니다.
PRINTER_CHANGE_SET_PRINTER_DRIVER
프린터 드라이버가 설정되었습니다.
PRINTER_CHANGE_WRITE_JOB
작업 데이터가 작성되었습니다.
PRINTER_CHANGE_TIMEOUT
작업 시간이 초과되었습니다.
PRINTER_CHANGE_SERVER
Windows 7: 서버에서 변경이 발생했습니다.

pPrinterNotifyOptions [in, optional]

PRINTER_NOTIFY_OPTIONS 구조체에 대한 포인터입니다. 이 구조체의 Flags 멤버를 PRINTER_NOTIFY_OPTIONS_REFRESH 설정하여 함수가 모니터링되는 모든 프린터 정보 필드에 대한 현재 데이터를 반환합니다. 함수는 구조체의 다른 모든 멤버를 무시합니다. 이 매개 변수는 NULL일 수 있습니다.

ppPrinterNotifyInfo [out, optional]

시스템이 할당한 읽기 전용 버퍼에 대한 포인터를 수신하는 포인터 변수에 대한 포인터입니다. 버퍼를 완료하면 FreePrinterNotifyInfo 함수를 호출하여 버퍼를 해제합니다. 정보가 필요하지 않은 경우 이 매개 변수는 NULL 일 수 있습니다.

버퍼에는 PRINTER_NOTIFY_INFO_DATA 구조의 배열을 포함하는 PRINTER_NOTIFY_INFO 구조체가 포함되어 있습니다. 배열의 각 요소에는 FindFirstPrinterChangeNotification 호출의 pPrinterNotifyOptions 매개 변수에 지정된 필드 중 하나에 대한 정보가 포함됩니다. 일반적으로 함수는 가장 최근 알림을 발생하도록 변경된 필드에 대해서만 데이터를 제공합니다. 그러나 pPrinterNotifyOptions 매개 변수가 가리키는 구조체가 PRINTER_NOTIFY_OPTIONS_REFRESH 지정하는 경우 함수는 모니터링되는 모든 필드에 대한 데이터를 제공합니다.

PRINTER_NOTIFY_INFO_DISCARDED 비트가 PRINTER_NOTIFY_INFO 구조체의 Flags 멤버에 설정된 경우 오버플로 또는 오류가 발생하여 알림이 손실되었을 수 있습니다. 이 경우 PRINTER_NOTIFY_OPTIONS_REFRESH 지정하는 두 번째 FindNextPrinterChangeNotification 호출을 수행할 때까지 추가 알림이 전송되지 않습니다.

반환 값

함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다.

설명

참고

이는 차단 또는 동기 함수이며 즉시 반환되지 않을 수 있습니다. 이 함수가 얼마나 빨리 반환되는지는 네트워크 상태, 인쇄 서버 구성 및 애플리케이션을 작성할 때 예측하기 어려운 프린터 드라이버 구현 요소와 같은 런타임 요인에 따라 달라집니다. 사용자 인터페이스와의 상호 작용을 관리하는 스레드에서 이 함수를 호출하면 애플리케이션이 응답하지 않는 것처럼 보일 수 있습니다.

FindFirstPrinterChangeNotification에서 만든 알림 개체에 대한 대기 작업이 충족된 후 FindNextPrinterChangeNotification 함수를 호출합니다. FindNextPrinterChangeNotification을 호출하면 대기 작업을 충족하는 변경 내용에 대한 정보를 얻을 수 있으며 다음 변경이 발생할 때 신호를 받을 수 있도록 알림 개체를 다시 설정할 수 있습니다.

한 가지 예외를 제외하고 변경 알림 개체가 신호 상태가 아닌 경우 FindNextPrinterChangeNotification 함수를 호출하지 마세요. 대기 함수가 WAIT_TIMEOUT 값을 반환하는 경우 변경 개체가 신호 상태가 아닙니다. 대기 함수가 시간 초과 없이 성공한 경우에만 FindNextPrinterChangeNotification 함수를 호출합니다. pPrinterNotifyOptions 매개 변수에 설정된 PRINTER_NOTIFY_OPTIONS_REFRESH 비트로 FindNextPrinterChangeNotification이 호출되는 경우는 예외입니다. 이 플래그가 설정된 경우에도 ppPrinterNotifyInfo 매개 변수에서 PRINTER_NOTIFY_INFO_DISCARDED 플래그를 설정할 수 있습니다.

프린터 또는 인쇄 서버에서 변경 내용을 계속 모니터링하려면 대기 함수 중 하나를 호출한 다음 FindNextPrinterChangeNotification 함수를 호출하여 변경 내용을 검사하고 알림 개체를 다시 설정하는 주기를 반복합니다.

FindNextPrinterChangeNotification 은 동일한 프린터 정보 필드에 대한 여러 변경 내용을 단일 알림으로 결합할 수 있습니다. 이 경우 함수는 일반적으로 필드의 모든 변경 내용을 ppPrinterNotifyInfoPRINTER_NOTIFY_INFO_DATA 구조 배열에 있는 단일 항목으로 축소합니다. 단일 항목은 최신 정보만 보고합니다. 그러나 일부 작업 및 프린터 정보 필드의 경우 함수는 동일한 필드에 대해 여러 배열 항목을 반환할 수 있습니다. 이 경우 필드의 마지막 배열 항목은 현재 데이터를 보고하고 이전 항목에는 중간 단계에 대한 데이터가 포함됩니다.

변경 알림 개체가 더 이상 필요하지 않으면 FindClosePrinterChangeNotification 함수를 호출하여 닫습니다.

참고

WINDOWS XP SP2(서비스 팩 2) 이상에서는 ICF(인터넷 연결 방화벽)가 기본적으로 프린터 포트를 차단하지만 파일 및 인쇄 공유에 대한 예외를 사용하도록 설정할 수 있습니다. 사용자가 다른 컴퓨터에 프린터를 연결하고 예외가 사용하도록 설정되지 않은 경우 사용자는 서버에서 프린터 변경 알림을 받지 않습니다. 컴퓨터 관리자는 예외를 사용하도록 설정해야 합니다.

예제

다음 코드 샘플에서는 이러한 함수를 사용하여 프린터 상태 모니터링하는 방법을 보여 줍니다.

// Get change notification handle for the printer   
chgObject = FindFirstPrinterChangeNotification( 
                hPrinter, 
                PRINTER_CHANGE_JOB, 
                0, 
                NULL); 

if (chgObject != INVALID_HANDLE_VALUE) {
    while (bKeepMonitoring) {
        // Wait for the change notification 
        WaitForSingleObject(chgObject, INFINITE);

        fcnreturn = FindNextPrinterChangeNotification(
                        chgObject, 
                        pdwChange, 
                        NULL, 
                        NULL);

        if (fcnreturn) {
            // Check value of *pdwChange and 
            //  deal with the indicated change 
        }
        // Insert some mechanism to stop monitoring
        //  such as: 
        //
        // if (something happens) {
        //     bKeepMonitoring = false; 
        // }
        //
    }
    // Close Printer Change Notification handle when finished. 
    FindClosePrinterChangeNotification(chgObject);
} else {
    // Unable to open printer change notification handle 
    dwStatus = GetLastError();
}

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Winspool.h(Windows.h 포함)
라이브러리
Winspool.lib
DLL
Spoolss.dll

추가 정보

인쇄

인쇄 스풀러 API 함수

FindClosePrinterChangeNotification

FindFirstPrinterChangeNotification

PRINTER_NOTIFY_INFO

PRINTER_NOTIFY_INFO_DATA

PRINTER_NOTIFY_OPTIONS