Función FindFirstPrinterChangeNotification

La función FindFirstPrinterChangeNotification crea un objeto de notificación de cambio y devuelve un identificador al objeto . A continuación, puede usar este identificador en una llamada a una de las funciones de espera para supervisar los cambios en la impresora o el servidor de impresión.

La llamada FindFirstPrinterChangeNotification especifica el tipo de cambios que se van a supervisar. Puede especificar un conjunto de condiciones para supervisar los cambios, un conjunto de campos de información de impresora que se van a supervisar o ambos.

Una operación de espera en el identificador de notificación de cambio se realiza correctamente cuando se produce uno de los cambios especificados en la impresora o el servidor de impresión especificados. A continuación, llame a la función FindNextPrinterChangeNotification para recuperar información sobre el cambio y restablecer el objeto de notificación de cambios para su uso en la siguiente operación de espera.

Sintaxis

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

Parámetros

hPrinter [in]

Identificador de la impresora o del servidor de impresión que desea supervisar. Use la función OpenPrinter o AddPrinter para recuperar un identificador de impresora.

fdwFilter

Las condiciones que harán que el objeto de notificación de cambio entre en un estado señalado. Se produce una notificación de cambio cuando se cumplen una o varias de las condiciones especificadas. El parámetro fdwFilter puede ser cero si pPrinterNotifyOptions no es NULL.

Este parámetro puede ser uno o varios de los valores siguientes.

Value Significado
PRINTER_CHANGE_FORM
Notifique los cambios realizados en un formulario. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_FORM
PRINTER_CHANGE_SET_FORM
PRINTER_CHANGE_DELETE_FORM
PRINTER_CHANGE_JOB
Notificar cualquier cambio a un trabajo. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_JOB
PRINTER_CHANGE_SET_JOB
PRINTER_CHANGE_DELETE_JOB
PRINTER_CHANGE_WRITE_JOB
PRINTER_CHANGE_PORT
Notifique los cambios realizados en un puerto. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PORT
PRINTER_CHANGE_CONFIGURE_PORT
PRINTER_CHANGE_DELETE_PORT
PRINTER_CHANGE_PRINT_PROCESSOR
Notificar los cambios a un procesador de impresión. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PRINT_PROCESSOR
PRINTER_CHANGE_DELETE_PRINT_PROCESSOR
PRINTER_CHANGE_PRINTER
Notificar cualquier cambio a una impresora. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PRINTER
PRINTER_CHANGE_SET_PRINTER
PRINTER_CHANGE_DELETE_PRINTER
PRINTER_CHANGE_FAILED_CONNECTION_PRINTER
PRINTER_CHANGE_PRINTER_DRIVER
Notifique los cambios realizados en un controlador de impresora. Puede establecer esta marca general o una o varias de las siguientes marcas específicas:
PRINTER_CHANGE_ADD_PRINTER_DRIVER
PRINTER_CHANGE_SET_PRINTER_DRIVER
PRINTER_CHANGE_DELETE_PRINTER_DRIVER
PRINTER_CHANGE_ALL
Notifique si se produce alguno de los cambios anteriores.
PRINTER_CHANGE_SERVER
Windows 7: notificar cualquier cambio en el servidor.
Esta marca no se incluye en los cambios supervisados estableciendo el valor de PRINTER_CHANGE_ALL .

Para obtener descripciones de las marcas más específicas de la tabla anterior, consulte la función FindNextPrinterChangeNotification .

fdwOptions

Marca que determina la categoría de impresoras para la que funcionarán las notificaciones.

Value Significado
PRINTER_NOTIFY_CATEGORY_ALL
0x001000
FindNextPrinterChangeNotification devuelve notificaciones para impresoras 2D y 3D.
PRINTER_NOTIFY_CATEGORY_3D
0x002000
FindNextPrinterChangeNotification devuelve notificaciones solo para impresoras 3D.

Cuando esta marca se establece en cero (0), FindFirstPrinterChangeNotification solo funcionará para impresoras 2D. Este es el valor predeterminado.

pPrinterNotifyOptions [in, optional]

Puntero a una estructura de PRINTER_NOTIFY_OPTIONS . El miembro pTypes de esta estructura es una matriz de una o varias estructuras de PRINTER_NOTIFY_OPTIONS_TYPE , cada una de las cuales especifica un campo de información de impresora que se va a supervisar. Se produce una notificación de cambio cuando uno o varios de los campos especificados cambian. Cuando se produce un cambio, la función FindNextPrinterChangeNotification puede recuperar la nueva información de la impresora. Este parámetro puede ser NULL si fdwFilter no es cero.

