FindNextPrinterChangeNotification-Funktion

Die FindNextPrinterChangeNotification-Funktion ruft Informationen zur letzten Änderungsbenachrichtigung für ein Änderungsbenachrichtigungsobjekt ab, das einem Drucker oder Druckserver zugeordnet ist. Rufen Sie diese Funktion auf, wenn ein Wartevorgang für das Änderungsbenachrichtigungsobjekt erfüllt ist.

Die Funktion setzt auch das Änderungsbenachrichtigungsobjekt auf den nicht signalierten Zustand zurück. Anschließend können Sie das -Objekt in einem anderen Wartevorgang verwenden, um die Überwachung des Druckers oder Druckservers fortzusetzen. Das Betriebssystem legt das Objekt auf den signalierten Zustand fest, wenn das nächste Mal eine der angegebenen Änderungen am Drucker oder Druckserver auftritt. Die FindFirstPrinterChangeNotification-Funktion erstellt das Änderungsbenachrichtigungsobjekt und gibt den Satz der zu überwachenden Änderungen an.

Syntax

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

Parameter

hChange [in]

Ein Handle für ein Änderungsbenachrichtigungsobjekt, das einem Drucker oder Druckserver zugeordnet ist. Sie erhalten ein solches Handle, indem Sie die FindFirstPrinterChangeNotification-Funktion aufrufen. Das Betriebssystem legt dieses Änderungsbenachrichtigungsobjekt auf den signalierten Zustand fest, wenn es eine der im Änderungsbenachrichtigungsfilter des Objekts angegebenen Änderungen erkennt.

pdwChange [out, optional]

Ein Zeiger auf eine Variable, deren Bits festgelegt sind, um die Änderungen anzugeben, die aufgetreten sind, um die letzte Benachrichtigung zu verursachen. Die Bitflags, die festgelegt werden können, entsprechen denen, die im fdwFilter-Parameter des FindFirstPrinterChangeNotification-Aufrufs angegeben sind. Das System legt mindestens eines der folgenden Bitflags fest.

Wert Bedeutung
PRINTER_CHANGE_ADD_FORM
Dem Server wurde ein Formular hinzugefügt.
PRINTER_CHANGE_ADD_JOB
Ein Druckauftrag wurde an den Drucker gesendet.
PRINTER_CHANGE_ADD_PORT
Dem Server wurde ein Port oder Monitor hinzugefügt.
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
Dem Server wurde ein Druckprozessor hinzugefügt.
PRINTER_CHANGE_ADD_PRINTER
Dem Server wurde ein Drucker hinzugefügt.
PRINTER_CHANGE_ADD_PRINTER_DRIVER
Dem Server wurde ein Druckertreiber hinzugefügt.
PRINTER_CHANGE_CONFIGURE_PORT
Auf dem Server wurde ein Port konfiguriert.
PRINTER_CHANGE_DELETE_FORM
Ein Formular wurde vom Server gelöscht.
PRINTER_CHANGE_DELETE_JOB
Ein Auftrag wurde gelöscht.
PRINTER_CHANGE_DELETE_PORT
Ein Port oder Monitor wurde vom Server gelöscht.
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
Ein Druckprozessor wurde vom Server gelöscht.
PRINTER_CHANGE_DELETE_PRINTER
Ein Drucker wurde gelöscht.
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
Ein Druckertreiber wurde vom Server gelöscht.
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
Fehler bei der Druckerverbindung.
PRINTER_CHANGE_SET_FORM
Auf dem Server wurde ein Formular festgelegt.
PRINTER_CHANGE_SET_JOB
Ein Auftrag wurde festgelegt.
PRINTER_CHANGE_SET_PRINTER
Ein Drucker wurde festgelegt.
PRINTER_CHANGE_SET_PRINTER_DRIVER
Ein Druckertreiber wurde festgelegt.
PRINTER_CHANGE_WRITE_JOB
Auftragsdaten wurden geschrieben.
PRINTER_CHANGE_TIMEOUT
Für den Auftrag wurde ein Timeout ausgeführt.
PRINTER_CHANGE_SERVER
Windows 7: Auf dem Server ist eine Änderung aufgetreten.

pPrinterNotifyOptions [in, optional]

Ein Zeiger auf eine PRINTER_NOTIFY_OPTIONS-Struktur . Legen Sie den Flags-Member dieser Struktur auf PRINTER_NOTIFY_OPTIONS_REFRESH fest, damit die Funktion die aktuellen Daten für alle überwachten Druckerinformationsfelder zurückgibt. Die Funktion ignoriert alle anderen Member der -Struktur. Dieser Parameter kann NULL sein.

ppPrinterNotifyInfo [out, optional]

Ein Zeiger auf eine Zeigervariable, die einen Zeiger auf einen vom System zugewiesenen schreibgeschützten Puffer empfängt. Rufen Sie die Funktion FreePrinterNotifyInfo auf, um den Puffer frei zu geben, wenn Sie damit fertig sind. Dieser Parameter kann NULL sein, wenn keine Informationen erforderlich sind.

