FindNextPrinterChangeNotification 함수

FindNextPrinterChangeNotification 함수는 프린터나 인쇄 서버와 연결 된 변경 알림 개체에 대 한 가장 최근의 변경 알림에 대 한 정보를 검색 합니다. 변경 알림 개체의 대기 작업이 충족 될 때이 함수를 호출 합니다.

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

구문

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

매개 변수

Hchange [ 진행]

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

변경 내용 [ out, 선택 사항]

가장 최근의 알림을 발생 시키는 데 발생 한 변경 내용을 나타내도록 비트가 설정 된 변수에 대 한 포인터입니다. 설정 될 수 있는 비트 플래그는 FindFirstPrinterChangeNotification 호출의 fdwfilter 매개 변수에 지정 된 플래그에 해당 합니다. 시스템은 다음 비트 플래그 중 하나 이상을 설정 합니다.

의미
프린터 _ 변경 _ _ 양식 추가
폼이 서버에 추가 되었습니다.
프린터 _ 변경 _ _ 작업 추가
인쇄 작업이 프린터로 전송 되었습니다.
프린터 _ 변경 _ _ 포트 추가
서버에 포트나 모니터를 추가 했습니다.
프린터 _ 변경 _ _ 인쇄 _ 처리기 추가
인쇄 처리기가 서버에 추가 되었습니다.
프린터 _ 변경 _ _ 프린터 추가
프린터가 서버에 추가 되었습니다.
프린터 _ 변경 _ _ 프린터 _ 드라이버 추가
프린터 드라이버가 서버에 추가 되었습니다.
프린터 _ 변경 _ 구성 _ 포트
서버에 포트가 구성 되었습니다.
프린터 _ 변경 _ 삭제 _ 양식
서버에서 양식이 삭제 되었습니다.
프린터 _ 변경 _ 삭제 _ 작업
작업이 삭제 되었습니다.
프린터 _ 변경 _ _ 포트 삭제
포트 또는 모니터가 서버에서 삭제 되었습니다.
프린터 _ 변경 _ _ 인쇄 _ 프로세서 삭제
서버에서 인쇄 처리기가 삭제 되었습니다.
프린터 _ 변경 _ _ 프린터 삭제
프린터가 삭제 되었습니다.
프린터 _ 변경 _ _ 프린터 _ 드라이버 삭제
프린터 드라이버가 서버에서 삭제 되었습니다.
프린터 _ 변경 _ 실패 _ 연결 _ 프린터
프린터 연결에 실패 했습니다.
프린터 _ 변경 _ 집합 _ 양식
서버에 폼이 설정 되었습니다.
프린터 _ 변경 _ 집합 _ 작업
작업이 설정 되었습니다.
프린터 _ 변경 _ 집합 _ 프린터
프린터가 설정 되었습니다.
프린터 _ 변경 _ 집합 _ 프린터 _ 드라이버
프린터 드라이버가 설정 되었습니다.
프린터 _ 변경 _ 쓰기 _ 작업
작업 데이터를 기록 했습니다.
프린터 _ 변경 _ 시간 제한
작업 시간이 초과 되었습니다.
프린터 _ 변경 _ 서버
Windows 7: 서버에서 변경 내용이 발생 했습니다.

pPrinterNotifyOptions [ 에서, 선택 사항]

프린터 _ 알림 _ 옵션 구조에 대 한 포인터입니다. 이 구조의 Flags 멤버를 프린터 _ 알림 _ 옵션 _ 새로 고침 으로 설정 하 여 함수가 모든 모니터링 된 프린터 정보 필드에 대 한 현재 데이터를 반환 하도록 합니다. 함수는 구조체의 다른 모든 멤버를 무시 합니다. 이 매개 변수는 NULL 일 수 있습니다.

ppPrinterNotifyInfo [ out, 선택 사항]

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

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

프린터 알림 정보의 _ _ _ 삭제 된 비트가 프린터 _ 알림 _ 정보 구조의 Flags 구성원에 설정 되 고, 오버플로 또는 오류가 발생 하 고, 알림이 손실 되었을 수 있습니다. 이 경우 프린터 _ 알림 _ 옵션 _ 새로 고침 을 지정 하는 두 번째 FindNextPrinterChangeNotification 호출을 수행할 때까지 추가 알림이 전송 되지 않습니다.

반환 값

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

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

설명

참고

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

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

한 가지 예외를 제외 하 고, 변경 알림 개체가 신호를 받지 않은 상태에 있는 경우 FindNextPrinterChangeNotification 함수를 호출 하지 마세요. 대기 함수에서 대기 _ 시간 제한 값을 반환 하는 경우 변경 개체는 신호를 받은 상태가 아닙니다. 대기 함수가 시간 초과 없이 성공 하는 경우에만 FindNextPrinterChangeNotification 함수를 호출 합니다. FindNextPrinterChangeNotificationpPrinterNotifyOptions 매개 변수에 설정 된 프린터 _ 알림 _ 옵션 _ 새로 고침 비트를 사용 하 여 호출 되는 경우는 예외입니다. 이 플래그가 설정 된 경우에도 ppPrinterNotifyInfo 매개 변수에서 프린터 _ 알림 _ 정보 _ 삭제 플래그를 설정할 수 있습니다.

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

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

변경 알림 개체가 더 이상 필요 하지 않은 경우 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 (Windows 포함)
라이브러리
Winspool .lib
DLL
Spoolss.dll

참고 항목

인쇄

인쇄 스풀러 API 함수

FindClosePrinterChangeNotification

FindFirstPrinterChangeNotification

프린터 _ 알림 _ 정보

프린터 _ 알림 _ 정보 _ 데이터

프린터 _ 알림 _ 옵션