Share via


FindFirstPrinterChangeNotification-Funktion

Die FindFirstPrinterChangeNotification-Funktion erstellt ein Änderungsbenachrichtigungsobjekt und gibt ein Handle an das Objekt zurück. Sie können dieses Handle dann in einem Aufruf einer der Wartefunktionen verwenden, um Änderungen am Drucker oder Druckserver zu überwachen.

Der FindFirstPrinterChangeNotification-Aufruf gibt den Typ der zu überwachenden Änderungen an. Sie können eine Reihe von Bedingungen angeben, die auf Änderungen überwacht werden sollen, einen Satz zu überwachende Druckerinformationsfelder oder beides.

Ein Wartevorgang für das Änderungsbenachrichtigungshandle ist erfolgreich, wenn eine der angegebenen Änderungen im angegebenen Drucker oder Druckserver erfolgt. Anschließend rufen Sie die FindNextPrinterChangeNotification-Funktion auf, um Informationen zur Änderung abzurufen und das Änderungsbenachrichtigungsobjekt für die Verwendung im nächsten Wartevorgang zurückzusetzen.

Syntax

HANDLE FindFirstPrinterChangeNotification(
  _In_     HANDLE hPrinter,
           DWORD  fdwFilter,
           DWORD  fdwOptions,
  _In_opt_ LPVOID pPrinterNotifyOptions
);

Parameter

hPrinter [in]

Ein Handle für den Drucker oder Druckserver, den Sie überwachen möchten. Verwenden Sie die OpenPrinter - oder AddPrinter-Funktion , um einen Druckerhandle abzurufen.

fdwFilter

Die Bedingungen, die dazu führen, dass das Änderungsbenachrichtigungsobjekt in einen signalierten Zustand wechselt. Eine Änderungsbenachrichtigung tritt auf, wenn mindestens eine der angegebenen Bedingungen erfüllt ist. Der fdwFilter-Parameter kann 0 sein, wenn pPrinterNotifyOptions nicht NULL ist.

Dieser Parameter kann einen oder mehrere der folgenden Werte aufweisen.

Wert Bedeutung
PRINTER_CHANGE_FORM
Benachrichtigen Sie alle Änderungen an einem Formular. Sie können dieses allgemeine Flag oder mindestens eines der folgenden spezifischen Flags festlegen:
PRINTER_CHANGE_ADD_FORM
PRINTER_CHANGE_SET_FORM
PRINTER_CHANGE_DELETE_FORM
PRINTER_CHANGE_JOB
Benachrichtigen Sie alle Änderungen an einem Auftrag. Sie können dieses allgemeine Flag oder mindestens eines der folgenden spezifischen Flags festlegen:
PRINTER_CHANGE_ADD_JOB
PRINTER_CHANGE_SET_JOB
PRINTER_CHANGE_DELETE_JOB
PRINTER_CHANGE_WRITE_JOB
PRINTER_CHANGE_PORT
Benachrichtigen Sie alle Änderungen an einem Port. Sie können dieses allgemeine Flag oder mindestens eines der folgenden spezifischen Flags festlegen:
PRINTER_CHANGE_ADD_PORT
PRINTER_CHANGE_CONFIGURE_PORT
PRINTER_CHANGE_DELETE_PORT
PRINTER_CHANGE_PRINT_PROCESSOR
Benachrichtigen Sie alle Änderungen an einem Druckprozessor. Sie können dieses allgemeine Flag oder mindestens eines der folgenden spezifischen Flags festlegen:
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
PRINTER_CHANGE_PRINTER
Benachrichtigen Sie über Änderungen an einem Drucker. Sie können dieses allgemeine Flag oder mindestens eines der folgenden spezifischen Flags festlegen:
PRINTER_CHANGE_ADD_PRINTER
PRINTER_CHANGE_SET_PRINTER
PRINTER_CHANGE_DELETE_PRINTER
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
PRINTER_CHANGE_PRINTER_DRIVER
Benachrichtigen Sie über änderungen an einem Druckertreiber. Sie können dieses allgemeine Flag oder mindestens eines der folgenden spezifischen Flags festlegen:
PRINTER_CHANGE_ADD_PRINTER_DRIVER
PRINTER_CHANGE_SET_PRINTER_DRIVER
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
PRINTER_CHANGE_ALL
Benachrichtigen Sie, wenn eine der vorherigen Änderungen auftritt.
PRINTER_CHANGE_SERVER
Windows 7: Benachrichtigen Sie alle Änderungen am Server.
Dieses Flag ist nicht in den Änderungen enthalten, die durch Festlegen des PRINTER_CHANGE_ALL-Werts überwacht werden.

Beschreibungen der spezifischeren Flags in der vorherigen Tabelle finden Sie in der FindNextPrinterChangeNotification-Funktion .

fdwOptions