Der Puffer enthält eine PRINTER_NOTIFY_INFO-Struktur , die ein Array von PRINTER_NOTIFY_INFO_DATA-Strukturen enthält. Jedes Element des Arrays enthält Informationen zu einem der Felder, die im pPrinterNotifyOptions-Parameter des FindFirstPrinterChangeNotification-Aufrufs angegeben sind. In der Regel stellt die Funktion nur Daten für die Felder bereit, die geändert wurden, um die letzte Benachrichtigung zu verursachen. Wenn die Struktur, auf die der pPrinterNotifyOptions-Parameter verweist, jedoch PRINTER_NOTIFY_OPTIONS_REFRESH angibt, stellt die Funktion Daten für alle überwachten Felder bereit.

Wenn das PRINTER_NOTIFY_INFO_DISCARDED Bit im Flags-Element der PRINTER_NOTIFY_INFO-Struktur festgelegt ist, ist ein Überlauf oder Fehler aufgetreten, und Benachrichtigungen sind möglicherweise verloren gegangen. In diesem Fall werden keine zusätzlichen Benachrichtigungen gesendet, bis Sie einen zweiten FindNextPrinterChangeNotification-Aufruf ausführen, der PRINTER_NOTIFY_OPTIONS_REFRESH angibt.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Wert ungleich null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null.

Bemerkungen

Hinweis

Dies ist eine blockierende oder synchrone Funktion, die möglicherweise nicht sofort zurückgegeben wird. Wie schnell diese Funktion zurückgibt, hängt von Laufzeitfaktoren wie Netzwerk-status, Druckserverkonfiguration und Druckertreiberimplementierungsfaktoren ab, die beim Schreiben einer Anwendung schwer vorherzusagen sind. Das Aufrufen dieser Funktion aus einem Thread, der die Interaktion mit der Benutzeroberfläche verwaltet, könnte dazu führen, dass die Anwendung nicht mehr reagiert.

Rufen Sie die FindNextPrinterChangeNotification-Funktion auf, nachdem ein Wartevorgang für ein von FindFirstPrinterChangeNotification erstelltes Benachrichtigungsobjekt erfüllt wurde. Wenn Sie FindNextPrinterChangeNotification aufrufen, können Sie Informationen zu der Änderung abrufen, die den Wartevorgang erfüllt hat, und das Benachrichtigungsobjekt zurücksetzen, sodass es bei der nächsten Änderung signalisiert werden kann.

Rufen Sie mit einer Ausnahme die FindNextPrinterChangeNotification-Funktion nicht auf, wenn sich das Änderungsbenachrichtigungsobjekt nicht im signalierten Zustand befindet. Wenn eine Wartefunktion den Wert WAIT_TIMEOUT zurückgibt, befindet sich das Änderungsobjekt nicht im signalierten Zustand. Rufen Sie die FindNextPrinterChangeNotification-Funktion nur auf, wenn die Wait-Funktion ohne Timeout erfolgreich ist. Die Ausnahme ist, wenn FindNextPrinterChangeNotification mit dem im pPrinterNotifyOptions-Parameter festgelegten PRINTER_NOTIFY_OPTIONS_REFRESH Bit aufgerufen wird. Beachten Sie, dass auch wenn dieses Flag festgelegt ist, das PRINTER_NOTIFY_INFO_DISCARDED-Flag im ppPrinterNotifyInfo-Parameter festgelegt werden kann.

Um die Überwachung des Druckers oder Druckservers auf Änderungen fortzusetzen, wiederholen Sie den Zyklus des Aufrufens einer der Wartefunktionen , und rufen Sie dann die Funktion FindNextPrinterChangeNotification auf, um die Änderung zu untersuchen und das Benachrichtigungsobjekt zurückzusetzen.

FindNextPrinterChangeNotification kann mehrere Änderungen an demselben Druckerinformationsfeld in einer einzelnen Benachrichtigung kombinieren. In diesem Fall reduziert die Funktion in der Regel alle Änderungen für das Feld in einen einzelnen Eintrag im Array der PRINTER_NOTIFY_INFO_DATA-Strukturen in ppPrinterNotifyInfo; der einzelne Eintrag gibt nur die aktuellsten Informationen an. Für einige Auftrags- und Druckerinformationsfelder kann die Funktion jedoch mehrere Arrayeinträge für dasselbe Feld zurückgeben. In diesem Fall meldet der letzte Arrayeintrag für das Feld die aktuellen Daten, und die früheren Einträge enthalten die Daten für die Zwischenphasen.

Wenn Sie das Änderungsbenachrichtigungsobjekt nicht mehr benötigen, schließen Sie es, indem Sie die Funktion FindClosePrinterChangeNotification aufrufen.

Hinweis

In Windows XP mit Service Pack 2 (SP2) und höher blockiert die Internetverbindungsfirewall (ICF) standardmäßig Druckerports, aber eine Ausnahme für die Datei- und Druckfreigabe kann aktiviert werden. Wenn ein Benutzer eine Druckerverbindung mit einem anderen Computer herstellt und die Ausnahme nicht aktiviert ist, erhält der Benutzer keine Druckeränderungsbenachrichtigungen vom Server. Ein Computeradministrator muss die Ausnahme aktivieren.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie drucker status mithilfe dieser Funktionen überwachen können.

// 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();
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Winspool.h (Einschließen von Windows.h)
Bibliothek
Winspool.lib
DLL
Spoolss.dll

Siehe auch

Drucken

Druckspooler-API-Funktionen

FindClosePrinterChangeNotification

FindFirstPrinterChangeNotification

PRINTER_NOTIFY_INFO

PRINTER_NOTIFY_INFO_DATA

PRINTER_NOTIFY_OPTIONS