Para obtener una lista de campos que se pueden supervisar, consulte PRINTER_NOTIFY_OPTIONS_TYPE.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un identificador de un objeto de notificación de cambio asociado a la impresora o al servidor de impresión especificados.

Si se produce un error en la función, el valor devuelto es INVALID_HANDLE_VALUE.

Observaciones

Nota

Se trata de una función de bloqueo o sincrónica que podría no devolverse inmediatamente. La rapidez con la que devuelve esta función depende de factores en tiempo de ejecución, como el estado de red, la configuración del servidor de impresión y los factores de implementación del controlador de impresora que son difíciles de predecir al escribir una aplicación. Llamar a esta función desde un subproceso que administra la interacción con la interfaz de usuario podría hacer que la aplicación parezca que no responde.

Para supervisar una impresora o un servidor de impresión, llame a la función FindFirstPrinterChangeNotification y, a continuación, use el identificador de objeto de notificación de cambio devuelto en una llamada a una de las funciones de espera. Se cumple una operación de espera en un objeto de notificación de cambio cuando el objeto de notificación de cambio entra en el estado señalado. El sistema indica al objeto cuando uno o varios de los cambios especificados por fdwFilter o pPrinterNotifyOptions se producen en la impresora supervisada o en el servidor de impresión.

Cuando se llama a FindFirstPrinterChangeNotification, fdwFilter debe ser distinto de cero o pPrinterNotifyOptions debe ser distinto de NULL. Si se especifican ambos, se producirán notificaciones para ambos.

Cuando se cumpla una operación de espera en un objeto de notificación de cambio de impresora, llame a la función FindNextPrinterChangeNotification para determinar la causa de la notificación. Para una condición especificada por fdwFilter, FindNextPrinterChangeNotification notifica la condición o las condiciones que cambiaron. Para un campo de información de impresora especificado por pPrinterNotifyOptions, FindNextPrinterChangeNotification notifica el campo o los campos que han cambiado, así como la nueva información de estos campos. FindNextPrinterChangeNotification también restablece el objeto de notificación de cambio al estado no asignado para que pueda usarlo en otra operación de espera para continuar supervisando la impresora o el servidor de impresión.

Con una excepción, no llame a la función FindNextPrinterChangeNotification si el objeto de notificación de cambio no está en el estado señalado. Si la función wait devuelve el valor WAIT_TIMEOUT, el objeto de cambio no está en estado señalado. Llame a la función FindNextPrinterChangeNotification solo si la función de espera se realiza correctamente sin que se agote el tiempo de espera. La excepción es cuando se llama a FindNextPrinterChangeNotification con el PRINTER_NOTIFY_OPTIONS_REFRESH bit establecido en el parámetro pPrinterNotifyOptions .

Cuando ya no necesite el objeto de notificación de cambio, ciérrelo llamando a la función FindClosePrinterChangeNotification .

Los autores de llamadas de FindFirstPrinterChangeNotification deben asegurarse de que el identificador de impresora pasado a FindFirstPrinterChangeNotification sigue siendo válido hasta que se llame a FindClosePrinterChangeNotification . Si el controlador de impresora se cierra antes de que se entregue el identificador de notificación de cambio de impresora, no se entregarán más notificaciones.

FindFirstPrinterChangeNotification no enviará notificaciones de cambio para impresoras 3D a identificadores de servidor.

Nota

En Windows XP con Service Pack 2 (SP2) y versiones posteriores, el Firewall de conexión a Internet (ICF) bloquea los puertos de impresora de forma predeterminada, pero se puede habilitar una excepción para compartir archivos e impresión. Si un usuario realiza una conexión de impresora a otra máquina y la excepción no está habilitada, el usuario no recibirá notificaciones de cambio de impresora del servidor. Un administrador de la máquina tendrá que habilitar la excepción.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winspool.h (incluya Windows.h)
Biblioteca
Winspool.lib
Archivo DLL
Spoolss.dll

Consulte también

Impresión

Funciones de la API del administrador de trabajos de impresión

FindClosePrinterChangeNotification

FindNextPrinterChangeNotification

OpenPrinter

PRINTER_NOTIFY_OPTIONS

PRINTER_NOTIFY_OPTIONS_TYPE