Das Flag, das die Kategorie der Drucker bestimmt, für die Benachrichtigungen funktionieren.

Wert Bedeutung
PRINTER_NOTIFY_CATEGORY_ALL
0x001000
FindNextPrinterChangeNotification gibt Benachrichtigungen für 2D- und 3D-Drucker zurück.
PRINTER_NOTIFY_CATEGORY_3D
0x002000
FindNextPrinterChangeNotification gibt Benachrichtigungen nur für 3D-Drucker zurück.

Wenn dieses Flag auf null (0) festgelegt ist, funktioniert FindFirstPrinterChangeNotification nur für 2D-Drucker. Dies ist der Standardwert.

pPrinterNotifyOptions [in, optional]

Ein Zeiger auf eine PRINTER_NOTIFY_OPTIONS-Struktur . Das pTypes-Element dieser Struktur ist ein Array aus mindestens einer PRINTER_NOTIFY_OPTIONS_TYPE Strukturen, von denen jede ein zu überwachende Druckerinformationsfeld angibt. Eine Änderungsbenachrichtigung tritt auf, wenn mindestens eines der angegebenen Felder geändert wird. Bei einer Änderung kann die Funktion FindNextPrinterChangeNotification die neuen Druckerinformationen abrufen. Dieser Parameter kann NULL sein, wenn fdwFilter nichtzero ist.

Eine Liste der Felder, die überwacht werden können, finden Sie unter PRINTER_NOTIFY_OPTIONS_TYPE.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle für ein Änderungsbenachrichtigungsobjekt, das dem angegebenen Drucker oder Druckserver zugeordnet ist.

Wenn die Funktion fehlschlägt, ist der Rückgabewert INVALID_HANDLE_VALUE.

Bemerkungen

Hinweis

Dies ist eine blockierende oder synchrone Funktion und wird möglicherweise nicht sofort zurückgegeben. 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. Wenn Sie diese Funktion über einen Thread aufrufen, der die Interaktion mit der Benutzeroberfläche verwaltet, kann die Anwendung nicht reagieren.

Rufen Sie zum Überwachen eines Druckers oder Druckservers die FindFirstPrinterChangeNotification-Funktion auf, und verwenden Sie dann das zurückgegebene Objekthandle für Änderungsbenachrichtigungen in einem Aufruf einer der Wartefunktionen. Ein Wartevorgang für ein Änderungsbenachrichtigungsobjekt ist erfüllt, wenn das Änderungsbenachrichtigungsobjekt in den signalierten Zustand wechselt. Das System signalisiert das Objekt, wenn eine oder mehrere der von fdwFilter oder pPrinterNotifyOptions angegebenen Änderungen im überwachten Drucker oder Druckserver auftreten.

Wenn Sie FindFirstPrinterChangeNotification aufrufen, muss entweder fdwFilter nonzero oder pPrinterNotifyOptions nicht NULL sein. Wenn beide angegeben sind, werden für beide Benachrichtigungen angezeigt.

Wenn ein Wartevorgang für ein Druckeränderungsbenachrichtigungsobjekt erfüllt ist, rufen Sie die Funktion FindNextPrinterChangeNotification auf, um die Ursache der Benachrichtigung zu ermitteln. Für eine durch fdwFilter angegebene Bedingung meldet FindNextPrinterChangeNotification die bedingung oder die bedingungen, die sich geändert haben. Für ein durch pPrinterNotifyOptions angegebenes Druckerinformationsfeld meldet FindNextPrinterChangeNotification das geänderte Feld bzw. die felder sowie die neuen Informationen für diese Felder. FindNextPrinterChangeNotification setzt auch das Änderungsbenachrichtigungsobjekt auf den nicht signalierten Zustand zurück, sodass Sie es in einem anderen Wartevorgang verwenden können, um die Überwachung des Druckers oder Druckservers fortzusetzen.

Rufen Sie mit einer Ausnahme die FindNextPrinterChangeNotification-Funktion nicht auf, wenn sich das Änderungsbenachrichtigungsobjekt nicht im signalierten Zustand befindet. Wenn die Wait-Funktion 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.

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

Aufrufer von FindFirstPrinterChangeNotification müssen sicherstellen, dass das an FindFirstPrinterChangeNotification übergebene Druckerhandle gültig bleibt, bis FindClosePrinterChangeNotification aufgerufen wird. Wenn das Druckerhandle vor dem Benachrichtigungshandle für Druckeränderungen geschlossen wird, können keine weiteren Benachrichtigungen übermittelt werden.

FindFirstPrinterChangeNotification sendet keine Änderungsbenachrichtigungen für 3D-Drucker an Serverhandles.

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.

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

FindNextPrinterChangeNotification

OpenPrinter

PRINTER_NOTIFY_OPTIONS

PRINTER_NOTIFY_OPTIONS_TYPE